diff --git a/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart index b7a45456..d2ffc335 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart @@ -11,6 +11,7 @@ class VideoAttachment extends AttachmentWidget { final MessageTheme messageTheme; final ShowMessageCallback onShowMessage; final ValueChanged onReturnAction; + final VoidCallback onAttachmentTap; const VideoAttachment({ Key key, @@ -20,6 +21,7 @@ class VideoAttachment extends AttachmentWidget { this.messageTheme, this.onShowMessage, this.onReturnAction, + this.onAttachmentTap, }) : super(key: key, message: message, attachment: attachment, size: size); @override @@ -65,25 +67,26 @@ class VideoAttachment extends AttachmentWidget { children: [ Expanded( child: GestureDetector( - onTap: () async { - final channel = StreamChannel.of(context).channel; - final res = await Navigator.push( - context, - MaterialPageRoute( - builder: (_) => StreamChannel( - channel: channel, - child: FullScreenMedia( - mediaAttachments: [attachment], - userName: message.user.name, - sentAt: message.createdAt, - message: message, - onShowMessage: onShowMessage, + onTap: onAttachmentTap ?? + () async { + final channel = StreamChannel.of(context).channel; + final res = await Navigator.push( + context, + MaterialPageRoute( + builder: (_) => StreamChannel( + channel: channel, + child: FullScreenMedia( + mediaAttachments: [attachment], + userName: message.user.name, + sentAt: message.createdAt, + message: message, + onShowMessage: onShowMessage, + ), + ), ), - ), - ), - ); - if (res != null) onReturnAction(res); - }, + ); + if (res != null) onReturnAction(res); + }, child: Stack( children: [ videoWidget, diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index d0b287b1..81a38b9b 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -139,6 +139,7 @@ class MessageListView extends StatefulWidget { this.customAttachmentBuilders, this.onMessageTap, this.onSystemMessageTap, + this.onAttachmentTap, }) : super(key: key); /// Function used to build a custom message widget @@ -228,6 +229,9 @@ class MessageListView extends StatefulWidget { /// Called when system message is tapped final void Function(Message) onSystemMessageTap; + // Customize onTap on attachment + final void Function(Message message, Attachment attachment) onAttachmentTap; + @override _MessageListViewState createState() => _MessageListViewState(); } @@ -1008,6 +1012,7 @@ class _MessageListViewState extends State { } FocusScope.of(context).unfocus(); }, + onAttachmentTap: widget.onAttachmentTap, ); if (!message.isDeleted && diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 1bc9d2c9..3b40643c 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -146,6 +146,9 @@ class MessageWidget extends StatefulWidget { /// Function called when message is tapped final void Function(Message) onMessageTap; + // Customize onTap on attachment + final void Function(Message message, Attachment attachment) onAttachmentTap; + /// MessageWidget({ Key key, @@ -195,6 +198,7 @@ class MessageWidget extends StatefulWidget { this.attachmentPadding = EdgeInsets.zero, this.allRead = false, this.onQuotedMessageTap, + this.onAttachmentTap, }) : attachmentBuilders = { 'image': (context, message, attachment) { return ImageAttachment( @@ -207,6 +211,9 @@ class MessageWidget extends StatefulWidget { ), onShowMessage: onShowMessage, onReturnAction: onReturnAction, + onAttachmentTap: () { + onAttachmentTap(message, attachment); + }, ); }, 'video': (context, message, attachment) { @@ -220,30 +227,31 @@ class MessageWidget extends StatefulWidget { message: message, onShowMessage: onShowMessage, onReturnAction: onReturnAction, + onAttachmentTap: () { + onAttachmentTap(message, attachment); + }, ); }, 'giphy': (context, message, attachment) { return GiphyAttachment( - attachment: attachment, - messageTheme: messageTheme, - message: message, - size: Size( - MediaQuery.of(context).size.width * 0.8, - MediaQuery.of(context).size.height * 0.3, - ), - onShowMessage: onShowMessage, - onReturnAction: onReturnAction, - ); + attachment: attachment, + messageTheme: messageTheme, + message: message, + size: Size( + MediaQuery.of(context).size.width * 0.8, + MediaQuery.of(context).size.height * 0.3, + ), + onShowMessage: onShowMessage, + onReturnAction: onReturnAction); }, 'file': (context, message, attachment) { return FileAttachment( - message: message, - attachment: attachment, - size: Size( - MediaQuery.of(context).size.width * 0.8, - MediaQuery.of(context).size.height * 0.3, - ), - ); + message: message, + attachment: attachment, + size: Size( + MediaQuery.of(context).size.width * 0.8, + MediaQuery.of(context).size.height * 0.3, + )); }, }..addAll(customAttachmentBuilders ?? {}), super(key: key);