Changed to distinct implementation

This commit is contained in:
Deven Joshi
2021-05-11 14:55:25 +05:30
parent 16ecd0568e
commit 682fe3f447
@@ -1297,8 +1297,6 @@ class ChannelClientState {
_channelStateController = BehaviorSubject.seeded(channelState);
_messageListController = BehaviorSubject.seeded(channelState.messages);
_listenTypingEvents();
_listenMessageNew();
@@ -1604,7 +1602,9 @@ class ChannelClientState {
List<Message> get messages => _channelState.messages;
/// Channel message list as a stream
Stream<List<Message>?> get messagesStream => _messageListController.stream;
Stream<List<Message>?> get messagesStream => channelStateStream
.map((cs) => cs.messages)
.distinct((prev, next) => const ListEquality().equals(prev, next));
/// Channel pinned message list
List<Message>? get pinnedMessages => _channelState.pinnedMessages.toList();
@@ -1774,15 +1774,10 @@ class ChannelClientState {
/// The channel state related to this client
ChannelState get channelState => _channelStateController.value!;
late BehaviorSubject<ChannelState> _channelStateController;
late BehaviorSubject<List<Message>> _messageListController;
final Debounce _debouncedUpdatePersistenceChannelState;
set _channelState(ChannelState v) {
if (!const ListEquality()
.equals(_messageListController.value, v.messages)) {
_messageListController.add(v.messages);
}
_channelStateController.add(v);
_debouncedUpdatePersistenceChannelState.call([v]);
}
@@ -1940,7 +1935,6 @@ class ChannelClientState {
retryQueue!.dispose();
_subscriptions.forEach((s) => s.cancel());
_channelStateController.close();
_messageListController.close();
_isUpToDateController.close();
_threadsController.close();
_cleaningTimer.cancel();