diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index 1a5f6819..ecd9c220 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -306,7 +306,12 @@ class _MessageListViewState extends State { final initialScrollIndex = widget.initialScrollIndex; if (initialScrollIndex != null) return initialScrollIndex; if (streamChannel!.initialMessageId != null) { - final messages = streamChannel!.channel.state!.messages; + final messages = streamChannel!.channel.state!.messages + .where(widget.messageFilter ?? + defaultMessageFilter( + streamChannel!.channel.client.state.currentUser!.id, + )) + .toList(growable: false); final totalMessages = messages.length; final messageIndex = messages.indexWhere((e) => e.id == streamChannel!.initialMessageId); diff --git a/packages/stream_chat_flutter_core/lib/src/message_list_core.dart b/packages/stream_chat_flutter_core/lib/src/message_list_core.dart index b9b423ce..74e40d7f 100644 --- a/packages/stream_chat_flutter_core/lib/src/message_list_core.dart +++ b/packages/stream_chat_flutter_core/lib/src/message_list_core.dart @@ -9,6 +9,14 @@ import 'package:stream_chat_flutter_core/src/better_stream_builder.dart'; import 'package:stream_chat_flutter_core/src/stream_channel.dart'; import 'package:stream_chat_flutter_core/src/typedef.dart'; +/// Default filter for the message list +bool Function(Message) defaultMessageFilter(String currentUserId) => + (Message m) { + final isMyMessage = m.user?.id == currentUserId; + if (m.shadowed && !isMyMessage) return false; + return true; + }; + /// [MessageListCore] is a simplified class that allows fetching a list of /// messages while exposing UI builders. /// @@ -132,25 +140,20 @@ class MessageListCoreState extends State { ? _streamChannel!.channel.state?.threads[widget.parentMessage!.id] : _streamChannel!.channel.state?.messages; - bool defaultFilter(Message m) { - final isMyMessage = m.user?.id == _currentUser?.id; - if (m.shadowed && !isMyMessage) return false; - return true; - } - return BetterStreamBuilder>( initialData: initialData, comparator: const ListEquality().equals, - stream: messagesStream!.map( - (messages) => - messages?.where(widget.messageFilter ?? defaultFilter).toList( - growable: false, - ), - ), + stream: messagesStream, errorBuilder: widget.errorBuilder, noDataBuilder: widget.loadingBuilder, builder: (context, data) { - final messageList = data.reversed.toList(growable: false); + final messageList = data + .where( + widget.messageFilter ?? defaultMessageFilter(_currentUser!.id), + ) + .toList(growable: false) + .reversed + .toList(growable: false); if (messageList.isEmpty && !_isThreadConversation) { if (_upToDate) { return widget.emptyBuilder(context);