Compare commits
2 Commits
v0.1.17
...
c7c5b3682d
| Author | SHA1 | Date | |
|---|---|---|---|
| c7c5b3682d | |||
| 321a310add |
@@ -17,6 +17,7 @@ class SearchPage extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
SearchBarWidget(
|
SearchBarWidget(
|
||||||
onEditingComplete: context.read<SearchProvider>().setSearchText,
|
onEditingComplete: context.read<SearchProvider>().setSearchText,
|
||||||
|
onResetSearch: context.read<SearchProvider>().removeSearchText,
|
||||||
),
|
),
|
||||||
Expanded(child: SearchResultsWidget()),
|
Expanded(child: SearchResultsWidget()),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -8,5 +8,10 @@ class SearchProvider extends ChangeNotifier {
|
|||||||
if (!silent) notifyListeners();
|
if (!silent) notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void removeSearchText({bool silent = false}) {
|
||||||
|
_searchText = '';
|
||||||
|
if (!silent) notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
String get searchText => _searchText;
|
String get searchText => _searchText;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,34 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class SearchBarWidget extends StatelessWidget {
|
class SearchBarWidget extends StatelessWidget {
|
||||||
const SearchBarWidget({super.key, required this.onEditingComplete});
|
const SearchBarWidget({
|
||||||
|
super.key,
|
||||||
|
required this.onEditingComplete,
|
||||||
|
required this.onResetSearch,
|
||||||
|
});
|
||||||
|
|
||||||
final Function(String searchString) onEditingComplete;
|
final Function(String searchString) onEditingComplete;
|
||||||
|
final Function() onResetSearch;
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return TextField(onChanged: (text) => onChanged(text, context));
|
|
||||||
}
|
|
||||||
|
|
||||||
void onChanged(String text, BuildContext context) {
|
void onChanged(String text, BuildContext context) {
|
||||||
if (context.mounted) onEditingComplete(text);
|
if (context.mounted) onEditingComplete(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final searchTextController = TextEditingController();
|
||||||
|
return TextField(
|
||||||
|
controller: searchTextController,
|
||||||
|
onChanged: (text) => onChanged(text, context),
|
||||||
|
decoration: InputDecoration(
|
||||||
|
suffixIcon: IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
searchTextController.clear();
|
||||||
|
onResetSearch();
|
||||||
|
},
|
||||||
|
icon: Icon(Icons.delete_outline_outlined),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,12 @@ class SearchResultsWidget extends StatefulWidget {
|
|||||||
class _SearchResultsWidgetState extends State<SearchResultsWidget> {
|
class _SearchResultsWidgetState extends State<SearchResultsWidget> {
|
||||||
final List<Bookmark> allBookmarks = Storage.loadBookmarks();
|
final List<Bookmark> allBookmarks = Storage.loadBookmarks();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void deactivate() {
|
||||||
|
context.read<SearchProvider>().removeSearchText(silent: true);
|
||||||
|
super.deactivate();
|
||||||
|
}
|
||||||
|
|
||||||
Widget bookmarkListItemBuilder(BuildContext context, int index) {
|
Widget bookmarkListItemBuilder(BuildContext context, int index) {
|
||||||
final bookmark = filteredBookmarks.elementAt(index);
|
final bookmark = filteredBookmarks.elementAt(index);
|
||||||
return ListTile(
|
return ListTile(
|
||||||
@@ -31,6 +37,12 @@ class _SearchResultsWidgetState extends State<SearchResultsWidget> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Iterable<Bookmark> get filteredBookmarks => allBookmarks.where(
|
||||||
|
(bookmark) => bookmark.name.toLowerCase().contains(
|
||||||
|
context.watch<SearchProvider>().searchText.toLowerCase(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (filteredBookmarks.isNotEmpty) {
|
if (filteredBookmarks.isNotEmpty) {
|
||||||
@@ -41,10 +53,4 @@ class _SearchResultsWidgetState extends State<SearchResultsWidget> {
|
|||||||
}
|
}
|
||||||
return Center(child: Text('Start searching'));
|
return Center(child: Text('Start searching'));
|
||||||
}
|
}
|
||||||
|
|
||||||
Iterable<Bookmark> get filteredBookmarks => allBookmarks.where(
|
|
||||||
(bookmark) => bookmark.name.toLowerCase().contains(
|
|
||||||
context.watch<SearchProvider>().searchText.toLowerCase(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user