Skip to content

Commit 46f3723

Browse files
committed
Revert "store [nfc]: Change users from Map<int, User> to a new wrapper MapNotifier<int, User>"
This reverts commit f074645.
1 parent bfb2d1d commit 46f3723

File tree

5 files changed

+8
-41
lines changed

5 files changed

+8
-41
lines changed

lib/model/autocomplete.dart

+1-13
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,6 @@ class MentionAutocompleteView extends ChangeNotifier {
341341
_sortedUsers = sortByRelevance(users: users, narrow: narrow);
342342
}
343343

344-
bool _areUsersModified = false;
345-
void _usersModified() {
346-
_areUsersModified = true;
347-
}
348-
349344
Future<List<MentionAutocompleteResult>?> _computeResults(MentionAutocompleteQuery query) async {
350345
final List<MentionAutocompleteResult> results = [];
351346

@@ -354,7 +349,6 @@ class MentionAutocompleteView extends ChangeNotifier {
354349
}
355350

356351
final iterator = _sortedUsers!.iterator;
357-
store.users.addListener(_usersModified);
358352
bool isDone = false;
359353
while (!isDone) {
360354
// CPU perf: End this task; enqueue a new one for resuming this work
@@ -365,12 +359,7 @@ class MentionAutocompleteView extends ChangeNotifier {
365359
}
366360

367361
for (int i = 0; i < 1000; i++) {
368-
if (_areUsersModified) {
369-
_areUsersModified = false;
370-
_sortedUsers = null;
371-
throw ConcurrentModificationError();
372-
}
373-
if (!iterator.moveNext()) {
362+
if (!iterator.moveNext()) { // Can throw ConcurrentModificationError
374363
isDone = true;
375364
break;
376365
}
@@ -381,7 +370,6 @@ class MentionAutocompleteView extends ChangeNotifier {
381370
}
382371
}
383372
}
384-
store.users.removeListener(_usersModified);
385373
return results;
386374
}
387375
}

lib/model/store.dart

+2-23
Original file line numberDiff line numberDiff line change
@@ -172,26 +172,6 @@ abstract class GlobalStore extends ChangeNotifier {
172172
String toString() => '${objectRuntimeType(this, 'GlobalStore')}#${shortHash(this)}';
173173
}
174174

175-
/// A wrapper class for `Map<K, V>`.
176-
///
177-
/// This can be listened to for any modifications done to `Map<K, V>`.
178-
class MapNotifier<K, V> extends ValueNotifier<Map<K, V>> {
179-
MapNotifier(super._value);
180-
181-
Iterable<V> get values => value.values;
182-
183-
V? operator [](Object? key) => value[key];
184-
185-
void operator []=(K key, V value) {
186-
this.value[key] = value;
187-
notifyListeners();
188-
}
189-
190-
V? remove(Object? key) {
191-
return value.remove(key);
192-
}
193-
}
194-
195175
/// Store for the user's data for a given Zulip account.
196176
///
197177
/// This should always have a consistent snapshot of the state on the server,
@@ -256,15 +236,14 @@ class PerAccountStore extends ChangeNotifier with StreamStore {
256236
required this.accountId,
257237
required this.selfUserId,
258238
required this.userSettings,
259-
required Map<int, User> users,
239+
required this.users,
260240
required streams,
261241
required this.unreads,
262242
required this.recentDmConversationsView,
263243
}) : assert(selfUserId == globalStore.getAccount(accountId)!.userId),
264244
assert(realmUrl == globalStore.getAccount(accountId)!.realmUrl),
265245
assert(realmUrl == connection.realmUrl),
266246
_globalStore = globalStore,
267-
users = MapNotifier(users),
268247
_streams = streams;
269248

270249
////////////////////////////////////////////////////////////////
@@ -307,7 +286,7 @@ class PerAccountStore extends ChangeNotifier with StreamStore {
307286
////////////////////////////////
308287
// Users and data about them.
309288

310-
final MapNotifier<int, User> users;
289+
final Map<int, User> users;
311290

312291
final RecentSenders recentSenders = RecentSenders();
313292

lib/widgets/autocomplete.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class _ComposeAutocompleteState extends State<ComposeAutocomplete> with PerAccou
107107
case UserMentionAutocompleteResult(:var userId):
108108
// TODO(i18n) language-appropriate space character; check active keyboard?
109109
// (maybe handle centrally in `widget.controller`)
110-
replacementString = '${mention(store.users[userId]!, silent: intent.query.silent, users: store.users.value)} ';
110+
replacementString = '${mention(store.users[userId]!, silent: intent.query.silent, users: store.users)} ';
111111
}
112112

113113
widget.controller.value = intent.textEditingValue.replaced(

test/model/compose_test.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -314,17 +314,17 @@ hello
314314
test('`users` passed; has two users with same fullName', () {
315315
final store = eg.store();
316316
store.addUsers([user, eg.user(userId: 5), eg.user(userId: 234, fullName: user.fullName)]);
317-
check(mention(user, silent: true, users: store.users.value)).equals('@_**Full Name|123**');
317+
check(mention(user, silent: true, users: store.users)).equals('@_**Full Name|123**');
318318
});
319319
test('`users` passed; has two same-name users but one of them is deactivated', () {
320320
final store = eg.store();
321321
store.addUsers([user, eg.user(userId: 5), eg.user(userId: 234, fullName: user.fullName, isActive: false)]);
322-
check(mention(user, silent: true, users: store.users.value)).equals('@_**Full Name|123**');
322+
check(mention(user, silent: true, users: store.users)).equals('@_**Full Name|123**');
323323
});
324324
test('`users` passed; user has unique fullName', () {
325325
final store = eg.store();
326326
store.addUsers([user, eg.user(userId: 234, fullName: 'Another Name')]);
327-
check(mention(user, silent: true, users: store.users.value)).equals('@_**Full Name**');
327+
check(mention(user, silent: true, users: store.users)).equals('@_**Full Name**');
328328
});
329329
});
330330

test/widgets/autocomplete_test.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void main() {
112112
await tester.tap(find.text('User Three'));
113113
await tester.pump();
114114
check(tester.widget<TextField>(composeInputFinder).controller!.text)
115-
.contains(mention(user3, users: store.users.value));
115+
.contains(mention(user3, users: store.users));
116116
checkUserShown(user1, store, expected: false);
117117
checkUserShown(user2, store, expected: false);
118118
checkUserShown(user3, store, expected: false);

0 commit comments

Comments
 (0)