From dcbdfc32eadd34673cec6383a5ed7975203c7b6b Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 11 Jan 2022 12:48:42 +0530 Subject: [PATCH 1/3] added mip didUpdateWidget for focusnode --- packages/stream_chat_flutter/CHANGELOG.md | 4 ++++ .../lib/src/message_input/message_input.dart | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 258e4cc5..db9fef23 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -12,6 +12,10 @@ - Videos can now be auto-played in `FullScreenMedia` +🔄 Changed + +- Add `didUpdateWidget` override in `MessageInput` widget to handle changes to `focusNode`. + ## 3.3.2 - Updated `stream_chat_flutter_core` dependency to [`3.3.1`](https://pub.dev/packages/stream_chat_flutter_core/changelog). diff --git a/packages/stream_chat_flutter/lib/src/message_input/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input/message_input.dart index e55fac19..c9443007 100644 --- a/packages/stream_chat_flutter/lib/src/message_input/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input/message_input.dart @@ -352,7 +352,7 @@ class MessageInput extends StatefulWidget { class MessageInputState extends State with RestorationMixin { final _imagePicker = ImagePicker(); - late final _focusNode = widget.focusNode ?? FocusNode(); + late var _focusNode = widget.focusNode ?? FocusNode(); bool _inputEnabled = true; bool get _commandEnabled => _effectiveController.value.command != null; bool _showCommandsOverlay = false; @@ -419,6 +419,13 @@ class MessageInputState extends State _controller!.dispose(); _controller = null; } + + // Update _focusNode + if (widget.focusNode != null && oldWidget.focusNode != widget.focusNode) { + _focusNode.removeListener(_focusNodeListener); + _focusNode = widget.focusNode!; + _focusNode.addListener(_focusNodeListener); + } } @override From 8bd826d08d58b98d2766d60d1cf384999e8c9e45 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 11 Jan 2022 12:50:02 +0530 Subject: [PATCH 2/3] change var to focusnode --- .../lib/src/message_input/message_input.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/message_input/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input/message_input.dart index c9443007..54170b4c 100644 --- a/packages/stream_chat_flutter/lib/src/message_input/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input/message_input.dart @@ -352,7 +352,7 @@ class MessageInput extends StatefulWidget { class MessageInputState extends State with RestorationMixin { final _imagePicker = ImagePicker(); - late var _focusNode = widget.focusNode ?? FocusNode(); + late FocusNode _focusNode = widget.focusNode ?? FocusNode(); bool _inputEnabled = true; bool get _commandEnabled => _effectiveController.value.command != null; bool _showCommandsOverlay = false; From e21d32941adcd4f36323757ae6905b4cc82ad434 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 11 Jan 2022 16:07:11 +0530 Subject: [PATCH 3/3] add listener to effective controller --- .../lib/src/message_input/message_input.dart | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_input/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input/message_input.dart index 54170b4c..adcb046a 100644 --- a/packages/stream_chat_flutter/lib/src/message_input/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input/message_input.dart @@ -398,11 +398,7 @@ class MessageInputState extends State if (widget.messageInputController == null) { _createLocalController(); } else { - _effectiveController.textEditingController - .removeListener(_onChangedDebounced); - _effectiveController.textEditingController - .addListener(_onChangedDebounced); - if (!_isEditing && _timeOut <= 0) _startSlowMode(); + _initialiseEffectiveController(); } _focusNode.addListener(_focusNodeListener); } @@ -418,6 +414,7 @@ class MessageInputState extends State unregisterFromRestoration(_controller!); _controller!.dispose(); _controller = null; + _initialiseEffectiveController(); } // Update _focusNode @@ -447,6 +444,13 @@ class MessageInputState extends State int _timeOut = 0; Timer? _slowModeTimer; + void _initialiseEffectiveController() { + _effectiveController.textEditingController + .removeListener(_onChangedDebounced); + _effectiveController.textEditingController.addListener(_onChangedDebounced); + if (!_isEditing && _timeOut <= 0) _startSlowMode(); + } + void _startSlowMode() { if (!mounted) { return;