@@ -192,10 +192,6 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
192192
193193 final PerAccountStore store;
194194
195- Iterable <CandidateT > getSortedItemsToTest ();
196-
197- ResultT ? testItem (QueryT query, CandidateT item);
198-
199195 QueryT ? get query => _query;
200196 QueryT ? _query;
201197 set query (QueryT ? query) {
@@ -218,7 +214,7 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
218214 List <ResultT > _results = [];
219215
220216 Future <void > _startSearch () async {
221- final newResults = await _computeResults ();
217+ final newResults = await computeResults ();
222218 if (newResults == null ) {
223219 // Query was old; new search is in progress. Or, no listeners to notify.
224220 return ;
@@ -228,6 +224,15 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
228224 notifyListeners ();
229225 }
230226
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+
231236 /// Completes in a later microtask, returning true if evaluation
232237 /// of the current query should stop and false if it should continue.
233238 ///
@@ -249,15 +254,6 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
249254 return false ;
250255 }
251256
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-
261257 /// Examine the given candidates against `query` , adding matches to `results` .
262258 ///
263259 /// This function chunks its work for interruption using [shouldStop] ,
@@ -312,14 +308,18 @@ class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery,
312308 final List <User > sortedUsers;
313309
314310 @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;
317318 }
318319
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);
323323 }
324324 return null ;
325325 }
@@ -618,12 +618,18 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
618618 }
619619
620620 @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+ }
622629
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);
627633 }
628634 return null ;
629635 }
0 commit comments