diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 16db1398..9f8078c4 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -37,6 +37,7 @@ 🐞 Fixed - Fixed `MessageSearchListView` pagination. +- Fixed `MessageWidget` attachment tap callbacks. ## 2.2.1 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 7eb2606e..e165fc6d 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart @@ -98,7 +98,13 @@ class GiphyAttachment extends AttachmentWidget { Padding( padding: const EdgeInsets.all(2), child: GestureDetector( - onTap: () => onAttachmentTap ?? _onImageTap(context), + onTap: () { + if (onAttachmentTap != null) { + onAttachmentTap?.call(); + } else { + _onImageTap(context); + } + }, child: CachedNetworkImage( height: size?.height, width: size?.width, @@ -253,21 +259,12 @@ class GiphyAttachment extends AttachmentWidget { Widget _buildSentAttachment(BuildContext context, String imageUrl) => SizedBox( child: GestureDetector( - onTap: () async { - final res = - await Navigator.push(context, MaterialPageRoute(builder: (_) { - final channel = StreamChannel.of(context).channel; - return StreamChannel( - channel: channel, - child: FullScreenMedia( - mediaAttachments: [attachment], - userName: message.user?.name, - message: message, - onShowMessage: onShowMessage, - ), - ); - })); - if (res != null) onReturnAction!(res); + onTap: () { + if (onAttachmentTap != null) { + onAttachmentTap?.call(); + } else { + _onImageTap(context); + } }, child: Stack( children: [ diff --git a/packages/stream_chat_flutter/lib/src/image_group.dart b/packages/stream_chat_flutter/lib/src/image_group.dart index 627406d0..88b309fe 100644 --- a/packages/stream_chat_flutter/lib/src/image_group.dart +++ b/packages/stream_chat_flutter/lib/src/image_group.dart @@ -15,6 +15,7 @@ class ImageGroup extends StatelessWidget { required this.size, this.onReturnAction, this.onShowMessage, + this.onAttachmentTap, }) : super(key: key); /// List of attachments to show @@ -23,6 +24,9 @@ class ImageGroup extends StatelessWidget { /// Callback when attachment is returned to from other screens final ValueChanged? onReturnAction; + /// Callback when attachment is tapped + final void Function(Message message, Attachment attachment)? onAttachmentTap; + /// Message which images are attached to final Message message; @@ -117,6 +121,10 @@ class ImageGroup extends StatelessWidget { BuildContext context, int index, ) async { + if (onAttachmentTap != null) { + return onAttachmentTap!(message, images[index]); + } + final channel = StreamChannel.of(context).channel; final res = await Navigator.push( diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 7619f21b..4025337c 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -96,7 +96,7 @@ class MessageWidget extends StatefulWidget { this.bottomRowBuilder, this.deletedBottomRowBuilder, this.onReturnAction, - Map? customAttachmentBuilders, + this.customAttachmentBuilders, this.readList, this.padding, this.textPadding = const EdgeInsets.symmetric( @@ -133,6 +133,7 @@ class MessageWidget extends StatefulWidget { messageTheme: messageTheme, onShowMessage: onShowMessage, onReturnAction: onReturnAction, + onAttachmentTap: onAttachmentTap, ), ), border, @@ -214,6 +215,11 @@ class MessageWidget extends StatefulWidget { ), onShowMessage: onShowMessage, onReturnAction: onReturnAction, + onAttachmentTap: onAttachmentTap != null + ? () { + onAttachmentTap(message, attachment); + } + : null, ); }).toList(), ), @@ -243,6 +249,11 @@ class MessageWidget extends StatefulWidget { mediaQueryData.size.width * 0.8, mediaQueryData.size.height * 0.3, ), + onAttachmentTap: onAttachmentTap != null + ? () { + onAttachmentTap(message, attachment); + } + : null, ), border, reverse, @@ -395,6 +406,9 @@ class MessageWidget extends StatefulWidget { /// Builder for respective attachment types final Map attachmentBuilders; + /// Builder for respective attachment types (user facing builder) + final Map? customAttachmentBuilders; + /// Center user avatar with bottom of the message final bool translateUserAvatar; @@ -519,7 +533,7 @@ class MessageWidget extends StatefulWidget { showPinButton: showPinButton ?? this.showPinButton, showPinHighlight: showPinHighlight ?? this.showPinHighlight, customAttachmentBuilders: - customAttachmentBuilders ?? attachmentBuilders, + customAttachmentBuilders ?? this.customAttachmentBuilders, translateUserAvatar: translateUserAvatar ?? this.translateUserAvatar, onQuotedMessageTap: onQuotedMessageTap ?? this.onQuotedMessageTap, onMessageTap: onMessageTap ?? this.onMessageTap,