@@ -396,27 +396,29 @@ class _ChatGroupedListWidgetState extends State<ChatGroupedListWidget>
396396 ? .repliedMsgAutoScrollConfig
397397 .enableScrollToRepliedMsg ??
398398 false ;
399- // ListView is reversed: index 0 = newest (bottom).
400- // isLastInGroup → avatar shown (newest in group, visually bottom).
401- // isFirstInGroup → name shown (oldest in group, visually top).
402- //
403- // Edited messages show an "Edited" label ABOVE the bubble,
404- // creating a visual break only on the top side. So:
405- // • isFirstInGroup=true when THIS message is edited
406- // (Edited label above → detach from older message above).
407- // • isLastInGroup=true when the NEWER/below neighbor is
408- // edited (that neighbor's Edited label visually separates
409- // it from the current message below).
410- // The connection below the edited message is preserved so
411- // messages sent after it stay grouped with it.
412- final prevMessage =
413- newIndex > 0 ? messages[newIndex - 1 ] : null ;
414- final isLastInGroup = newIndex == 0 ||
415- ! _isSameGroup (message, messages[newIndex - 1 ]) ||
416- (prevMessage? .updatedAt != null );
417- final isFirstInGroup = newIndex == messages.length - 1 ||
418- ! _isSameGroup (message, messages[newIndex + 1 ]) ||
419- message.updatedAt != null ; return ChatBubbleWidget (
399+ // ListView is reversed: index 0 = newest (bottom).
400+ // isLastInGroup → avatar shown (newest in group, visually bottom).
401+ // isFirstInGroup → name shown (oldest in group, visually top).
402+ //
403+ // Edited messages show an "Edited" label ABOVE the bubble,
404+ // creating a visual break only on the top side. So:
405+ // • isFirstInGroup=true when THIS message is edited
406+ // (Edited label above → detach from older message above).
407+ // • isLastInGroup=true when the NEWER/below neighbor is
408+ // edited (that neighbor's Edited label visually separates
409+ // it from the current message below).
410+ // The connection below the edited message is preserved so
411+ // messages sent after it stay grouped with it.
412+ final prevMessage =
413+ newIndex > 0 ? messages[newIndex - 1 ] : null ;
414+ final isLastInGroup = newIndex == 0 ||
415+ ! _isSameGroup (message, messages[newIndex - 1 ]) ||
416+ (prevMessage? .updatedAt != null );
417+ final isFirstInGroup = newIndex ==
418+ messages.length - 1 ||
419+ ! _isSameGroup (message, messages[newIndex + 1 ]) ||
420+ message.updatedAt != null ;
421+ return ChatBubbleWidget (
420422 key: messageKey,
421423 message: message,
422424 slideAnimation: _slideAnimation,
@@ -430,8 +432,9 @@ class _ChatGroupedListWidgetState extends State<ChatGroupedListWidget>
430432 shouldHighlight: state == message.id,
431433 onReplyTap: enableScrollToRepliedMsg
432434 ? (id) => _onReplyTap (id, messages)
433- : null ,isFirstInGroup: isFirstInGroup,
434- isLastInGroup: isLastInGroup,
435+ : null ,
436+ isFirstInGroup: isFirstInGroup,
437+ isLastInGroup: isLastInGroup,
435438 );
436439 },
437440 );
0 commit comments