From 4c11dca79240cabcca83e2c4815bb5e3485783ba Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 11 May 2021 10:11:38 +0530 Subject: [PATCH] Added a new message list controller --- packages/stream_chat/example/lib/main.dart | 8 ++++---- packages/stream_chat/lib/src/api/channel.dart | 12 +++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/stream_chat/example/lib/main.dart b/packages/stream_chat/example/lib/main.dart index 11e9779f..bbcc86b8 100644 --- a/packages/stream_chat/example/lib/main.dart +++ b/packages/stream_chat/example/lib/main.dart @@ -79,21 +79,21 @@ class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { - final messages = channel.state!.channelStateStream; + final messages = channel.state!.messagesStream; return Scaffold( appBar: AppBar( title: Text('Channel: ${channel.id}'), ), body: SafeArea( - child: StreamBuilder( + child: StreamBuilder?>( stream: messages, builder: ( BuildContext context, - AsyncSnapshot snapshot, + AsyncSnapshot?> snapshot, ) { if (snapshot.hasData && snapshot.data != null) { return MessageView( - messages: snapshot.data!.messages.reversed.toList(), + messages: snapshot.data!.reversed.toList(), channel: channel, ); } else if (snapshot.hasError) { diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index a1eab825..8b744cec 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:math'; -import 'package:collection/collection.dart' show IterableExtension; +import 'package:collection/collection.dart' show IterableExtension, ListEquality; import 'package:dio/dio.dart'; import 'package:logging/logging.dart'; import 'package:rxdart/rxdart.dart'; @@ -1296,6 +1296,8 @@ class ChannelClientState { _channelStateController = BehaviorSubject.seeded(channelState); + _messageListController = BehaviorSubject.seeded(channelState.messages); + _listenTypingEvents(); _listenMessageNew(); @@ -1601,8 +1603,7 @@ class ChannelClientState { List get messages => _channelState.messages; /// Channel message list as a stream - Stream?> get messagesStream => - channelStateStream.map((cs) => cs.messages); + Stream?> get messagesStream => _messageListController.stream; /// Channel pinned message list List? get pinnedMessages => _channelState.pinnedMessages.toList(); @@ -1772,10 +1773,14 @@ class ChannelClientState { /// The channel state related to this client ChannelState get channelState => _channelStateController.value!; late BehaviorSubject _channelStateController; + late BehaviorSubject> _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]); } @@ -1933,6 +1938,7 @@ class ChannelClientState { retryQueue!.dispose(); _subscriptions.forEach((s) => s.cancel()); _channelStateController.close(); + _messageListController.close(); _isUpToDateController.close(); _threadsController.close(); _cleaningTimer.cancel();