web input add suggestion

This commit is contained in:
DASHU
2025-01-22 14:23:00 +08:00
parent 3b2b46d2ec
commit 7b401d2491
3 changed files with 61 additions and 4 deletions

View File

@@ -1,8 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:nostr_sdk/utils/string_util.dart'; import 'package:nostr_sdk/utils/string_util.dart';
import 'package:nowser/component/qrscanner.dart'; import 'package:nowser/component/qrscanner.dart';
import 'package:nowser/data/bookmark.dart';
import 'package:nowser/main.dart'; import 'package:nowser/main.dart';
import 'package:nowser/provider/bookmark_provider.dart';
import 'package:nowser/util/router_util.dart'; import 'package:nowser/util/router_util.dart';
import 'package:provider/provider.dart';
import 'package:searchfield/searchfield.dart';
import '../../const/base.dart'; import '../../const/base.dart';
@@ -45,18 +49,62 @@ class _WebUrlInputRouter extends State<WebUrlInputRouter> {
} }
} }
var bookmarkProvider = Provider.of<BookmarkProvider>(context);
var bookmarks = bookmarkProvider.bookmarks;
List<Widget> list = []; List<Widget> list = [];
List<SearchFieldListItem<Bookmark>> suggestions = [];
for (var bookmark in bookmarks) {
suggestions.add(SearchFieldListItem(
bookmark.url!,
item: bookmark,
));
}
var inputWidget = Hero( var inputWidget = Hero(
tag: "urlInput", tag: "urlInput",
child: Material( child: Material(
child: TextField( child: SearchField(
suggestions: suggestions,
controller: textEditingController, controller: textEditingController,
decoration: const InputDecoration(border: OutlineInputBorder()), suggestionDirection: SuggestionDirection.up,
focusNode: focusNode, searchInputDecoration: SearchInputDecoration(
onSubmitted: (value) { border: OutlineInputBorder(),
),
onSubmit: (value) {
checkAndBack(value); checkAndBack(value);
}, },
focusNode: focusNode,
onSuggestionTap: (suggestion) {
var item = suggestion.item;
if (item != null) {
checkAndBack(item.url);
}
},
onSearchTextChanged: (input) {
print("onSearchTextChanged");
List<SearchFieldListItem> 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;
},
), ),
), ),
); );

View File

@@ -859,6 +859,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.2.0"
searchfield:
dependency: "direct main"
description:
name: searchfield
sha256: "8d23d53967ac5b0774611150b286dacd70c9c5de74d3db433bda2104b4803755"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
shared_preferences: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@@ -55,6 +55,7 @@ dependencies:
quick_actions: ^1.0.8 quick_actions: ^1.0.8
flutter_pinned_shortcut_plus: ^0.0.2 flutter_pinned_shortcut_plus: ^0.0.2
flutter_cache_manager: ^3.4.1 flutter_cache_manager: ^3.4.1
searchfield: 1.2.0
dev_dependencies: dev_dependencies:
flutter_launcher_icons: ^0.13.1 flutter_launcher_icons: ^0.13.1