Skip to content

Commit 30ea47d

Browse files
committed
autocomplete: Introduce AutocompleteViewManager._autocompleteViews
This set replaces the three sets of different `AutocompleteView` subclasses into one, simplifying the code.
1 parent 1193a12 commit 30ea47d

File tree

2 files changed

+20
-57
lines changed

2 files changed

+20
-57
lines changed

lib/model/autocomplete.dart

Lines changed: 19 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -206,39 +206,17 @@ class AutocompleteIntent<QueryT extends AutocompleteQuery> {
206206
///
207207
/// On reassemble, call [reassemble].
208208
class 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,

lib/model/emoji.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -481,9 +481,7 @@ class EmojiAutocompleteView extends AutocompleteView<EmojiAutocompleteQuery, Emo
481481
required PerAccountStore store,
482482
required EmojiAutocompleteQuery query,
483483
}) {
484-
final view = EmojiAutocompleteView._(store: store, query: query);
485-
store.autocompleteViewManager.registerEmojiAutocomplete(view);
486-
return view;
484+
return EmojiAutocompleteView._(store: store, query: query);
487485
}
488486

489487
@override

0 commit comments

Comments
 (0)