From 8a9ecbc024d59791a00ef241aef4007591be0ab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Adasiewicz?= Date: Tue, 14 Feb 2023 13:51:14 +0100 Subject: [PATCH] feat(ui): expose attachment actions modal builder --- packages/stream_chat_flutter/CHANGELOG.md | 1 + .../lib/src/attachment/giphy_attachment.dart | 5 +++++ .../lib/src/attachment/image_attachment.dart | 6 ++++++ .../lib/src/attachment/image_group.dart | 6 ++++++ .../lib/src/attachment/video_attachment.dart | 6 ++++++ .../lib/src/message_widget/message_widget.dart | 12 ++++++++++++ 6 files changed, 36 insertions(+) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 532bc755..77b65b84 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -3,6 +3,7 @@ ✅ Added - Now it is possible to customize the max lines of the title of a url attachment. Before it was always 1 line. +- Added `attachmentActionsModalBuilder` parameter to `StreamMessageWidget` that allows to customize `AttachmentActionsModal`. 🔄 Changed 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 563beb8d..be756aca 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart @@ -17,6 +17,7 @@ class StreamGiphyAttachment extends StreamAttachmentWidget { this.onShowMessage, this.onReplyMessage, this.onAttachmentTap, + this.attachmentActionsModalBuilder, }); /// {@macro showMessageCallback} @@ -28,6 +29,9 @@ class StreamGiphyAttachment extends StreamAttachmentWidget { /// {@macro onAttachmentTap} final OnAttachmentTap? onAttachmentTap; + /// {@macro attachmentActionsBuilder} + final AttachmentActionsBuilder? attachmentActionsModalBuilder; + @override Widget build(BuildContext context) { final imageUrl = @@ -260,6 +264,7 @@ class StreamGiphyAttachment extends StreamAttachmentWidget { userName: message.user!.name, onShowMessage: onShowMessage, onReplyMessage: onReplyMessage, + attachmentActionsModalBuilder: attachmentActionsModalBuilder, ), ); }, diff --git a/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart index 6a6ee780..36a0df3a 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/image_attachment.dart @@ -22,6 +22,7 @@ class StreamImageAttachment extends StreamAttachmentWidget { this.imageThumbnailSize = const Size(400, 400), this.imageThumbnailResizeType = 'clip', this.imageThumbnailCropType = 'center', + this.attachmentActionsModalBuilder, }); /// The [StreamMessageThemeData] to use for the image title @@ -52,6 +53,9 @@ class StreamImageAttachment extends StreamAttachmentWidget { /// Defaults to [center] final String /*center|top|bottom|left|right*/ imageThumbnailCropType; + /// {@macro attachmentActionsBuilder} + final AttachmentActionsBuilder? attachmentActionsModalBuilder; + @override Widget build(BuildContext context) { return source.when( @@ -161,6 +165,8 @@ class StreamImageAttachment extends StreamAttachmentWidget { userName: message.user!.name, onShowMessage: onShowMessage, onReplyMessage: onReplyMessage, + attachmentActionsModalBuilder: + attachmentActionsModalBuilder, ), ); }, diff --git a/packages/stream_chat_flutter/lib/src/attachment/image_group.dart b/packages/stream_chat_flutter/lib/src/attachment/image_group.dart index 6b7859fd..5756b24a 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/image_group.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/image_group.dart @@ -18,6 +18,7 @@ class StreamImageGroup extends StatelessWidget { this.imageThumbnailSize = const Size(400, 400), this.imageThumbnailResizeType = 'clip', this.imageThumbnailCropType = 'center', + this.attachmentActionsModalBuilder, }); /// List of attachments to show @@ -54,6 +55,9 @@ class StreamImageGroup extends StatelessWidget { /// Defaults to [center] final String /*center|top|bottom|left|right*/ imageThumbnailCropType; + /// {@macro attachmentActionsBuilder} + final AttachmentActionsBuilder? attachmentActionsModalBuilder; + @override Widget build(BuildContext context) { return ConstrainedBox( @@ -154,6 +158,7 @@ class StreamImageGroup extends StatelessWidget { userName: message.user!.name, onShowMessage: onShowMessage, onReplyMessage: onReplyMessage, + attachmentActionsModalBuilder: attachmentActionsModalBuilder, ), ), ), @@ -170,6 +175,7 @@ class StreamImageGroup extends StatelessWidget { imageThumbnailSize: imageThumbnailSize, imageThumbnailResizeType: imageThumbnailResizeType, imageThumbnailCropType: imageThumbnailCropType, + attachmentActionsModalBuilder: attachmentActionsModalBuilder, ); } } 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 b3aed834..10efca0b 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/video_attachment.dart @@ -17,6 +17,7 @@ class StreamVideoAttachment extends StreamAttachmentWidget { this.onShowMessage, this.onReplyMessage, this.onAttachmentTap, + this.attachmentActionsModalBuilder, }); /// The [StreamMessageThemeData] to use for the title @@ -31,6 +32,9 @@ class StreamVideoAttachment extends StreamAttachmentWidget { /// {@macro onAttachmentTap} final OnAttachmentTap? onAttachmentTap; + /// {@macro attachmentActionsBuilder} + final AttachmentActionsBuilder? attachmentActionsModalBuilder; + @override Widget build(BuildContext context) { return source.when( @@ -86,6 +90,8 @@ class StreamVideoAttachment extends StreamAttachmentWidget { userName: message.user!.name, onShowMessage: onShowMessage, onReplyMessage: onReplyMessage, + attachmentActionsModalBuilder: + attachmentActionsModalBuilder, ), ), ), 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 0975320f..7d51eb8b 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 @@ -107,6 +107,7 @@ class StreamMessageWidget extends StatefulWidget { this.imageAttachmentThumbnailSize = const Size(400, 400), this.imageAttachmentThumbnailResizeType = 'clip', this.imageAttachmentThumbnailCropType = 'center', + this.attachmentActionsModalBuilder, }) : assert( bottomRowBuilder == null || bottomRowBuilderWithDefaultWidget == null, 'You can only use one of the two bottom row builders', @@ -144,6 +145,8 @@ class StreamMessageWidget extends StatefulWidget { imageThumbnailResizeType: imageAttachmentThumbnailResizeType, imageThumbnailCropType: imageAttachmentThumbnailCropType, + attachmentActionsModalBuilder: + attachmentActionsModalBuilder, ), ), attachmentShape: border, @@ -171,6 +174,7 @@ class StreamMessageWidget extends StatefulWidget { imageThumbnailSize: imageAttachmentThumbnailSize, imageThumbnailResizeType: imageAttachmentThumbnailResizeType, imageThumbnailCropType: imageAttachmentThumbnailCropType, + attachmentActionsModalBuilder: attachmentActionsModalBuilder, ), attachmentShape: border, ); @@ -204,6 +208,8 @@ class StreamMessageWidget extends StatefulWidget { onAttachmentTap(message, attachment); } : null, + attachmentActionsModalBuilder: + attachmentActionsModalBuilder, ); }).toList(), ), @@ -533,6 +539,9 @@ class StreamMessageWidget extends StatefulWidget { /// {@macro onMessageWidgetAttachmentTap} final OnMessageWidgetAttachmentTap? onAttachmentTap; + /// {@macro attachmentActionsBuilder} + final AttachmentActionsBuilder? attachmentActionsModalBuilder; + /// Size of the image attachment thumbnail. final Size imageAttachmentThumbnailSize; @@ -617,6 +626,7 @@ class StreamMessageWidget extends StatefulWidget { Size? imageAttachmentThumbnailSize, String? imageAttachmentThumbnailResizeType, String? imageAttachmentThumbnailCropType, + AttachmentActionsBuilder? attachmentActionsModalBuilder, }) { assert( bottomRowBuilder == null || bottomRowBuilderWithDefaultWidget == null, @@ -703,6 +713,8 @@ class StreamMessageWidget extends StatefulWidget { this.imageAttachmentThumbnailResizeType, imageAttachmentThumbnailCropType: imageAttachmentThumbnailCropType ?? this.imageAttachmentThumbnailCropType, + attachmentActionsModalBuilder: + attachmentActionsModalBuilder ?? this.attachmentActionsModalBuilder, ); }