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 e6d349fc..4d1c0929 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -467,9 +467,9 @@ class _MessageListViewState extends State { reverse: widget.reverse, itemCount: messages.length, findChildIndexCallback: (Key key) { - final String data = (key as ValueKey).value; - final index = - messages.indexWhere((element) => element.id == data); + final indexedKey = key as IndexedKey; + final index = messages.indexWhere( + (element) => element.id == indexedKey.value); return ((index + 2) * 2) - 1; }, @@ -600,9 +600,10 @@ class _MessageListViewState extends State { messages, streamChannel!, i - 2, + i, ); } else { - messageWidget = buildMessage(message, messages, i - 2); + messageWidget = buildMessage(message, messages, i - 2, i); } return messageWidget; }, @@ -824,11 +825,13 @@ class _MessageListViewState extends State { List messages, StreamChannelState streamChannel, int index, + int buildItemIndex, ) { - final messageWidget = buildMessage(message, messages, index); + final messageWidget = + buildMessage(message, messages, index, buildItemIndex); return VisibilityDetector( - key: ValueKey(message.id), + key: IndexedKey(message.id, buildItemIndex), onVisibilityChanged: (visibility) { final isVisible = visibility.visibleBounds != Rect.zero; if (isVisible) { @@ -920,12 +923,13 @@ class _MessageListViewState extends State { return defaultMessageWidget; } - Widget buildMessage(Message message, List messages, int index) { + Widget buildMessage( + Message message, List messages, int index, int buildItemIndex) { if ((message.type == 'system' || message.type == 'error') && message.text?.isNotEmpty == true) { return widget.systemMessageBuilder?.call(context, message) ?? SystemMessage( - key: ValueKey(message.id), + key: IndexedKey(message.id, buildItemIndex), message: message, onMessageTap: (message) { if (widget.onSystemMessageTap != null) { @@ -1005,7 +1009,7 @@ class _MessageListViewState extends State { members.firstWhereOrNull((e) => e.user!.id == currentUser!.id); Widget messageWidget = MessageWidget( - key: ValueKey(message.id), + key: IndexedKey(message.id, buildItemIndex), message: message, reverse: isMyMessage, showReactions: !message.isDeleted,