From 11ca2cd666eef0b70a1fcfe8ba759cea8193e2e3 Mon Sep 17 00:00:00 2001 From: olorin99 Date: Wed, 7 Jan 2026 20:20:25 +1000 Subject: [PATCH 1/2] Add button to clear search. --- lib/src/screens/explore/explore_screen.dart | 26 ++++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/src/screens/explore/explore_screen.dart b/lib/src/screens/explore/explore_screen.dart index 12ae6cbc..4ddf6816 100644 --- a/lib/src/screens/explore/explore_screen.dart +++ b/lib/src/screens/explore/explore_screen.dart @@ -44,7 +44,7 @@ class ExploreScreen extends StatefulWidget { class _ExploreScreenState extends State with AutomaticKeepAliveClientMixin { late FocusNode _focusNode; - String search = ''; + final TextEditingController _searchController = TextEditingController(); final searchDebounce = Debouncer(duration: const Duration(milliseconds: 500)); Set? _selected; @@ -63,7 +63,7 @@ class _ExploreScreenState extends State final searchType = widget.id != null ? ExploreType.all : type; - if (searchType == ExploreType.all && search.isEmpty) { + if (searchType == ExploreType.all && _searchController.text.isEmpty) { return ([], null); } @@ -73,7 +73,7 @@ class _ExploreScreenState extends State page: nullIfEmpty(pageKey), filter: filter, sort: sort, - search: nullIfEmpty(search), + search: nullIfEmpty(_searchController.text), ); return (newPage.items, newPage.nextPage); @@ -82,14 +82,14 @@ class _ExploreScreenState extends State // Lemmy cannot search with an empty query if ((context.read().serverSoftware != ServerSoftware.mbin) && - search.isEmpty) { + _searchController.text.isEmpty) { return ([], null); } final newPage = await ac.api.users.list( page: nullIfEmpty(pageKey), filter: filter, - search: search, + search: _searchController.text, ); return (newPage.items, newPage.nextPage); @@ -98,7 +98,7 @@ class _ExploreScreenState extends State final newPage = await ac.api.domains.list( page: nullIfEmpty(pageKey), filter: filter, - search: nullIfEmpty(search), + search: nullIfEmpty(_searchController.text), ); return (newPage.items, newPage.nextPage); @@ -114,7 +114,7 @@ class _ExploreScreenState extends State case ExploreType.all: final newPage = await ac.api.search.get( page: nullIfEmpty(pageKey), - search: search, + search: _searchController.text, userId: type == ExploreType.people ? widget.id : null, communityId: type == ExploreType.communities ? widget.id : null, ); @@ -188,10 +188,9 @@ class _ExploreScreenState extends State mainAxisSize: MainAxisSize.min, children: [ TextFormField( - initialValue: search, + controller: _searchController, onChanged: (newSearch) { searchDebounce.run(() { - search = newSearch; _pagingController.refresh(); }); }, @@ -203,6 +202,15 @@ class _ExploreScreenState extends State type != ExploreType.topics), decoration: InputDecoration( prefixIcon: const Icon(Symbols.search_rounded), + suffixIcon: IconButton( + onPressed: () { + _searchController.clear(); + searchDebounce.run(() { + _pagingController.refresh(); + }); + }, + icon: const Icon(Symbols.clear_rounded), + ), border: const OutlineInputBorder( borderSide: BorderSide.none, borderRadius: BorderRadius.all(Radius.circular(24)), From 4dc3f6a054799c492ffbbf440e68095a0ab1e1af Mon Sep 17 00:00:00 2001 From: olorin99 Date: Wed, 7 Jan 2026 23:12:27 +1000 Subject: [PATCH 2/2] Hide clear button when search is empty. --- lib/src/screens/explore/explore_screen.dart | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/src/screens/explore/explore_screen.dart b/lib/src/screens/explore/explore_screen.dart index 4ddf6816..55430c97 100644 --- a/lib/src/screens/explore/explore_screen.dart +++ b/lib/src/screens/explore/explore_screen.dart @@ -190,6 +190,7 @@ class _ExploreScreenState extends State TextFormField( controller: _searchController, onChanged: (newSearch) { + setState(() {}); searchDebounce.run(() { _pagingController.refresh(); }); @@ -202,15 +203,17 @@ class _ExploreScreenState extends State type != ExploreType.topics), decoration: InputDecoration( prefixIcon: const Icon(Symbols.search_rounded), - suffixIcon: IconButton( + suffixIcon: _searchController.text.isNotEmpty ? IconButton( onPressed: () { - _searchController.clear(); + setState(() { + _searchController.clear(); + }); searchDebounce.run(() { _pagingController.refresh(); }); }, icon: const Icon(Symbols.clear_rounded), - ), + ) : null, border: const OutlineInputBorder( borderSide: BorderSide.none, borderRadius: BorderRadius.all(Radius.circular(24)),