diff --git a/client/lib/ui/app/app_layout.dart b/client/lib/ui/app/app_layout.dart index 568e7cb7..0a228749 100644 --- a/client/lib/ui/app/app_layout.dart +++ b/client/lib/ui/app/app_layout.dart @@ -3,10 +3,9 @@ import 'package:flutter_state_notifier/flutter_state_notifier.dart'; import 'package:phylum/ui/app/app_actions.dart'; import 'package:phylum/ui/app/fab_action.dart'; import 'package:phylum/ui/app/nav_list.dart'; -import 'package:phylum/ui/app/router.dart'; +import 'package:phylum/ui/app/search_field.dart'; import 'package:phylum/ui/explorer/explorer_view.dart'; import 'package:phylum/ui/explorer/explorer_controller.dart'; -import 'package:phylum/ui/explorer/page.dart'; import 'package:phylum/ui/explorer/resource_drop_and_drop.dart'; import 'package:phylum/ui/explorer/resource_info_view.dart'; import 'package:phylum/ui/explorer/selection_mode.dart'; @@ -157,19 +156,7 @@ class ExpandedAppLayout extends StatelessWidget { child: Icon(Icons.search), ), Expanded( - child: TextField( - decoration: InputDecoration.collapsed( - hintText: 'Search Files...', - hintStyle: TextStyle(fontSize: 18), - ), - style: TextStyle(fontSize: 18), - onSubmitted: (text) { - final query = text.trim(); - if (query.isNotEmpty) { - context.read().go(ExplorerPageSearch(query: query)); - } - }, - ), + child: SearchField(), ), ], ), diff --git a/client/lib/ui/app/search_field.dart b/client/lib/ui/app/search_field.dart new file mode 100644 index 00000000..25c2a26c --- /dev/null +++ b/client/lib/ui/app/search_field.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; +import 'package:phylum/ui/app/router.dart'; +import 'package:phylum/ui/explorer/explorer_controller.dart'; +import 'package:phylum/ui/explorer/page.dart'; +import 'package:provider/provider.dart'; + +class SearchField extends StatefulWidget { + const SearchField({super.key}); + + @override + State createState() => _SearchFieldState(); +} + +class _SearchFieldState extends State { + final _controller = TextEditingController(); + + @override + void initState() { + super.initState(); + context.read().addListener((state) { + final page = state.page; + if (page is ExplorerPageSearch) { + _controller.text = page.query; + } else { + _controller.text = ''; + } + }); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return TextField( + decoration: InputDecoration.collapsed( + hintText: 'Search Files...', + hintStyle: TextStyle(fontSize: 18), + ), + controller: _controller, + style: TextStyle(fontSize: 18), + onSubmitted: (text) { + final query = text.trim(); + if (query.isNotEmpty) { + context.read().go(ExplorerPageSearch(query: query)); + } + }, + ); + } +}