From cb09f0d09e9462b9e9030134341f2e3aa6d2fb8d Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Thu, 30 Apr 2020 11:10:33 +0200 Subject: [PATCH] add editMessageInputBuilder to customize the messageinput while editing messages --- lib/src/message_input.dart | 18 ++++++++--------- lib/src/message_list_view.dart | 8 ++++++++ lib/src/message_widget.dart | 36 ++++++++++++++++++++-------------- 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/lib/src/message_input.dart b/lib/src/message_input.dart index d5d37c32..e4de6915 100644 --- a/lib/src/message_input.dart +++ b/lib/src/message_input.dart @@ -92,7 +92,7 @@ class MessageInput extends StatefulWidget { this.textEditingController, this.actions, this.actionsLocation = ActionsLocation.left, - this.attachmentThumbnailBuilder, + this.attachmentThumbnailBuilders, }) : super(key: key); /// Message to edit @@ -135,8 +135,8 @@ class MessageInput extends StatefulWidget { /// The location of the custom actions final ActionsLocation actionsLocation; - /// Map that defines a builder for an attachment type - final Map attachmentThumbnailBuilder; + /// Map that defines a thumbnail builder for an attachment type + final Map attachmentThumbnailBuilders; @override MessageInputState createState() => MessageInputState(); @@ -547,13 +547,10 @@ class MessageInputState extends State { } Widget _buildAttachment(_SendingAttachment attachment) { - print('attachment.attachment.toJson(): ${attachment.attachment.toJson()}'); - print( - 'widget.attachmentThumbnailBuilder: ${widget.attachmentThumbnailBuilder}'); - if (widget.attachmentThumbnailBuilder + if (widget.attachmentThumbnailBuilders ?.containsKey(attachment.attachment.type) == true) { - return widget.attachmentThumbnailBuilder[attachment.attachment.type]( + return widget.attachmentThumbnailBuilders[attachment.attachment.type]( context, attachment, ); @@ -897,6 +894,10 @@ class MessageInputState extends State { return sendingFuture.whenComplete(() { if (widget.onMessageSent != null) { widget.onMessageSent(message); + } else { + if (widget.editMessage != null) { + Navigator.pop(context); + } } }); } @@ -958,7 +959,6 @@ class MessageInputState extends State { _messageIsPresent = true; message.attachments?.forEach((attachment) { - print('attachment: ${attachment.toJson()}'); _attachments.add(_SendingAttachment( attachment: attachment, uploaded: true, diff --git a/lib/src/message_list_view.dart b/lib/src/message_list_view.dart index 077c5289..fe407971 100644 --- a/lib/src/message_list_view.dart +++ b/lib/src/message_list_view.dart @@ -73,6 +73,7 @@ class MessageListView extends StatefulWidget { this.attachmentBuilders, this.dateDividerBuilder, this.showAvatar = true, + this.editMessageInputBuilder, }) : super(key: key); /// Function used to build a custom message widget @@ -115,6 +116,9 @@ class MessageListView extends StatefulWidget { /// if true shows the user avatar final bool showAvatar; + /// Builder used to build the message input to edit a message + final Widget Function(BuildContext, Message) editMessageInputBuilder; + @override _MessageListViewState createState() => _MessageListViewState(); } @@ -177,6 +181,7 @@ class _MessageListViewState extends State { onMessageActions: widget.onMessageActions, attachmentBuilders: widget.attachmentBuilders, showAvatar: widget.showAvatar, + editMessageInputBuilder: widget.editMessageInputBuilder, ), Padding( padding: const EdgeInsets.symmetric(horizontal: 32), @@ -243,6 +248,7 @@ class _MessageListViewState extends State { onMessageActions: widget.onMessageActions, attachmentBuilders: widget.attachmentBuilders, showAvatar: widget.showAvatar, + editMessageInputBuilder: widget.editMessageInputBuilder, ); } } @@ -337,6 +343,7 @@ class _MessageListViewState extends State { onMessageActions: widget.onMessageActions, attachmentBuilders: widget.attachmentBuilders, showAvatar: widget.showAvatar, + editMessageInputBuilder: widget.editMessageInputBuilder, ); } @@ -379,6 +386,7 @@ class _MessageListViewState extends State { onMessageActions: widget.onMessageActions, attachmentBuilders: widget.attachmentBuilders, showAvatar: widget.showAvatar, + editMessageInputBuilder: widget.editMessageInputBuilder, ); } diff --git a/lib/src/message_widget.dart b/lib/src/message_widget.dart index aefb5524..237a14fc 100644 --- a/lib/src/message_widget.dart +++ b/lib/src/message_widget.dart @@ -51,6 +51,7 @@ class MessageWidget extends StatefulWidget { this.showVideoFullScreen = true, this.attachmentBuilders, this.showAvatar = true, + this.editMessageInputBuilder, }) : super(key: key); /// Function called on mention tap @@ -89,6 +90,9 @@ class MessageWidget extends StatefulWidget { /// if true shows the user avatar final bool showAvatar; + /// Builder used to build the message input to edit a message + final Widget Function(BuildContext, Message) editMessageInputBuilder; + @override _MessageWidgetState createState() => _MessageWidgetState(); } @@ -723,21 +727,23 @@ class _MessageWidgetState extends State padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom, ), - child: MessageInput( - editMessage: widget.message, - parentMessage: widget.isParent - ? StreamChannel.of(context) - .channel - .state - .messages - .firstWhere((message) => - message.id == widget.message.parentId) - : null, - onMessageSent: (_) { - FocusScope.of(context).unfocus(); - Navigator.pop(context); - }, - ), + child: widget.editMessageInputBuilder != null + ? widget.editMessageInputBuilder(context, widget.message) + : MessageInput( + editMessage: widget.message, + parentMessage: widget.isParent + ? StreamChannel.of(context) + .channel + .state + .messages + .firstWhere((message) => + message.id == widget.message.parentId) + : null, + onMessageSent: (_) { + FocusScope.of(context).unfocus(); + Navigator.pop(context); + }, + ), ), ], ),