From 0c438b5823f4b58562d26280e3ec30fa89e89456 Mon Sep 17 00:00:00 2001 From: DASHU <385321165@qq.com> Date: Tue, 8 Jul 2025 23:03:11 +0800 Subject: [PATCH] fix weburl input can submit at pc --- .../web_url_input/web_url_input_router.dart | 105 ++++++++++-------- 1 file changed, 60 insertions(+), 45 deletions(-) diff --git a/lib/router/web_url_input/web_url_input_router.dart b/lib/router/web_url_input/web_url_input_router.dart index 1c60e87..84d9da6 100644 --- a/lib/router/web_url_input/web_url_input_router.dart +++ b/lib/router/web_url_input/web_url_input_router.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:nostr_sdk/utils/platform_util.dart'; import 'package:nostr_sdk/utils/string_util.dart'; import 'package:nowser/component/qrscanner.dart'; import 'package:nowser/data/bookmark.dart'; @@ -22,12 +24,11 @@ class _WebUrlInputRouter extends State { String? url; - // late FocusNode focusNode; + FocusNode focusNode = FocusNode(); @override void initState() { super.initState(); - // focusNode = FocusNode(); // Future.delayed(const Duration(milliseconds: 350), () { // focusNode.requestFocus(); // }); @@ -61,52 +62,66 @@ class _WebUrlInputRouter extends State { item: bookmark, )); } + Widget inputField = SearchField( + suggestions: suggestions, + controller: textEditingController, + suggestionDirection: SuggestionDirection.up, + searchInputDecoration: SearchInputDecoration( + border: OutlineInputBorder(), + ), + onSubmit: (value) { + checkAndBack(value); + }, + autofocus: true, + // focusNode: focusNode, + onSuggestionTap: (suggestion) { + var item = suggestion.item; + if (item != null) { + checkAndBack(item.url); + } + }, + onSearchTextChanged: (input) { + print("onSearchTextChanged"); + List matchList = []; + if (StringUtil.isBlank(input)) { + return matchList; + } + + for (var suggestion in suggestions) { + var item = suggestion.item; + if (item != null && StringUtil.isNotBlank(item.url)) { + if (item.url!.contains(input)) { + matchList.add(suggestion); + continue; + } + + if (item.title != null && item.title!.contains(input)) { + matchList.add(suggestion); + continue; + } + } + } + + return matchList; + }, + ); + + if (PlatformUtil.isPC()) { + inputField = KeyboardListener( + focusNode: focusNode, + child: inputField, + onKeyEvent: (value) { + if (value.logicalKey == LogicalKeyboardKey.enter) { + checkAndBack(textEditingController.text); + } + }, + ); + } + var inputWidget = Hero( tag: "urlInput", child: Material( - child: SearchField( - suggestions: suggestions, - controller: textEditingController, - suggestionDirection: SuggestionDirection.up, - searchInputDecoration: SearchInputDecoration( - border: OutlineInputBorder(), - ), - onSubmit: (value) { - checkAndBack(value); - }, - autofocus: true, - // focusNode: focusNode, - onSuggestionTap: (suggestion) { - var item = suggestion.item; - if (item != null) { - checkAndBack(item.url); - } - }, - onSearchTextChanged: (input) { - print("onSearchTextChanged"); - List matchList = []; - if (StringUtil.isBlank(input)) { - return matchList; - } - - for (var suggestion in suggestions) { - var item = suggestion.item; - if (item != null && StringUtil.isNotBlank(item.url)) { - if (item.url!.contains(input)) { - matchList.add(suggestion); - continue; - } - - if (item.title != null && item.title!.contains(input)) { - matchList.add(suggestion); - continue; - } - } - } - - return matchList; - }, - ), + child: inputField, ), );