Guides
/
Building Search UI
/
Ecommerce ui template
/
Components
/
Data sources
/
Suggestion repository
Oct. 21, 2022
SuggestionRepository
On this page
The Flutter Helpers are available as alpha software. They depend on the Algolia Dart API client, which is developed by the community. Note that the Algolia SLA don’t apply to community projects. To share feedback or report a bug, open an issue.
Code summary
SuggestionRepository
provides convenient methods to get query suggestions.
There are two types of query suggestions:
- Search completions updated on each keystroke.
- Search history retaining the submitted queries.
The SuggestionRepository
component encapsulates Flutter Helpers and local (in-memory) query history storage.
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class SuggestionRepository {
/// Hits Searcher for suggestions index
final _suggestionsSearcher = HitsSearcher(
applicationID: Credentials.applicationID,
apiKey: Credentials.searchOnlyKey,
indexName: Credentials.suggestionsIndex,
);
/// Get query suggestions for a given query string.
void query(String query) {
_suggestionsSearcher.query(query);
}
/// Get query suggestions stream
late final Stream<List<QuerySuggestion>> suggestions = _suggestionsSearcher
.responses
.map((response) => response.hits.map(QuerySuggestion.fromJson).toList());
/// In-memory store of submitted queries.
final BehaviorSubject<List<String>> _history =
BehaviorSubject.seeded(['jackets']);
/// Stream of previously submitted queries.
Stream<List<String>> get history => _history;
/// Add a query to queries history store.
void addToHistory(String query) {
if (query.isEmpty) return;
final _current = _history.value;
_current.removeWhere((element) => element == query);
_current.add(query);
_history.sink.add(_current);
}
/// Remove a query from queries history store.
void removeFromHistory(String query) {
final _current = _history.value;
_current.removeWhere((element) => element == query);
_history.sink.add(_current);
}
/// Clear everything from queries history store.
void clearHistory() {
_history.sink.add([]);
}
/// Dispose of underlying resources.
void dispose() {
_suggestionsSearcher.dispose();
}
}
Did you find this page helpful?