diff --git a/lib/screens/home/search/search.dart b/lib/screens/home/search/search.dart index a6a63061..979227d9 100644 --- a/lib/screens/home/search/search.dart +++ b/lib/screens/home/search/search.dart @@ -1,5 +1,6 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:frosty/screens/home/search/search_results_categories.dart'; import 'package:frosty/screens/home/search/search_results_channels.dart'; import 'package:frosty/screens/home/search/stores/search_store.dart'; @@ -53,46 +54,49 @@ class _SearchState extends State { ), Expanded( child: GestureDetector( - onTap: () => FocusManager.instance.primaryFocus?.unfocus(), - child: textEditingController.text.isEmpty - ? Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (searchStore.searchHistory.isNotEmpty) - const Padding( - padding: EdgeInsets.all(15.0), - child: Text( - 'HISTORY', - style: TextStyle(fontWeight: FontWeight.bold), + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Observer( + builder: (context) { + if (textEditingController.text.isEmpty || searchStore.channelFuture == null || searchStore.categoryFuture == null) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (searchStore.searchHistory.isNotEmpty) + const Padding( + padding: EdgeInsets.all(15.0), + child: Text( + 'HISTORY', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + Expanded( + child: ListView( + children: searchStore.searchHistory + .mapIndexed( + (index, searchTerm) => ListTile( + leading: const Icon(Icons.history), + title: Text(searchTerm), + trailing: IconButton( + icon: const Icon(Icons.cancel), + onPressed: () => setState(() { + searchStore.searchHistory.removeAt(index); + }), + ), + onTap: () { + setState(() { + textEditingController.text = searchTerm; + searchStore.handleQuery(searchTerm); + }); + }, + ), + ) + .toList(), ), ), - Expanded( - child: ListView( - children: searchStore.searchHistory - .mapIndexed( - (index, searchTerm) => ListTile( - leading: const Icon(Icons.history), - title: Text(searchTerm), - trailing: IconButton( - icon: const Icon(Icons.cancel), - onPressed: () => setState(() { - searchStore.searchHistory.removeAt(index); - }), - ), - onTap: () { - setState(() { - textEditingController.text = searchTerm; - searchStore.handleQuery(searchTerm); - }); - }, - ), - ) - .toList(), - ), - ), - ], - ) - : CustomScrollView( + ], + ); + } + return CustomScrollView( slivers: [ const SliverToBoxAdapter( child: SectionHeader( @@ -112,8 +116,9 @@ class _SearchState extends State { ), SearchResultsCategories(searchStore: searchStore), ], - ), - ), + ); + }, + )), ), ], ); diff --git a/lib/screens/home/search/search_results_categories.dart b/lib/screens/home/search/search_results_categories.dart index 11608a26..5c5e59b4 100644 --- a/lib/screens/home/search/search_results_categories.dart +++ b/lib/screens/home/search/search_results_categories.dart @@ -17,11 +17,7 @@ class SearchResultsCategories extends StatelessWidget { builder: (context) { final future = searchStore.categoryFuture; - if (future == null) { - return const CircularProgressIndicator.adaptive(); - } - - switch (future.status) { + switch (future!.status) { case FutureStatus.pending: return const SliverToBoxAdapter(child: LoadingIndicator(subtitle: Text('Loading categories...'))); case FutureStatus.rejected: diff --git a/lib/screens/home/search/search_results_channels.dart b/lib/screens/home/search/search_results_channels.dart index d2eb13c3..87bc370d 100644 --- a/lib/screens/home/search/search_results_channels.dart +++ b/lib/screens/home/search/search_results_channels.dart @@ -45,11 +45,7 @@ class SearchResultsChannels extends StatelessWidget { builder: (context) { final future = searchStore.channelFuture; - if (future == null) { - return const CircularProgressIndicator.adaptive(); - } - - switch (future.status) { + switch (future!.status) { case FutureStatus.pending: return const SliverToBoxAdapter( child: LoadingIndicator(