From a2b3f34a0fd39bae4f49b462eb71c56b8c66ef6a Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Mon, 4 Jan 2021 12:52:53 +0530 Subject: [PATCH] [Message Input] Fix replyToMessage cleared bug Signed-off-by: Sahil Kumar --- example/lib/main.dart | 9 ++++++--- lib/src/message_input.dart | 29 +++++++++-------------------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 17f497a4..aff84600 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -434,7 +434,7 @@ class ChannelPage extends StatefulWidget { } class _ChannelPageState extends State { - Message _replyMessage; + Message _replyToMessage; FocusNode _focusNode; @override @@ -450,7 +450,7 @@ class _ChannelPageState extends State { } void _reply(Message message) { - setState(() => _replyMessage = message); + setState(() => _replyToMessage = message); _focusNode.requestFocus(); } @@ -502,7 +502,10 @@ class _ChannelPageState extends State { ), MessageInput( focusNode: _focusNode, - replyToMessage: _replyMessage, + replyToMessage: _replyToMessage, + onReplyToMessageCleared: () { + setState(() => _replyToMessage = null); + }, ), ], ), diff --git a/lib/src/message_input.dart b/lib/src/message_input.dart index d014e390..95a4e497 100644 --- a/lib/src/message_input.dart +++ b/lib/src/message_input.dart @@ -111,6 +111,7 @@ class MessageInput extends StatefulWidget { this.attachmentThumbnailBuilders, this.focusNode, this.replyToMessage, + this.onReplyToMessageCleared, }) : super(key: key); /// Message to edit @@ -162,6 +163,9 @@ class MessageInput extends StatefulWidget { /// final Message replyToMessage; + /// + final VoidCallback onReplyToMessageCleared; + @override MessageInputState createState() => MessageInputState(); @@ -203,9 +207,7 @@ class MessageInputState extends State { /// The editing controller passed to the input TextField TextEditingController textEditingController; - Message _replyToMessage; - - bool get _hasReplyToMessage => _replyToMessage != null; + bool get _hasReplyToMessage => widget.replyToMessage != null; @override Widget build(BuildContext context) { @@ -242,9 +244,7 @@ class MessageInputState extends State { IconButton( visualDensity: VisualDensity.compact, icon: StreamSvgIcon.close_small(), - onPressed: () { - setState(() => _replyToMessage = null); - }, + onPressed: widget.onReplyToMessageCleared, ), ], ), @@ -1353,7 +1353,7 @@ class MessageInputState extends State { if (!_hasReplyToMessage) { return Offstage(); } - final containsUrl = _replyToMessage.attachments + final containsUrl = widget.replyToMessage.attachments ?.any((element) => element.ogScrapeUrl != null) == true; return Transform( @@ -1362,7 +1362,7 @@ class MessageInputState extends State { child: ReplyToMessageWidget( reverse: true, showBorder: !containsUrl, - message: _replyToMessage, + message: widget.replyToMessage, messageTheme: StreamChatTheme.of(context).otherMessageTheme, ), ); @@ -2015,7 +2015,7 @@ class MessageInputState extends State { textEditingController.clear(); _attachments.clear(); - _replyToMessage = null; + widget.onReplyToMessageCleared(); setState(() { _messageIsPresent = false; @@ -2091,9 +2091,6 @@ class MessageInputState extends State { @override void initState() { super.initState(); - - _replyToMessage = widget.replyToMessage; - _focusNode = widget.focusNode ?? FocusNode(); _emojiNames = Emoji.all().map((e) => e.name); @@ -2155,14 +2152,6 @@ class MessageInputState extends State { } super.didChangeDependencies(); } - - @override - void didUpdateWidget(MessageInput oldWidget) { - super.didUpdateWidget(oldWidget); - if (widget.replyToMessage?.id != _replyToMessage?.id) { - _replyToMessage = widget.replyToMessage; - } - } } class _SendingAttachment {