diff --git a/packages/stream_chat_flutter/lib/src/message_input/quoted_message_widget.dart b/packages/stream_chat_flutter/lib/src/message_input/quoted_message_widget.dart index 795154ca..33145852 100644 --- a/packages/stream_chat_flutter/lib/src/message_input/quoted_message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_input/quoted_message_widget.dart @@ -22,7 +22,6 @@ class StreamQuotedMessageWidget extends StatelessWidget { this.padding = const EdgeInsets.all(8), this.onTap, this.onQuotedMessageClear, - this.composing = true, }); /// The message @@ -53,9 +52,6 @@ class StreamQuotedMessageWidget extends StatelessWidget { /// Callback for clearing quoted messages. final VoidCallback? onQuotedMessageClear; - /// True if the message is being composed - final bool composing; - @override Widget build(BuildContext context) { final children = [ @@ -63,11 +59,10 @@ class StreamQuotedMessageWidget extends StatelessWidget { child: _QuotedMessage( message: message, textLimit: textLimit, - composing: composing, - onQuotedMessageClear: onQuotedMessageClear, messageTheme: messageTheme, showBorder: showBorder, reverse: reverse, + onQuotedMessageClear: onQuotedMessageClear, attachmentThumbnailBuilders: attachmentThumbnailBuilders, ), ), @@ -104,17 +99,15 @@ class _QuotedMessage extends StatelessWidget { const _QuotedMessage({ required this.message, required this.textLimit, - required this.composing, - required this.onQuotedMessageClear, required this.messageTheme, required this.showBorder, required this.reverse, + this.onQuotedMessageClear, this.attachmentThumbnailBuilders, }); final Message message; final int textLimit; - final bool composing; final VoidCallback? onQuotedMessageClear; final StreamMessageThemeData messageTheme; final bool showBorder; @@ -161,7 +154,7 @@ class _QuotedMessage extends StatelessWidget { } else { // Show quoted message children = [ - if (composing) + if (onQuotedMessageClear != null) PlatformWidgetBuilder( web: (context, child) => child, desktop: (context, child) => child, diff --git a/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart index 5435e95c..89db51dd 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart @@ -282,9 +282,14 @@ class StreamMessageListView extends StatefulWidget { BuildContext context, List spacingTypes, ) { - if (!spacingTypes.contains(SpacingType.defaultSpacing)) { + if (spacingTypes.contains(SpacingType.otherUser)) { + return const SizedBox(height: 8); + } else if (spacingTypes.contains(SpacingType.thread)) { + return const SizedBox(height: 8); + } else if (spacingTypes.contains(SpacingType.timeDiff)) { return const SizedBox(height: 8); } + return const SizedBox(height: 2); } @@ -644,7 +649,8 @@ class _StreamMessageListViewState extends State { Widget separator; - final isThread = message.replyCount! > 0; + final isPartOfThread = message.replyCount! > 0 || + message.showInChannel == true; if (!Jiffy(message.createdAt.toLocal()).isSame( nextMessage.createdAt.toLocal(), @@ -666,7 +672,7 @@ class _StreamMessageListViewState extends State { final spacingRules = [ if (hasTimeDiff) SpacingType.timeDiff, if (!isNextUserSame) SpacingType.otherUser, - if (isThread) SpacingType.thread, + if (isPartOfThread) SpacingType.thread, if (isDeleted) SpacingType.deleted, ]; @@ -680,7 +686,7 @@ class _StreamMessageListViewState extends State { ); } - if (!isThread && + if (!isPartOfThread && unreadCount > 0 && _oldestUnreadMessage?.id == nextMessage.id) { final unreadMessagesSeparator = diff --git a/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart b/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart index 04cb4f33..5d5bbc0d 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/bottom_row.dart @@ -147,11 +147,15 @@ class BottomRow extends StatelessWidget { @override Widget build(BuildContext context) { if (isDeleted) { - return deletedBottomRowBuilder?.call( - context, - message, - ) ?? - const StreamVisibleFootnote(); + final deletedBottomRowBuilder = this.deletedBottomRowBuilder; + if (deletedBottomRowBuilder != null) { + return deletedBottomRowBuilder(context, message); + } + + // Only show visible footnote for ownUser. + final currentUser = streamChat.currentUser; + final isOwnUser = message.user?.id == currentUser?.id; + if (isOwnUser) return const StreamVisibleFootnote(); } final children = []; diff --git a/packages/stream_chat_flutter/lib/src/message_widget/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget/message_widget.dart index 267c96d4..a2a3b55f 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/message_widget.dart @@ -794,8 +794,7 @@ class _StreamMessageWidgetState extends State showUsername || showTimeStamp || showInChannel || - showSendingIndicator || - isDeleted; + showSendingIndicator; /// {@template isPinned} /// Whether [StreamMessageWidget.message] is pinned or not. diff --git a/packages/stream_chat_flutter/lib/src/message_widget/quoted_message.dart b/packages/stream_chat_flutter/lib/src/message_widget/quoted_message.dart index 028cc443..f75bdbe7 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/quoted_message.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/quoted_message.dart @@ -65,7 +65,6 @@ class _QuotedMessageState extends State { top: 8, bottom: widget.hasNonUrlAttachments ? 8 : 0, ), - composing: false, ); } }