diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart index 5d64a50b3ea512da8ee92c336f90dbc3ddd2c382..cc43913ffeca68d27044609b98e196fe6d368149 100644 --- a/app/lib/pages/default_page.dart +++ b/app/lib/pages/default_page.dart @@ -7,6 +7,7 @@ import '../consts.dart'; import 'loading_page.dart'; import '../widgets/main_layout.dart'; import '../data_classes.dart'; +import '../utils/custom_search_delegate.dart'; import '../server_requests/fetch_markers.dart'; import '../server_requests/fetch_relation.dart'; @@ -113,7 +114,7 @@ class _DefaultPageState extends State<DefaultPage> { onPressed: () { showSearch( context: context, - delegate: _CustomSearchDelegate((String result) { + delegate: CustomSearchDelegate((String result) { setState(() { selectedLake = result; }); @@ -146,89 +147,4 @@ class _DefaultPageState extends State<DefaultPage> { ), ); } -} - -typedef SearchResultCallback = void Function(String result); - -class _CustomSearchDelegate extends SearchDelegate { - final SearchResultCallback onResultSelected; - - _CustomSearchDelegate(this.onResultSelected); - - List<String> searchItems = [ // NB temp values - "Mjøsa", - "Bogstadsvannet", - "Einavatnet", - "Femsjøen", - "Femunden", - "Fjellsjøen", - "Gjende", - "Gjersjøen" - ]; - - @override - List<Widget> buildActions(BuildContext context) { - return [ - IconButton( // Clear query - icon: const Icon(Icons.clear), - onPressed: () { - query = ''; - }, - ) - ]; - } - - @override - Widget buildLeading(BuildContext context) { - return IconButton( // Close search bar - icon: const Icon(Icons.arrow_back), - onPressed: () { - close(context, null); - }, - ); - } - - @override - Widget buildResults(BuildContext context) { - List<String> searchResults = []; - final options = FuzzyOptions(threshold: 0.4, findAllMatches: true); - final matcher = Fuzzy(searchItems, options: options); - final results = matcher.search(query); - searchResults = results.map((result) => result.item as String).toList(); - - return ListView.builder( - itemCount: searchResults.length, - itemBuilder: (context, index) { - var result = searchResults[index]; - return GestureDetector( - onTap: () { - onResultSelected(result); - close(context, result); - }, - child: ListTile( - title: Text(result), - ), - ); - }, - ); - } - - @override - Widget buildSuggestions(BuildContext context) { - List<String> searchResults = []; - final options = FuzzyOptions(threshold: 0.4, findAllMatches: true); - final matcher = Fuzzy(searchItems, options: options); - final results = matcher.search(query); - searchResults = results.map((result) => result.item as String).toList(); - - return ListView.builder( - itemCount: searchResults.length, - itemBuilder: (context, index) { - var result = searchResults[index]; - return ListTile( - title: Text(result), - ); - }, - ); - } } \ No newline at end of file diff --git a/app/lib/utils/custom_search_delegate.dart b/app/lib/utils/custom_search_delegate.dart new file mode 100644 index 0000000000000000000000000000000000000000..19366184f55fbb035f932a5758b290654e92925c --- /dev/null +++ b/app/lib/utils/custom_search_delegate.dart @@ -0,0 +1,87 @@ +import 'package:fuzzy/fuzzy.dart'; +import 'package:flutter/material.dart'; + +typedef SearchResultCallback = void Function(String result); + +class CustomSearchDelegate extends SearchDelegate { + final SearchResultCallback onResultSelected; + + CustomSearchDelegate(this.onResultSelected); + + List<String> searchItems = [ // NB temp values + "Mjøsa", + "Bogstadsvannet", + "Einavatnet", + "Femsjøen", + "Femunden", + "Fjellsjøen", + "Gjende", + "Gjersjøen" + ]; + + @override + List<Widget> buildActions(BuildContext context) { + return [ + IconButton( // Clear query + icon: const Icon(Icons.clear), + onPressed: () { + query = ''; + }, + ) + ]; + } + + @override + Widget buildLeading(BuildContext context) { + return IconButton( // Close search bar + icon: const Icon(Icons.arrow_back), + onPressed: () { + close(context, null); + }, + ); + } + + @override + Widget buildResults(BuildContext context) { + List<String> searchResults = []; + final options = FuzzyOptions(threshold: 0.4, findAllMatches: true); + final matcher = Fuzzy(searchItems, options: options); + final results = matcher.search(query); + searchResults = results.map((result) => result.item as String).toList(); + + return ListView.builder( + itemCount: searchResults.length, + itemBuilder: (context, index) { + var result = searchResults[index]; + return GestureDetector( + onTap: () { + onResultSelected(result); + close(context, result); + }, + child: ListTile( + title: Text(result), + ), + ); + }, + ); + } + + @override + Widget buildSuggestions(BuildContext context) { + List<String> searchResults = []; + final options = FuzzyOptions(threshold: 0.4, findAllMatches: true); + final matcher = Fuzzy(searchItems, options: options); + final results = matcher.search(query); + searchResults = results.map((result) => result.item as String).toList(); + + return ListView.builder( + itemCount: searchResults.length, + itemBuilder: (context, index) { + var result = searchResults[index]; + return ListTile( + title: Text(result), + ); + }, + ); + } +} \ No newline at end of file