fix: default message filter
This commit is contained in:
@@ -306,7 +306,12 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
final initialScrollIndex = widget.initialScrollIndex;
|
final initialScrollIndex = widget.initialScrollIndex;
|
||||||
if (initialScrollIndex != null) return initialScrollIndex;
|
if (initialScrollIndex != null) return initialScrollIndex;
|
||||||
if (streamChannel!.initialMessageId != null) {
|
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 totalMessages = messages.length;
|
||||||
final messageIndex =
|
final messageIndex =
|
||||||
messages.indexWhere((e) => e.id == streamChannel!.initialMessageId);
|
messages.indexWhere((e) => e.id == streamChannel!.initialMessageId);
|
||||||
|
|||||||
@@ -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/stream_channel.dart';
|
||||||
import 'package:stream_chat_flutter_core/src/typedef.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
|
/// [MessageListCore] is a simplified class that allows fetching a list of
|
||||||
/// messages while exposing UI builders.
|
/// messages while exposing UI builders.
|
||||||
///
|
///
|
||||||
@@ -132,25 +140,20 @@ class MessageListCoreState extends State<MessageListCore> {
|
|||||||
? _streamChannel!.channel.state?.threads[widget.parentMessage!.id]
|
? _streamChannel!.channel.state?.threads[widget.parentMessage!.id]
|
||||||
: _streamChannel!.channel.state?.messages;
|
: _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<List<Message>>(
|
return BetterStreamBuilder<List<Message>>(
|
||||||
initialData: initialData,
|
initialData: initialData,
|
||||||
comparator: const ListEquality().equals,
|
comparator: const ListEquality().equals,
|
||||||
stream: messagesStream!.map(
|
stream: messagesStream,
|
||||||
(messages) =>
|
|
||||||
messages?.where(widget.messageFilter ?? defaultFilter).toList(
|
|
||||||
growable: false,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
errorBuilder: widget.errorBuilder,
|
errorBuilder: widget.errorBuilder,
|
||||||
noDataBuilder: widget.loadingBuilder,
|
noDataBuilder: widget.loadingBuilder,
|
||||||
builder: (context, data) {
|
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 (messageList.isEmpty && !_isThreadConversation) {
|
||||||
if (_upToDate) {
|
if (_upToDate) {
|
||||||
return widget.emptyBuilder(context);
|
return widget.emptyBuilder(context);
|
||||||
|
|||||||
Reference in New Issue
Block a user