From c7c5b3682d5a5fa329f0d8ffe8c3949c54811b5e Mon Sep 17 00:00:00 2001 From: marco Date: Wed, 21 Jan 2026 12:27:52 +0100 Subject: [PATCH] added functionality to clear search text --- lib/pages/search_page.dart | 1 + .../search_widgets/search_bar_widget.dart | 30 +++++++++++++++---- .../search_widgets/search_results_widget.dart | 18 +++++++---- 3 files changed, 37 insertions(+), 12 deletions(-) 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(), - ), - ); }