import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../backend/backend.dart'; import '../../../core/utils/result.dart'; import 'search_state.dart'; final searchControllerProvider = AsyncNotifierProvider(SearchController.new); class SearchController extends AsyncNotifier { @override Future build() async { final recent = await _recent(); return SearchState(recent: recent); } Future updateQuery(String query) async { final lastToken = query.trim().isEmpty ? '' : query.trim().split(RegExp(r'\s+')).last; final suggestionsResult = await ref .read(searchServiceProvider) .autocompleteDetailed(lastToken, limit: 16); final suggestions = suggestionsResult is Success> ? suggestionsResult.data : []; state = AsyncData( (state.value ?? const SearchState()).copyWith( query: query, suggestions: suggestions, ), ); } Future clearHistory() async { await ref.read(searchServiceProvider).clearHistory(); state = const AsyncData(SearchState()); } Future> _recent() async { final result = await ref.read(searchServiceProvider).recentSearches(); return result is Success> ? result.data : const []; } }