add channel to view if new message arrives and the channel is hidden
This commit is contained in:
@@ -377,6 +377,7 @@ class _ChannelListViewState extends State<ChannelListView>
|
|||||||
.on(
|
.on(
|
||||||
EventType.connectionRecovered,
|
EventType.connectionRecovered,
|
||||||
EventType.notificationAddedToChannel,
|
EventType.notificationAddedToChannel,
|
||||||
|
EventType.notificationMessageNew,
|
||||||
EventType.channelVisible,
|
EventType.channelVisible,
|
||||||
)
|
)
|
||||||
.listen((event) {
|
.listen((event) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:rxdart/rxdart.dart';
|
import 'package:rxdart/rxdart.dart';
|
||||||
import 'package:stream_chat/stream_chat.dart';
|
import 'package:stream_chat/stream_chat.dart';
|
||||||
import 'package:stream_chat_flutter/src/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
|
/// Widget dedicated to the management of a channel list with pagination
|
||||||
class ChannelsBloc extends StatefulWidget {
|
class ChannelsBloc extends StatefulWidget {
|
||||||
@@ -58,6 +59,8 @@ class ChannelsBlocState extends State<ChannelsBloc>
|
|||||||
Stream<bool> get queryChannelsLoading =>
|
Stream<bool> get queryChannelsLoading =>
|
||||||
_queryChannelsLoadingController.stream;
|
_queryChannelsLoadingController.stream;
|
||||||
|
|
||||||
|
List<Channel> _hiddenChannels = [];
|
||||||
|
|
||||||
/// Calls [client.queryChannels] updating [queryChannelsLoading] stream
|
/// Calls [client.queryChannels] updating [queryChannelsLoading] stream
|
||||||
Future<void> queryChannels({
|
Future<void> queryChannels({
|
||||||
Map<String, dynamic> filter,
|
Map<String, dynamic> filter,
|
||||||
@@ -119,6 +122,23 @@ class ChannelsBlocState extends State<ChannelsBloc>
|
|||||||
final channel = newChannels.removeAt(index);
|
final channel = newChannels.removeAt(index);
|
||||||
newChannels.insert(0, channel);
|
newChannels.insert(0, channel);
|
||||||
_channelsController.add(newChannels);
|
_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<Channel>.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);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user