diff --git a/packages/stream_chat_flutter/lib/src/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input.dart index 08fc2a7b..a08c799b 100644 --- a/packages/stream_chat_flutter/lib/src/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input.dart @@ -204,6 +204,7 @@ class MessageInput extends StatefulWidget { this.commandButtonBuilder, this.customOverlays = const [], this.mentionAllAppUsers = false, + this.shouldKeepFocusAfterMessage, }) : assert( initialMessage == null || editMessage == null, "Can't provide both `initialMessage` and `editMessage`", @@ -322,6 +323,8 @@ class MessageInput extends StatefulWidget { /// Defaults to false. final bool mentionAllAppUsers; + final bool? shouldKeepFocusAfterMessage; + @override MessageInputState createState() => MessageInputState(); @@ -1759,7 +1762,9 @@ class MessageInputState extends State { return; } - final shouldUnfocus = _commandEnabled; + var shouldKeepFocus = widget.shouldKeepFocusAfterMessage; + + shouldKeepFocus ??= !_commandEnabled; if (_commandEnabled) { text = '${'/${_chosenCommand!.name} '}$text'; @@ -1822,8 +1827,10 @@ class MessageInputState extends State { sendingFuture = channel.updateMessage(message); } - if (!shouldUnfocus) { + if (shouldKeepFocus) { FocusScope.of(context).requestFocus(_focusNode); + } else { + FocusScope.of(context).unfocus(); } final resp = await sendingFuture; 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 5424a1c2..a91c44db 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -444,7 +444,7 @@ class _MessageListViewState extends State { message: statusString, child: LazyLoadScrollView( onPageScrollStart: () { - FocusScope.of(context).unfocus(); + //FocusScope.of(context).unfocus(); }, onStartOfPage: () async { _inBetweenList = false;