diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index f7ff075205..24d11091ca 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -146,6 +146,10 @@ ## 8.0.0 +✅ Added + +- Added `showFailedIndicator` parameter for `StreamMessageWidget` to toggle displaying the failed message icon. + 🐞 Fixed - Fixed null errors in web from markdown. diff --git a/packages/stream_chat_flutter/lib/src/message_widget/message_card.dart b/packages/stream_chat_flutter/lib/src/message_widget/message_card.dart index a5687b67b1..03b4db6c0a 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/message_card.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/message_card.dart @@ -29,6 +29,7 @@ class MessageCard extends StatefulWidget { required this.attachmentActionsModalBuilder, required this.textPadding, required this.reverse, + required this.showFailedIndicator, this.shape, this.borderSide, this.borderRadiusGeometry, @@ -120,6 +121,9 @@ class MessageCard extends StatefulWidget { /// {@macro reverse} final bool reverse; + /// {@macro showFailedIndicator} + final bool showFailedIndicator; + @override State createState() => _MessageCardState(); } @@ -165,8 +169,9 @@ class _MessageCardState extends State { return Container( constraints: const BoxConstraints().copyWith(maxWidth: widthLimit), margin: EdgeInsets.symmetric( - horizontal: (widget.isFailedState ? 15.0 : 0.0) + - (widget.showUserAvatar == DisplayWidget.gone ? 0 : 4.0), + horizontal: + (widget.isFailedState && widget.showFailedIndicator ? 15.0 : 0.0) + + (widget.showUserAvatar == DisplayWidget.gone ? 0 : 4.0), ), clipBehavior: Clip.hardEdge, decoration: ShapeDecoration( 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 5260c51f28..cb54be0845 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 @@ -99,6 +99,7 @@ class StreamMessageWidget extends StatefulWidget { this.imageAttachmentThumbnailResizeType = 'clip', this.imageAttachmentThumbnailCropType = 'center', this.attachmentActionsModalBuilder, + this.showFailedIndicator = true, }); /// {@template onMentionTap} @@ -380,6 +381,11 @@ class StreamMessageWidget extends StatefulWidget { final String /*center|top|bottom|left|right*/ imageAttachmentThumbnailCropType; + /// {@template showFailedIndicator} + /// Show the failed message indicator + /// {@endtemplate} + final bool showFailedIndicator; + /// {@template copyWith} /// Creates a copy of [StreamMessageWidget] with specified attributes /// overridden. @@ -445,6 +451,7 @@ class StreamMessageWidget extends StatefulWidget { String? imageAttachmentThumbnailResizeType, String? imageAttachmentThumbnailCropType, AttachmentActionsBuilder? attachmentActionsModalBuilder, + bool? showFailedIndicator }) { return StreamMessageWidget( key: key ?? this.key, @@ -514,6 +521,7 @@ class StreamMessageWidget extends StatefulWidget { this.imageAttachmentThumbnailCropType, attachmentActionsModalBuilder: attachmentActionsModalBuilder ?? this.attachmentActionsModalBuilder, + showFailedIndicator: showFailedIndicator ?? this.showFailedIndicator, ); } @@ -641,6 +649,8 @@ class _StreamMessageWidgetState extends State bool get shouldShowDeleteAction => widget.showDeleteMessage || isDeleteFailed; + bool get showFailedIndicator => widget.showFailedIndicator; + @override bool get wantKeepAlive => widget.message.attachments.isNotEmpty; @@ -764,6 +774,7 @@ class _StreamMessageWidgetState extends State widget.bottomRowBuilderWithDefaultWidget, onUserAvatarTap: widget.onUserAvatarTap, userAvatarBuilder: widget.userAvatarBuilder, + showFailedIndicator: showFailedIndicator, ); }), ), diff --git a/packages/stream_chat_flutter/lib/src/message_widget/message_widget_content.dart b/packages/stream_chat_flutter/lib/src/message_widget/message_widget_content.dart index a31a6f602b..7b8b1c37a4 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget/message_widget_content.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget/message_widget_content.dart @@ -65,6 +65,7 @@ class MessageWidgetContent extends StatelessWidget { required this.showEditedLabel, required this.messageWidget, required this.onThreadTap, + required this.showFailedIndicator, this.onUserAvatarTap, this.borderRadiusGeometry, this.borderSide, @@ -228,6 +229,9 @@ class MessageWidgetContent extends StatelessWidget { /// {@macro userAvatarBuilder} final Widget Function(BuildContext, User)? userAvatarBuilder; + /// {@macro showFailedIndicator} + final bool showFailedIndicator; + @override Widget build(BuildContext context) { return Column( @@ -330,6 +334,8 @@ class MessageWidgetContent extends StatelessWidget { : MessageCard( message: message, isFailedState: isFailedState, + showFailedIndicator: + showFailedIndicator, showUserAvatar: showUserAvatar, messageTheme: messageTheme, hasQuotedMessage: hasQuotedMessage, @@ -421,7 +427,7 @@ class MessageWidgetContent extends StatelessWidget { ], ), ), - if (isFailedState) + if (isFailedState && showFailedIndicator) Positioned( right: reverse ? 0 : null, left: reverse ? null : 0,