diff --git a/.gitignore b/.gitignore index 33be37ee..3172a9c8 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,7 @@ doc/api/ .idea/ .flutter-plugins /.flutter-plugins-dependencies -chat_ui.iml \ No newline at end of file +chat_ui.iml + +# for those developers who use fvm not to upload the whole sdk +.fvm/ \ No newline at end of file diff --git a/lib/src/models/replied_message_configuration.dart b/lib/src/models/replied_message_configuration.dart index 63fb10ef..3d213004 100644 --- a/lib/src/models/replied_message_configuration.dart +++ b/lib/src/models/replied_message_configuration.dart @@ -75,6 +75,10 @@ class RepliedMessageConfiguration { /// Color for microphone icon. final Color? micIconColor; + /// Customize what happens when user tap a reply message. + /// The default behaviour is to scroll to the message if [repliedMsgAutoScrollConfig] is enabled + final ReplyMessageCallBack? onReplyTapped; + const RepliedMessageConfiguration({ this.verticalBarColor, this.backgroundColor, @@ -92,5 +96,6 @@ class RepliedMessageConfiguration { this.opacity, this.repliedMsgAutoScrollConfig = const RepliedMsgAutoScrollConfig(), this.micIconColor, + this.onReplyTapped, }); } diff --git a/lib/src/widgets/chat_bubble_widget.dart b/lib/src/widgets/chat_bubble_widget.dart index 64084a5f..6cf2c7ce 100644 --- a/lib/src/widgets/chat_bubble_widget.dart +++ b/lib/src/widgets/chat_bubble_widget.dart @@ -309,15 +309,12 @@ class _ChatBubbleWidgetState extends State { ), ), if (replyMessage.isNotEmpty) - widget.repliedMessageConfig?.repliedMessageWidgetBuilder != null - ? widget.repliedMessageConfig! - .repliedMessageWidgetBuilder!(widget.message.replyMessage) - : ReplyMessageWidget( - message: widget.message, - repliedMessageConfig: widget.repliedMessageConfig, - onTap: () => widget.onReplyTap - ?.call(widget.message.replyMessage.messageId), - ), + ReplyMessageWidget( + message: widget.message, + repliedMessageConfig: widget.repliedMessageConfig, + onTap: () => + widget.onReplyTap?.call(widget.message.replyMessage.messageId), + ), MessageView( outgoingChatBubbleConfig: widget.chatBubbleConfig?.outgoingChatBubbleConfig, diff --git a/lib/src/widgets/reply_message_widget.dart b/lib/src/widgets/reply_message_widget.dart index 5a50610b..f7e51305 100644 --- a/lib/src/widgets/reply_message_widget.dart +++ b/lib/src/widgets/reply_message_widget.dart @@ -50,6 +50,19 @@ class ReplyMessageWidget extends StatelessWidget { @override Widget build(BuildContext context) { + if (repliedMessageConfig?.repliedMessageWidgetBuilder != null) { + return GestureDetector( + onTap: () { + if (repliedMessageConfig!.onReplyTapped != null) { + repliedMessageConfig!.onReplyTapped!.call(message.replyMessage); + } + onTap?.call(); + }, + child: repliedMessageConfig! + .repliedMessageWidgetBuilder!(message.replyMessage), + ); + } + final currentUser = ChatViewInheritedWidget.of(context)?.currentUser; final replyBySender = message.replyMessage.replyBy == currentUser?.id; final textTheme = Theme.of(context).textTheme; @@ -59,7 +72,12 @@ class ReplyMessageWidget extends StatelessWidget { chatController?.getUserFromId(message.replyMessage.replyBy); final replyBy = replyBySender ? PackageStrings.you : messagedUser?.name; return GestureDetector( - onTap: onTap, + onTap: () { + if (repliedMessageConfig!.onReplyTapped != null) { + repliedMessageConfig!.onReplyTapped!.call(message.replyMessage); + } + onTap?.call(); + }, child: Container( margin: repliedMessageConfig?.margin ?? const EdgeInsets.only(