refactor: IndexKey to ValueKey
This commit is contained in:
@@ -473,12 +473,15 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
physics: widget.scrollPhysics,
|
physics: widget.scrollPhysics,
|
||||||
itemScrollController: _scrollController,
|
itemScrollController: _scrollController,
|
||||||
reverse: widget.reverse,
|
reverse: widget.reverse,
|
||||||
itemCount: messages.length,
|
itemCount: itemCount,
|
||||||
findChildIndexCallback: (Key key) {
|
findChildIndexCallback: (Key key) {
|
||||||
final indexedKey = key as IndexedKey;
|
final indexedKey = key as IndexedKey;
|
||||||
final index = messagesIndex[indexedKey.value];
|
final valueKey = indexedKey.key as ValueKey<String>?;
|
||||||
if (index != null) {
|
if (valueKey != null) {
|
||||||
return ((index + 2) * 2) - 1;
|
final index = messagesIndex[valueKey.value];
|
||||||
|
if (index != null) {
|
||||||
|
return ((index + 2) * 2) - 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -628,12 +631,14 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
messages,
|
messages,
|
||||||
streamChannel!,
|
streamChannel!,
|
||||||
i - 2,
|
i - 2,
|
||||||
i,
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
messageWidget = buildMessage(message, messages, i - 2, i);
|
messageWidget = buildMessage(message, messages, i - 2);
|
||||||
}
|
}
|
||||||
return messageWidget;
|
return KeyedSubtree(
|
||||||
|
key: ValueKey(message.id),
|
||||||
|
child: messageWidget,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -856,13 +861,10 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
List<Message> messages,
|
List<Message> messages,
|
||||||
StreamChannelState streamChannel,
|
StreamChannelState streamChannel,
|
||||||
int index,
|
int index,
|
||||||
int buildItemIndex,
|
|
||||||
) {
|
) {
|
||||||
final messageWidget =
|
final messageWidget = buildMessage(message, messages, index);
|
||||||
buildMessage(message, messages, index, buildItemIndex);
|
|
||||||
|
|
||||||
return VisibilityDetector(
|
return VisibilityDetector(
|
||||||
key: IndexedKey(message.id, buildItemIndex),
|
key: ValueKey('visibility: ${message.id}'),
|
||||||
onVisibilityChanged: (visibility) {
|
onVisibilityChanged: (visibility) {
|
||||||
final isVisible = visibility.visibleBounds != Rect.zero;
|
final isVisible = visibility.visibleBounds != Rect.zero;
|
||||||
if (isVisible) {
|
if (isVisible) {
|
||||||
@@ -954,13 +956,11 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
return defaultMessageWidget;
|
return defaultMessageWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget buildMessage(
|
Widget buildMessage(Message message, List<Message> messages, int index) {
|
||||||
Message message, List<Message> messages, int index, int buildItemIndex) {
|
|
||||||
if ((message.type == 'system' || message.type == 'error') &&
|
if ((message.type == 'system' || message.type == 'error') &&
|
||||||
message.text?.isNotEmpty == true) {
|
message.text?.isNotEmpty == true) {
|
||||||
return widget.systemMessageBuilder?.call(context, message) ??
|
return widget.systemMessageBuilder?.call(context, message) ??
|
||||||
SystemMessage(
|
SystemMessage(
|
||||||
key: IndexedKey(message.id, buildItemIndex),
|
|
||||||
message: message,
|
message: message,
|
||||||
onMessageTap: (message) {
|
onMessageTap: (message) {
|
||||||
if (widget.onSystemMessageTap != null) {
|
if (widget.onSystemMessageTap != null) {
|
||||||
@@ -1040,7 +1040,6 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
members.firstWhereOrNull((e) => e.user!.id == currentUser!.id);
|
members.firstWhereOrNull((e) => e.user!.id == currentUser!.id);
|
||||||
|
|
||||||
Widget messageWidget = MessageWidget(
|
Widget messageWidget = MessageWidget(
|
||||||
key: IndexedKey(message.id, buildItemIndex),
|
|
||||||
message: message,
|
message: message,
|
||||||
reverse: isMyMessage,
|
reverse: isMyMessage,
|
||||||
showReactions: !message.isDeleted,
|
showReactions: !message.isDeleted,
|
||||||
|
|||||||
Reference in New Issue
Block a user