diff --git a/lib/src/features/search/presentation/pages/search_page.dart b/lib/src/features/search/presentation/pages/search_page.dart index c897a53ba..ca902a7d0 100644 --- a/lib/src/features/search/presentation/pages/search_page.dart +++ b/lib/src/features/search/presentation/pages/search_page.dart @@ -92,9 +92,12 @@ class _SearchPageState extends State with AutomaticKeepAliveClientMi if (scrollController.position.pixels >= scrollController.position.maxScrollExtent * 0.8) { final bloc = context.read(); final favorites = context.read().state.favorites; + final query = controller.text; + + if (query.isEmpty && !bloc.state.viewingAll) return; if (bloc.state.status != SearchStatus.done) { - bloc.add(SearchContinued(query: controller.text, favoriteCommunities: favorites)); + bloc.add(SearchContinued(query: query, favoriteCommunities: favorites)); } } } @@ -102,6 +105,11 @@ class _SearchPageState extends State with AutomaticKeepAliveClientMi void onSearchFieldChanged(String value) { final bloc = context.read(); + if (value.isEmpty) { + bloc.add(const SearchReset()); + return; + } + // Auto-detect URL mode for post searches if (bloc.state.searchType == MetaSearchType.posts && Uri.tryParse(value)?.isAbsolute == true) { bloc.add(const SearchFiltersUpdated(searchByUrl: true)); diff --git a/lib/src/features/search/presentation/state/search_bloc.dart b/lib/src/features/search/presentation/state/search_bloc.dart index 77192e333..b89c218fd 100644 --- a/lib/src/features/search/presentation/state/search_bloc.dart +++ b/lib/src/features/search/presentation/state/search_bloc.dart @@ -99,7 +99,20 @@ class SearchBloc extends Bloc { } Future _onSearchReset(SearchReset event, Emitter emit) async { - emit(state.copyWith(status: SearchStatus.initial, trendingCommunities: [], viewingAll: false)); + emit(state.copyWith( + status: SearchStatus.initial, + communities: null, + trendingCommunities: const [], + users: null, + comments: null, + posts: null, + instances: null, + message: null, + errorReason: null, + page: 1, + hasReachedMax: false, + viewingAll: false, + )); await _onTrendingCommunitiesRequested(const TrendingCommunitiesRequested(), emit); } @@ -218,6 +231,8 @@ class SearchBloc extends Bloc { } Future _onSearchContinued(SearchContinued event, Emitter emit) async { + if (event.query.isEmpty && !state.viewingAll) return; + // Early exit if pagination is exhausted if (state.hasReachedMax) return; @@ -334,7 +349,7 @@ class SearchBloc extends Bloc { final message = getExceptionErrorMessage(e); return emit(state.copyWith( status: SearchStatus.trending, - trendingCommunities: [], + trendingCommunities: const [], message: message, errorReason: AppErrorReason.unexpected( message: message,