From 170bdd28c9e0bbfdfdf6951bf55104a9d9e0757e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Poizat?= Date: Wed, 11 Feb 2026 17:24:18 +0100 Subject: [PATCH] Autofocus Scribe input bar Help user use the Scribe input bar. Also solves issues where Scribe bar is not well positioned when focused is removed from "To" field. --- .../widgets/search/ai_scribe_bar.dart | 48 +++++++++++-------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/scribe/lib/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart b/scribe/lib/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart index 57f99ec04..adf087406 100644 --- a/scribe/lib/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart +++ b/scribe/lib/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart @@ -25,12 +25,20 @@ class AIScribeBar extends StatefulWidget { class _AIScribeBarState extends State { final TextEditingController _controller = TextEditingController(); final ValueNotifier _isButtonEnabled = ValueNotifier(false); - final FocusNode _focusNode = FocusNode(); + final FocusNode _textFieldFocusNode = FocusNode(); + final FocusNode _keyboardListenerFocusNode = FocusNode(); @override void initState() { super.initState(); _controller.addListener(_onTextChanged); + WidgetsBinding.instance.addPostFrameCallback((_) { + Future.delayed(const Duration(milliseconds: 100), () { + if (mounted) { + _textFieldFocusNode.requestFocus(); + } + }); + }); } @override @@ -38,7 +46,8 @@ class _AIScribeBarState extends State { _controller.removeListener(_onTextChanged); _controller.dispose(); _isButtonEnabled.dispose(); - _focusNode.dispose(); + _textFieldFocusNode.dispose(); + _keyboardListenerFocusNode.dispose(); super.dispose(); } @@ -73,26 +82,23 @@ class _AIScribeBarState extends State { child: Row( children: [ Expanded( - child: GestureDetector( - behavior: HitTestBehavior.translucent, - onTap: _focusNode.requestFocus, - child: KeyboardListener( - focusNode: _focusNode, - onKeyEvent: _handleKeyboardEvent, - child: TextField( - controller: _controller, - decoration: InputDecoration( - hintText: ScribeLocalizations.of(context).customPromptAction, - hintStyle: AIScribeTextStyles.searchBarHint, - border: InputBorder.none, - contentPadding: const EdgeInsets.symmetric(vertical: 8), - isDense: true, - ), - style: AIScribeTextStyles.searchBar, - maxLines: null, - keyboardType: TextInputType.multiline, - cursorHeight: 16, + child: KeyboardListener( + focusNode: _keyboardListenerFocusNode, + onKeyEvent: _handleKeyboardEvent, + child: TextField( + controller: _controller, + focusNode: _textFieldFocusNode, + decoration: InputDecoration( + hintText: ScribeLocalizations.of(context).customPromptAction, + hintStyle: AIScribeTextStyles.searchBarHint, + border: InputBorder.none, + contentPadding: const EdgeInsets.symmetric(vertical: 8), + isDense: true, ), + style: AIScribeTextStyles.searchBar, + maxLines: null, + keyboardType: TextInputType.multiline, + cursorHeight: 16, ), ), ),