diff --git a/lib/ui/viewer/search/search_widget.dart b/lib/ui/viewer/search/search_widget.dart index 9ee452310..1842b7964 100644 --- a/lib/ui/viewer/search/search_widget.dart +++ b/lib/ui/viewer/search/search_widget.dart @@ -7,6 +7,7 @@ import 'package:photos/services/collections_service.dart'; import 'package:photos/ui/viewer/search/search_results_suggestions.dart'; class SearchIconWidget extends StatefulWidget { + final String searchQuery = ''; const SearchIconWidget({Key key}) : super(key: key); @override @@ -14,6 +15,7 @@ class SearchIconWidget extends StatefulWidget { } class _SearchIconWidgetState extends State { + final ValueNotifier _searchQuery = ValueNotifier(''); bool showSearchWidget; @override void initState() { @@ -23,8 +25,11 @@ class _SearchIconWidgetState extends State { @override Widget build(BuildContext context) { + List matchedCollections; + List matchedFiles; + //when false - show the search icon, when true - show the textfield for search return showSearchWidget - ? Searchwidget(showSearchWidget) + ? searchWidget(matchedCollections, matchedFiles) : IconButton( onPressed: () { setState( @@ -36,86 +41,71 @@ class _SearchIconWidgetState extends State { icon: const Icon(Icons.search), ); } -} -// ignore: must_be_immutable -class Searchwidget extends StatefulWidget { - bool openSearch; - final String searchQuery = ''; - Searchwidget(this.openSearch, {Key key}) : super(key: key); - @override - State createState() => _SearchwidgetState(); -} - -class _SearchwidgetState extends State { - final ValueNotifier _searchQ = ValueNotifier(''); - @override - Widget build(BuildContext context) { - List matchedCollections; - List matchedFiles; - return widget.openSearch - ? Column( - children: [ - Row( - children: [ - const SizedBox(width: 12), - Flexible( - child: Container( - color: - Theme.of(context).colorScheme.defaultBackgroundColor, - child: TextFormField( - style: Theme.of(context).textTheme.subtitle1, - decoration: InputDecoration( - filled: true, - contentPadding: const EdgeInsets.symmetric( - horizontal: 16, - vertical: 14, - ), - border: UnderlineInputBorder( - borderSide: BorderSide.none, - borderRadius: BorderRadius.circular(8), - ), - prefixIcon: const Icon(Icons.search), - ), - onChanged: (value) async { - matchedCollections = await CollectionsService.instance - .getFilteredCollectionsWithThumbnail(value); - matchedFiles = await FilesDB.instance - .getFilesOnFileNameSearch(value); - _searchQ.value = value; - }, - autofocus: true, - ), + Widget searchWidget( + List matchedCollections, + List matchedFiles, + ) { + return Column( + children: [ + Row( + children: [ + const SizedBox(width: 12), + Flexible( + child: Container( + color: Theme.of(context).colorScheme.defaultBackgroundColor, + child: TextFormField( + style: Theme.of(context).textTheme.subtitle1, + decoration: InputDecoration( + filled: true, + contentPadding: const EdgeInsets.symmetric( + horizontal: 16, + vertical: 14, ), + border: UnderlineInputBorder( + borderSide: BorderSide.none, + borderRadius: BorderRadius.circular(8), + ), + prefixIcon: const Icon(Icons.search), ), - IconButton( - onPressed: () { - setState(() { - widget.openSearch = !widget.openSearch; - }); - }, - icon: const Icon(Icons.close), - ), - ], + onChanged: (value) async { + matchedCollections = await CollectionsService.instance + .getFilteredCollectionsWithThumbnail(value); + matchedFiles = + await FilesDB.instance.getFilesOnFileNameSearch(value); + _searchQuery.value = value; + }, + autofocus: true, + ), ), - const SizedBox(height: 20), - ValueListenableBuilder( - valueListenable: _searchQ, - builder: ( - BuildContext context, - String newQuery, - Widget child, - ) { - return newQuery != '' - ? SearchResultsSuggestions( - collectionsWithThumbnail: matchedCollections, - matchedFiles: matchedFiles, - ) - : const SizedBox.shrink(); - }, - ), - ], - ) - : const SearchIconWidget(); + ), + IconButton( + onPressed: () { + setState(() { + showSearchWidget = !showSearchWidget; + }); + }, + icon: const Icon(Icons.close), + ), + ], + ), + const SizedBox(height: 20), + ValueListenableBuilder( + valueListenable: _searchQuery, + builder: ( + BuildContext context, + String newQuery, + Widget child, + ) { + return newQuery != '' + ? SearchResultsSuggestions( + collectionsWithThumbnail: matchedCollections, + matchedFiles: matchedFiles, + ) + : const SizedBox.shrink(); + }, + ), + ], + ); } }