From e1149537b1c0437d2fbeebb5b181e3f168a31e74 Mon Sep 17 00:00:00 2001 From: Akshat-104 Date: Fri, 5 Jun 2026 10:08:01 +0530 Subject: [PATCH] fix: dismiss search dropdown and keyboard on submission Co-authored-by: Tobse <1190109+TobseF@users.noreply.github.com> --- lib/pages/search/search.dart | 97 ++++++++++++++++-------------------- pubspec.lock | 12 ++--- 2 files changed, 49 insertions(+), 60 deletions(-) diff --git a/lib/pages/search/search.dart b/lib/pages/search/search.dart index cb4f4a0b..bc73a62d 100644 --- a/lib/pages/search/search.dart +++ b/lib/pages/search/search.dart @@ -59,6 +59,7 @@ class SearchPage extends HookConsumerWidget { void onSubmitted(String value) { ref.read(searchTermStateProvider.notifier).state = value; + focusNode.unfocus(); if (value.trim().isEmpty) { return; } @@ -127,61 +128,49 @@ class SearchPage extends HookConsumerWidget { ) .toList(); - return KeyboardListener( - focusNode: focusNode, - autofocus: true, - onKeyEvent: (value) { - final isEnter = value.logicalKey == - LogicalKeyboardKey.enter; - - if (isEnter) { - onSubmitted(controller.text); - focusNode.unfocus(); - } - }, - child: AutoComplete( - suggestions: suggestions.length <= 2 - ? [ - ...suggestions, - "Twenty One Pilots", - "Linkin Park", - "d4vd" - ] - : suggestions, - completer: (suggestion) => suggestion, - mode: AutoCompleteMode.replaceAll, - child: TextField( - autofocus: true, - controller: controller, - features: [ - const InputFeature.leading( - Icon(SpotubeIcons.search), - ), - InputFeature.trailing( - AnimatedCrossFade( - duration: - const Duration(milliseconds: 300), - crossFadeState: - controller.text.isNotEmpty - ? CrossFadeState.showFirst - : CrossFadeState.showSecond, - firstChild: IconButton.ghost( - size: ButtonSize.small, - icon: - const Icon(SpotubeIcons.close), - onPressed: () { - controller.clear(); - }, - ), - secondChild: const SizedBox.square( - dimension: 28), + return AutoComplete( + suggestions: suggestions.length <= 2 + ? [ + ...suggestions, + "Twenty One Pilots", + "Linkin Park", + "d4vd" + ] + : suggestions, + completer: (suggestion) => suggestion, + mode: AutoCompleteMode.replaceAll, + child: TextField( + autofocus: true, + controller: controller, + focusNode: focusNode, + features: [ + const InputFeature.leading( + Icon(SpotubeIcons.search), + ), + InputFeature.trailing( + AnimatedCrossFade( + duration: + const Duration(milliseconds: 300), + crossFadeState: + controller.text.isNotEmpty + ? CrossFadeState.showFirst + : CrossFadeState.showSecond, + firstChild: IconButton.ghost( + size: ButtonSize.small, + icon: + const Icon(SpotubeIcons.close), + onPressed: () { + controller.clear(); + }, ), - ) - ], - textInputAction: TextInputAction.search, - placeholder: Text(context.l10n.search), - onSubmitted: onSubmitted, - ), + secondChild: const SizedBox.square( + dimension: 28), + ), + ) + ], + textInputAction: TextInputAction.search, + placeholder: Text(context.l10n.search), + onSubmitted: onSubmitted, ), ); }), diff --git a/pubspec.lock b/pubspec.lock index e962383a..81372cdd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -2376,26 +2376,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb" + sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7" url: "https://pub.dev" source: hosted - version: "1.26.2" + version: "1.26.3" test_api: dependency: transitive description: name: test_api - sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "0.7.6" + version: "0.7.7" test_core: dependency: transitive description: name: test_core - sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a" + sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0" url: "https://pub.dev" source: hosted - version: "0.6.11" + version: "0.6.12" time: dependency: transitive description: