diff --git a/lib/pages/search_page.dart b/lib/pages/search_page.dart index 83e4a91..10eda73 100644 --- a/lib/pages/search_page.dart +++ b/lib/pages/search_page.dart @@ -17,6 +17,7 @@ class SearchPage extends StatelessWidget { children: [ SearchBarWidget( onEditingComplete: context.read().setSearchText, + onResetSearch: context.read().removeSearchText, ), Expanded(child: SearchResultsWidget()), ], diff --git a/lib/widgets/search_widgets/search_bar_widget.dart b/lib/widgets/search_widgets/search_bar_widget.dart index 8f04a63..9b02652 100644 --- a/lib/widgets/search_widgets/search_bar_widget.dart +++ b/lib/widgets/search_widgets/search_bar_widget.dart @@ -1,16 +1,34 @@ import 'package:flutter/material.dart'; 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; - - @override - Widget build(BuildContext context) { - return TextField(onChanged: (text) => onChanged(text, context)); - } + final Function() onResetSearch; void onChanged(String text, BuildContext context) { 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), + ), + ), + ); + } } diff --git a/lib/widgets/search_widgets/search_results_widget.dart b/lib/widgets/search_widgets/search_results_widget.dart index ab08232..23385d9 100644 --- a/lib/widgets/search_widgets/search_results_widget.dart +++ b/lib/widgets/search_widgets/search_results_widget.dart @@ -17,6 +17,12 @@ class SearchResultsWidget extends StatefulWidget { class _SearchResultsWidgetState extends State { final List allBookmarks = Storage.loadBookmarks(); + @override + void deactivate() { + context.read().removeSearchText(silent: true); + super.deactivate(); + } + Widget bookmarkListItemBuilder(BuildContext context, int index) { final bookmark = filteredBookmarks.elementAt(index); return ListTile( @@ -31,6 +37,12 @@ class _SearchResultsWidgetState extends State { ); } + Iterable get filteredBookmarks => allBookmarks.where( + (bookmark) => bookmark.name.toLowerCase().contains( + context.watch().searchText.toLowerCase(), + ), + ); + @override Widget build(BuildContext context) { if (filteredBookmarks.isNotEmpty) { @@ -41,10 +53,4 @@ class _SearchResultsWidgetState extends State { } return Center(child: Text('Start searching')); } - - Iterable get filteredBookmarks => allBookmarks.where( - (bookmark) => bookmark.name.toLowerCase().contains( - context.watch().searchText.toLowerCase(), - ), - ); }