Remove flutter chat #26
1 changed files with 18 additions and 10 deletions
temp isolate
commit
34e6c07d8d
|
|
@ -1,3 +1,5 @@
|
||||||
|
import "dart:isolate";
|
||||||
|
|
||||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
import "package:nexus/models/event.dart";
|
import "package:nexus/models/event.dart";
|
||||||
|
|
@ -38,7 +40,11 @@ class RoomsController extends Notifier<IMap<String, Room>> {
|
||||||
);
|
);
|
||||||
|
|
||||||
Future<void> update(IMap<String, Room> rooms, ISet<String> leftRooms) async {
|
Future<void> update(IMap<String, Room> rooms, ISet<String> leftRooms) async {
|
||||||
final merged = rooms.entries.fold(state, (acc, entry) {
|
final merged = await rooms.entries.fold(Future.sync(() => state), (
|
||||||
|
accF,
|
||||||
|
entry,
|
||||||
|
) async {
|
||||||
|
final acc = await accF;
|
||||||
final roomId = entry.key;
|
final roomId = entry.key;
|
||||||
final incoming = entry.value;
|
final incoming = entry.value;
|
||||||
final existing = acc[roomId];
|
final existing = acc[roomId];
|
||||||
|
|
@ -51,15 +57,18 @@ class RoomsController extends Notifier<IMap<String, Room>> {
|
||||||
events: incoming.events.isEmpty
|
events: incoming.events.isEmpty
|
||||||
? existing.events
|
? existing.events
|
||||||
: existing.events.addAll(incoming.events),
|
: existing.events.addAll(incoming.events),
|
||||||
state: incoming.state.entries.fold(
|
state: await Isolate.run(() {
|
||||||
existing.state,
|
final state = incoming.state.entries.fold(
|
||||||
(previousValue, event) => previousValue.add(
|
existing.state,
|
||||||
event.key,
|
(previousValue, event) => previousValue.add(
|
||||||
(previousValue[event.key] ?? const IMap.empty()).addAll(
|
event.key,
|
||||||
event.value,
|
(previousValue[event.key] ?? const IMap.empty()).addAll(
|
||||||
|
event.value,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
),
|
return state;
|
||||||
|
}),
|
||||||
reset: false,
|
reset: false,
|
||||||
hasFetchedMembers:
|
hasFetchedMembers:
|
||||||
incoming.hasFetchedMembers || existing.hasFetchedMembers,
|
incoming.hasFetchedMembers || existing.hasFetchedMembers,
|
||||||
|
|
@ -86,7 +95,6 @@ class RoomsController extends Notifier<IMap<String, Room>> {
|
||||||
merged,
|
merged,
|
||||||
(acc, roomId) => acc.remove(roomId),
|
(acc, roomId) => acc.remove(roomId),
|
||||||
);
|
);
|
||||||
|
|
||||||
state = prunedList;
|
state = prunedList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue