@@ -192,10 +192,6 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
192
192
193
193
final PerAccountStore store;
194
194
195
- Iterable <CandidateT > getSortedItemsToTest ();
196
-
197
- ResultT ? testItem (QueryT query, CandidateT item);
198
-
199
195
QueryT ? get query => _query;
200
196
QueryT ? _query;
201
197
set query (QueryT ? query) {
@@ -218,7 +214,7 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
218
214
List <ResultT > _results = [];
219
215
220
216
Future <void > _startSearch () async {
221
- final newResults = await _computeResults ();
217
+ final newResults = await computeResults ();
222
218
if (newResults == null ) {
223
219
// Query was old; new search is in progress. Or, no listeners to notify.
224
220
return ;
@@ -228,6 +224,15 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
228
224
notifyListeners ();
229
225
}
230
226
227
+ /// Compute the autocomplete results for the current query,
228
+ /// returning null if the search aborts early.
229
+ ///
230
+ /// Implementations should call [shouldStop] at regular intervals,
231
+ /// and abort if it completes with true.
232
+ /// Consider using [filterCandidates] .
233
+ @protected
234
+ Future <List <ResultT >?> computeResults ();
235
+
231
236
/// Completes in a later microtask, returning true if evaluation
232
237
/// of the current query should stop and false if it should continue.
233
238
///
@@ -249,15 +254,6 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
249
254
return false ;
250
255
}
251
256
252
- Future <List <ResultT >?> _computeResults () async {
253
- final results = < ResultT > [];
254
- if (await filterCandidates (filter: testItem,
255
- candidates: getSortedItemsToTest (), results: results)) {
256
- return null ;
257
- }
258
- return results;
259
- }
260
-
261
257
/// Examine the given candidates against `query` , adding matches to `results` .
262
258
///
263
259
/// This function chunks its work for interruption using [shouldStop] ,
@@ -312,14 +308,18 @@ class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery,
312
308
final List <User > sortedUsers;
313
309
314
310
@override
315
- Iterable <User > getSortedItemsToTest () {
316
- return sortedUsers;
311
+ Future <List <MentionAutocompleteResult >?> computeResults () async {
312
+ final results = < MentionAutocompleteResult > [];
313
+ if (await filterCandidates (filter: _testUser,
314
+ candidates: sortedUsers, results: results)) {
315
+ return null ;
316
+ }
317
+ return results;
317
318
}
318
319
319
- @override
320
- MentionAutocompleteResult ? testItem (MentionAutocompleteQuery query, User item) {
321
- if (query.testUser (item, store.autocompleteViewManager.autocompleteDataCache)) {
322
- return UserMentionAutocompleteResult (userId: item.userId);
320
+ MentionAutocompleteResult ? _testUser (MentionAutocompleteQuery query, User user) {
321
+ if (query.testUser (user, store.autocompleteViewManager.autocompleteDataCache)) {
322
+ return UserMentionAutocompleteResult (userId: user.userId);
323
323
}
324
324
return null ;
325
325
}
@@ -618,12 +618,18 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
618
618
}
619
619
620
620
@override
621
- Iterable <String > getSortedItemsToTest () => _topics;
621
+ Future <List <TopicAutocompleteResult >?> computeResults () async {
622
+ final results = < TopicAutocompleteResult > [];
623
+ if (await filterCandidates (filter: _testTopic,
624
+ candidates: _topics, results: results)) {
625
+ return null ;
626
+ }
627
+ return results;
628
+ }
622
629
623
- @override
624
- TopicAutocompleteResult ? testItem (TopicAutocompleteQuery query, String item) {
625
- if (query.testTopic (item)) {
626
- return TopicAutocompleteResult (topic: item);
630
+ TopicAutocompleteResult ? _testTopic (TopicAutocompleteQuery query, String topic) {
631
+ if (query.testTopic (topic)) {
632
+ return TopicAutocompleteResult (topic: topic);
627
633
}
628
634
return null ;
629
635
}
0 commit comments