From 40bf12a922f6657ffd4344e98cdf3b15b94a369e Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Wed, 5 Aug 2020 09:36:16 +0200 Subject: [PATCH] add channel to view if new message arrives and the channel is hidden --- lib/src/channel_list_view.dart | 1 + lib/src/channels_bloc.dart | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lib/src/channel_list_view.dart b/lib/src/channel_list_view.dart index 782dd772..61b557b6 100644 --- a/lib/src/channel_list_view.dart +++ b/lib/src/channel_list_view.dart @@ -377,6 +377,7 @@ class _ChannelListViewState extends State .on( EventType.connectionRecovered, EventType.notificationAddedToChannel, + EventType.notificationMessageNew, EventType.channelVisible, ) .listen((event) { diff --git a/lib/src/channels_bloc.dart b/lib/src/channels_bloc.dart index b38c6030..6d230faa 100644 --- a/lib/src/channels_bloc.dart +++ b/lib/src/channels_bloc.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:rxdart/rxdart.dart'; import 'package:stream_chat/stream_chat.dart'; import 'package:stream_chat_flutter/src/stream_chat.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Widget dedicated to the management of a channel list with pagination class ChannelsBloc extends StatefulWidget { @@ -58,6 +59,8 @@ class ChannelsBlocState extends State Stream get queryChannelsLoading => _queryChannelsLoadingController.stream; + List _hiddenChannels = []; + /// Calls [client.queryChannels] updating [queryChannelsLoading] stream Future queryChannels({ Map filter, @@ -119,6 +122,23 @@ class ChannelsBlocState extends State final channel = newChannels.removeAt(index); newChannels.insert(0, channel); _channelsController.add(newChannels); + } else { + final hiddenIndex = _hiddenChannels.indexWhere((c) => c.cid == e.cid); + if (hiddenIndex > -1) { + newChannels.insert(0, _hiddenChannels[hiddenIndex]); + _hiddenChannels.removeAt(hiddenIndex); + _channelsController.add(newChannels); + } + } + })); + + _subscriptions.add(client.on(EventType.channelHidden).listen((event) async { + final newChannels = List.from(channels); + final channelIndex = newChannels.indexWhere((c) => c.cid == event.cid); + if (channelIndex > -1) { + final channel = newChannels.removeAt(channelIndex); + _hiddenChannels.add(channel); + _channelsController.add(newChannels); } }));