From c0951272ebbd906750ccc9e774a8f660da657814 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 26 Jul 2021 15:06:47 +0530 Subject: [PATCH 1/8] feat: Extracted visible_footnote.dart, corrected default filter --- .../lib/src/attachment/giphy_attachment.dart | 32 +++---------------- .../lib/src/message_widget.dart | 28 +++++++--------- .../lib/src/visible_footnote.dart | 29 +++++++++++++++++ .../lib/src/message_list_core.dart | 3 +- 4 files changed, 45 insertions(+), 47 deletions(-) create mode 100644 packages/stream_chat_flutter/lib/src/visible_footnote.dart diff --git a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart index f14abffc..fd29724d 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart @@ -2,6 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:shimmer/shimmer.dart'; import 'package:stream_chat_flutter/src/attachment/attachment_widget.dart'; +import 'package:stream_chat_flutter/src/visible_footnote.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; @@ -216,36 +217,11 @@ class GiphyAttachment extends AttachmentWidget { ), ), const SizedBox(height: 4), - Align( + const Align( alignment: Alignment.centerRight, child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - StreamSvgIcon.eye( - color: StreamChatTheme.of(context) - .colorTheme - .textHighEmphasis - .withOpacity(0.5), - size: 16, - ), - const SizedBox( - width: 8, - ), - Text( - 'Only visible to you', - style: StreamChatTheme.of(context) - .textTheme - .footnote - .copyWith( - color: StreamChatTheme.of(context) - .colorTheme - .textHighEmphasis - .withOpacity(0.5)), - ), - ], - ), + padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: VisibleFootnote(), ), ), ], diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index c9dfd9d4..47f1182b 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -15,6 +15,7 @@ import 'package:stream_chat_flutter/src/message_reactions_modal.dart'; import 'package:stream_chat_flutter/src/quoted_message_widget.dart'; import 'package:stream_chat_flutter/src/reaction_bubble.dart'; import 'package:stream_chat_flutter/src/url_attachment.dart'; +import 'package:stream_chat_flutter/src/visible_footnote.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Widget builder for building attachments @@ -92,6 +93,7 @@ class MessageWidget extends StatefulWidget { this.userAvatarBuilder, this.editMessageInputBuilder, this.textBuilder, + this.bottomRowBuilder, this.onReturnAction, Map? customAttachmentBuilders, this.readList, @@ -275,6 +277,9 @@ class MessageWidget extends StatefulWidget { /// Function called on long press final void Function(BuildContext, Message)? onMessageActions; + /// Widget builder for building a bottom row below the message + final Widget Function(BuildContext, Message)? bottomRowBuilder; + /// Widget builder for building user avatar final Widget Function(BuildContext, User)? userAvatarBuilder; @@ -782,7 +787,11 @@ class _MessageWidgetState extends State bottom: isPinned && widget.showPinHighlight ? 6.0 : 0.0, ), - child: _bottomRow, + child: widget.bottomRowBuilder?.call( + context, + widget.message, + ) ?? + _bottomRow, ), if (isFailedState) Positioned( @@ -830,22 +839,7 @@ class _MessageWidgetState extends State Widget get _bottomRow { if (isDeleted) { - final chatThemeData = _streamChatTheme; - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - StreamSvgIcon.eye( - color: chatThemeData.colorTheme.textLowEmphasis, - size: 16, - ), - const SizedBox(width: 8), - Text( - 'Only visible to you', - style: chatThemeData.textTheme.footnote - .copyWith(color: chatThemeData.colorTheme.textLowEmphasis), - ), - ], - ); + return const VisibleFootnote(); } final children = []; diff --git a/packages/stream_chat_flutter/lib/src/visible_footnote.dart b/packages/stream_chat_flutter/lib/src/visible_footnote.dart new file mode 100644 index 00000000..bbdb9144 --- /dev/null +++ b/packages/stream_chat_flutter/lib/src/visible_footnote.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; +import 'package:stream_chat_flutter/stream_chat_flutter.dart'; + +/// Widget for displaying a footnote +class VisibleFootnote extends StatelessWidget { + /// Constructor for creating a [VisibleFootnote] + const VisibleFootnote({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final chatThemeData = StreamChatTheme.of(context); + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + StreamSvgIcon.eye( + color: chatThemeData.colorTheme.textLowEmphasis, + size: 16, + ), + const SizedBox(width: 8), + Text( + 'Only visible to you', + style: chatThemeData.textTheme.footnote + .copyWith(color: chatThemeData.colorTheme.textLowEmphasis), + ), + ], + ); + } +} diff --git a/packages/stream_chat_flutter_core/lib/src/message_list_core.dart b/packages/stream_chat_flutter_core/lib/src/message_list_core.dart index 4acf0ba7..83ef4e24 100644 --- a/packages/stream_chat_flutter_core/lib/src/message_list_core.dart +++ b/packages/stream_chat_flutter_core/lib/src/message_list_core.dart @@ -134,8 +134,7 @@ class MessageListCoreState extends State { bool defaultFilter(Message m) { final isMyMessage = m.user?.id == _currentUser?.id; - final isDeletedOrShadowed = m.isDeleted == true || m.shadowed == true; - if (isDeletedOrShadowed && !isMyMessage) return false; + if (m.shadowed && !isMyMessage) return false; return true; } From 13782f8e1b58677c1ee906bf4790b8eb6d82430c Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 26 Jul 2021 15:49:04 +0530 Subject: [PATCH 2/8] feat: Added new builders and restructured --- .../example/lib/tutorial_part_4.dart | 7 +++++++ .../lib/src/message_widget.dart | 18 +++++++++++++++--- .../lib/stream_chat_flutter.dart | 1 + 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/stream_chat_flutter/example/lib/tutorial_part_4.dart b/packages/stream_chat_flutter/example/lib/tutorial_part_4.dart index 07942302..0a8e5b11 100644 --- a/packages/stream_chat_flutter/example/lib/tutorial_part_4.dart +++ b/packages/stream_chat_flutter/example/lib/tutorial_part_4.dart @@ -96,6 +96,13 @@ class ChannelPage extends StatelessWidget { threadBuilder: (_, parentMessage) => ThreadPage( parent: parentMessage, ), + messageBuilder: (context, message, list, defaultMessage) { + return defaultMessage.copyWith( + deletedBottomRowBuilder: (c, m) { + return VisibleFootnote(); + }, + ); + }, ), ), const MessageInput(), diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 47f1182b..f0a340d1 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -15,7 +15,6 @@ import 'package:stream_chat_flutter/src/message_reactions_modal.dart'; import 'package:stream_chat_flutter/src/quoted_message_widget.dart'; import 'package:stream_chat_flutter/src/reaction_bubble.dart'; import 'package:stream_chat_flutter/src/url_attachment.dart'; -import 'package:stream_chat_flutter/src/visible_footnote.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; /// Widget builder for building attachments @@ -94,6 +93,7 @@ class MessageWidget extends StatefulWidget { this.editMessageInputBuilder, this.textBuilder, this.bottomRowBuilder, + this.deletedBottomRowBuilder, this.onReturnAction, Map? customAttachmentBuilders, this.readList, @@ -277,9 +277,12 @@ class MessageWidget extends StatefulWidget { /// Function called on long press final void Function(BuildContext, Message)? onMessageActions; - /// Widget builder for building a bottom row below the message + /// Widget builder for building a bottom row below the message when deleted final Widget Function(BuildContext, Message)? bottomRowBuilder; + /// Widget builder for building a bottom row below the message when deleted + final Widget Function(BuildContext, Message)? deletedBottomRowBuilder; + /// Widget builder for building user avatar final Widget Function(BuildContext, User)? userAvatarBuilder; @@ -415,6 +418,8 @@ class MessageWidget extends StatefulWidget { Widget Function(BuildContext, Message)? editMessageInputBuilder, Widget Function(BuildContext, Message)? textBuilder, Widget Function(BuildContext, Message)? usernameBuilder, + Widget Function(BuildContext, Message)? bottomRowBuilder, + Widget Function(BuildContext, Message)? deletedBottomRowBuilder, void Function(BuildContext, Message)? onMessageActions, Message? message, MessageTheme? messageTheme, @@ -468,6 +473,9 @@ class MessageWidget extends StatefulWidget { editMessageInputBuilder ?? this.editMessageInputBuilder, textBuilder: textBuilder ?? this.textBuilder, usernameBuilder: usernameBuilder ?? this.usernameBuilder, + bottomRowBuilder: bottomRowBuilder ?? this.bottomRowBuilder, + deletedBottomRowBuilder: + deletedBottomRowBuilder ?? this.deletedBottomRowBuilder, onMessageActions: onMessageActions ?? this.onMessageActions, message: message ?? this.message, messageTheme: messageTheme ?? this.messageTheme, @@ -839,7 +847,11 @@ class _MessageWidgetState extends State Widget get _bottomRow { if (isDeleted) { - return const VisibleFootnote(); + return widget.deletedBottomRowBuilder?.call( + context, + widget.message, + ) ?? + const SizedBox.shrink(); } final children = []; diff --git a/packages/stream_chat_flutter/lib/stream_chat_flutter.dart b/packages/stream_chat_flutter/lib/stream_chat_flutter.dart index 12049fc6..082b66a7 100644 --- a/packages/stream_chat_flutter/lib/stream_chat_flutter.dart +++ b/packages/stream_chat_flutter/lib/stream_chat_flutter.dart @@ -31,6 +31,7 @@ export 'src/sending_indicator.dart'; export 'src/stream_chat.dart'; export 'src/stream_chat_theme.dart'; export 'src/stream_neumorphic_button.dart'; +export 'src/visible_footnote.dart'; export 'src/stream_svg_icon.dart'; export 'src/system_message.dart'; export 'src/thread_header.dart'; From 010d0f83824e8ecde565eb444c01b059514ead2b Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 26 Jul 2021 15:55:45 +0530 Subject: [PATCH 3/8] fix --- .../stream_chat_flutter/example/lib/tutorial_part_4.dart | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/stream_chat_flutter/example/lib/tutorial_part_4.dart b/packages/stream_chat_flutter/example/lib/tutorial_part_4.dart index 0a8e5b11..07942302 100644 --- a/packages/stream_chat_flutter/example/lib/tutorial_part_4.dart +++ b/packages/stream_chat_flutter/example/lib/tutorial_part_4.dart @@ -96,13 +96,6 @@ class ChannelPage extends StatelessWidget { threadBuilder: (_, parentMessage) => ThreadPage( parent: parentMessage, ), - messageBuilder: (context, message, list, defaultMessage) { - return defaultMessage.copyWith( - deletedBottomRowBuilder: (c, m) { - return VisibleFootnote(); - }, - ); - }, ), ), const MessageInput(), From e373d42c1b34d5b2e7598619fe0574ae2ac7e8b5 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 26 Jul 2021 16:52:06 +0530 Subject: [PATCH 4/8] fix: analysis --- packages/stream_chat_flutter/lib/stream_chat_flutter.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/stream_chat_flutter.dart b/packages/stream_chat_flutter/lib/stream_chat_flutter.dart index 082b66a7..8c3a6f8e 100644 --- a/packages/stream_chat_flutter/lib/stream_chat_flutter.dart +++ b/packages/stream_chat_flutter/lib/stream_chat_flutter.dart @@ -31,7 +31,6 @@ export 'src/sending_indicator.dart'; export 'src/stream_chat.dart'; export 'src/stream_chat_theme.dart'; export 'src/stream_neumorphic_button.dart'; -export 'src/visible_footnote.dart'; export 'src/stream_svg_icon.dart'; export 'src/system_message.dart'; export 'src/thread_header.dart'; @@ -43,3 +42,4 @@ export 'src/user_item.dart'; export 'src/user_list_view.dart'; export 'src/user_list_view.dart'; export 'src/utils.dart'; +export 'src/visible_footnote.dart'; From f326480ed3eb0842a431ba6be765ee19c62041c2 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 26 Jul 2021 18:30:31 +0530 Subject: [PATCH 5/8] added changelog entries --- packages/stream_chat_flutter/CHANGELOG.md | 1 + packages/stream_chat_flutter_core/CHANGELOG.md | 3 +++ 2 files changed, 4 insertions(+) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 16e65fa7..9761d0b1 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -4,6 +4,7 @@ - Added `MessageListView.paginationLimit` - Allow the various ListView widgets to be themed via ThemeData classes +- Added `bottomRowBuilder` and `deletedBottomRowBuilder` that build a widget below a `MessageWidget` 🐞 Fixed diff --git a/packages/stream_chat_flutter_core/CHANGELOG.md b/packages/stream_chat_flutter_core/CHANGELOG.md index a823a0db..d42b7eff 100644 --- a/packages/stream_chat_flutter_core/CHANGELOG.md +++ b/packages/stream_chat_flutter_core/CHANGELOG.md @@ -3,6 +3,9 @@ ✅ Added - Added `MessageListCore.paginationLimit` +🛑️ Changed +- Changed default message filter of `MessageListCore` + ## 2.0.0 🛑️ Breaking Changes from `1.5.3` From 63ed35a5de77bfd1d9514f62fd43a1748a6888f9 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 26 Jul 2021 18:33:41 +0530 Subject: [PATCH 6/8] added changelog entries --- packages/stream_chat_flutter_core/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter_core/CHANGELOG.md b/packages/stream_chat_flutter_core/CHANGELOG.md index d42b7eff..2c6b1b65 100644 --- a/packages/stream_chat_flutter_core/CHANGELOG.md +++ b/packages/stream_chat_flutter_core/CHANGELOG.md @@ -3,7 +3,7 @@ ✅ Added - Added `MessageListCore.paginationLimit` -🛑️ Changed +🔄 Changed - Changed default message filter of `MessageListCore` ## 2.0.0 From 6cd80a738230faadc4c2de4b1d1ba7badf13fd7f Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 27 Jul 2021 15:03:19 +0530 Subject: [PATCH 7/8] Update packages/stream_chat_flutter/lib/src/message_widget.dart Co-authored-by: Salvatore Giordano --- packages/stream_chat_flutter/lib/src/message_widget.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 075f4d2b..ca10d3d4 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -277,10 +277,10 @@ class MessageWidget extends StatefulWidget { /// Function called on long press final void Function(BuildContext, Message)? onMessageActions; - /// Widget builder for building a bottom row below the message when deleted + /// Widget builder for building a bottom row below the message final Widget Function(BuildContext, Message)? bottomRowBuilder; - /// Widget builder for building a bottom row below the message when deleted + /// Widget builder for building a bottom row below a deleted message final Widget Function(BuildContext, Message)? deletedBottomRowBuilder; /// Widget builder for building user avatar From cef76aa27e4c332c1b6beed3c15d7e038bb19cc5 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 27 Jul 2021 15:04:10 +0530 Subject: [PATCH 8/8] Update packages/stream_chat_flutter/lib/src/message_widget.dart Co-authored-by: Salvatore Giordano --- packages/stream_chat_flutter/lib/src/message_widget.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index ca10d3d4..970ae9da 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -851,7 +851,7 @@ class _MessageWidgetState extends State context, widget.message, ) ?? - const SizedBox.shrink(); + const Offstage(); } final children = [];