@@ -206,39 +206,17 @@ class AutocompleteIntent<QueryT extends AutocompleteQuery> {
206206///
207207/// On reassemble, call [reassemble] .
208208class AutocompleteViewManager {
209- final Set <MentionAutocompleteView > _mentionAutocompleteViews = {};
210- final Set <TopicAutocompleteView > _topicAutocompleteViews = {};
211- final Set <EmojiAutocompleteView > _emojiAutocompleteViews = {};
209+ final Set <AutocompleteView > _autocompleteViews = {};
212210
213211 AutocompleteDataCache autocompleteDataCache = AutocompleteDataCache ();
214212
215- void registerMentionAutocomplete ( MentionAutocompleteView view) {
216- final added = _mentionAutocompleteViews .add (view);
213+ void registerAutocomplete ( AutocompleteView view) {
214+ final added = _autocompleteViews .add (view);
217215 assert (added);
218216 }
219217
220- void unregisterMentionAutocomplete (MentionAutocompleteView view) {
221- final removed = _mentionAutocompleteViews.remove (view);
222- assert (removed);
223- }
224-
225- void registerTopicAutocomplete (TopicAutocompleteView view) {
226- final added = _topicAutocompleteViews.add (view);
227- assert (added);
228- }
229-
230- void unregisterTopicAutocomplete (TopicAutocompleteView view) {
231- final removed = _topicAutocompleteViews.remove (view);
232- assert (removed);
233- }
234-
235- void registerEmojiAutocomplete (EmojiAutocompleteView view) {
236- final added = _emojiAutocompleteViews.add (view);
237- assert (added);
238- }
239-
240- void unregisterEmojiAutocomplete (EmojiAutocompleteView view) {
241- final removed = _emojiAutocompleteViews.remove (view);
218+ void unregisterAutocomplete (AutocompleteView view) {
219+ final removed = _autocompleteViews.remove (view);
242220 assert (removed);
243221 }
244222
@@ -263,10 +241,7 @@ class AutocompleteViewManager {
263241 /// Calls [AutocompleteView.reassemble] for all that are registered.
264242 ///
265243 void reassemble () {
266- for (final view in _mentionAutocompleteViews) {
267- view.reassemble ();
268- }
269- for (final view in _topicAutocompleteViews) {
244+ for (final view in _autocompleteViews) {
270245 view.reassemble ();
271246 }
272247 }
@@ -307,6 +282,7 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
307282 /// and begin the search for the initial query.
308283 AutocompleteView ({required this .store, required QueryT query})
309284 : _query = query {
285+ store.autocompleteViewManager.registerAutocomplete (this );
310286 _startSearch ();
311287 }
312288
@@ -417,6 +393,15 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
417393 }
418394 return false ;
419395 }
396+
397+ @override
398+ void dispose () {
399+ store.autocompleteViewManager.unregisterAutocomplete (this );
400+ // We cancel in-progress computations by checking [hasListeners] between tasks.
401+ // After [super.dispose] is called, [hasListeners] returns false.
402+ // TODO test that logic (may involve detecting an unhandled Future rejection; how?)
403+ super .dispose ();
404+ }
420405}
421406
422407/// An [AutocompleteView] for an autocomplete interaction
@@ -441,16 +426,14 @@ class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery,
441426 required Narrow narrow,
442427 required MentionAutocompleteQuery query,
443428 }) {
444- final view = MentionAutocompleteView ._(
429+ return MentionAutocompleteView ._(
445430 store: store,
446431 query: query,
447432 localizations: localizations,
448433 narrow: narrow,
449434 sortedUsers: _usersByRelevance (store: store, narrow: narrow),
450435 sortedUserGroups: _userGroupsByRelevance (store: store),
451436 );
452- store.autocompleteViewManager.registerMentionAutocomplete (view);
453- return view;
454437 }
455438
456439 final Narrow narrow;
@@ -709,15 +692,6 @@ class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery,
709692 MentionAutocompleteResult ? _testUserGroup (MentionAutocompleteQuery query, UserGroup userGroup) {
710693 return query.testUserGroup (userGroup, store);
711694 }
712-
713- @override
714- void dispose () {
715- store.autocompleteViewManager.unregisterMentionAutocomplete (this );
716- // We cancel in-progress computations by checking [hasListeners] between tasks.
717- // After [super.dispose] is called, [hasListeners] returns false.
718- // TODO test that logic (may involve detecting an unhandled Future rejection; how?)
719- super .dispose ();
720- }
721695}
722696
723697/// A query the user has entered into some form of autocomplete.
@@ -1153,11 +1127,8 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
11531127 required int streamId,
11541128 required TopicAutocompleteQuery query,
11551129 }) {
1156- final view = TopicAutocompleteView ._(
1157- store: store, streamId: streamId, query: query);
1158- store.autocompleteViewManager.registerTopicAutocomplete (view);
1159- view._fetch ();
1160- return view;
1130+ return TopicAutocompleteView ._(store: store, streamId: streamId, query: query)
1131+ .._fetch ();
11611132 }
11621133
11631134 /// The channel/stream the eventual message will be sent to.
@@ -1199,12 +1170,6 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
11991170 }
12001171 return null ;
12011172 }
1202-
1203- @override
1204- void dispose () {
1205- store.autocompleteViewManager.unregisterTopicAutocomplete (this );
1206- super .dispose ();
1207- }
12081173}
12091174
12101175/// A query for autocompleting a topic to send to,
0 commit comments