make it a little more efficient
This commit is contained in:
parent
57cfad9f45
commit
13c2a4062b
2 changed files with 17 additions and 14 deletions
|
|
@ -88,7 +88,7 @@ class RoomChatController extends AsyncNotifier<IList<Event>> {
|
|||
),
|
||||
);
|
||||
|
||||
await ref
|
||||
ref
|
||||
.watch(RoomsController.provider.notifier)
|
||||
.update(
|
||||
IMap({
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import "dart:isolate";
|
||||
|
||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||
import "package:nexus/models/event.dart";
|
||||
|
|
@ -12,7 +14,7 @@ class RoomsController extends Notifier<IMap<String, Room>> {
|
|||
String roomId,
|
||||
IList<Event> state, {
|
||||
bool isMembers = false,
|
||||
}) => update(
|
||||
}) async => update(
|
||||
{
|
||||
roomId: Room(
|
||||
events: IMap.fromEntries(
|
||||
|
|
@ -20,24 +22,25 @@ class RoomsController extends Notifier<IMap<String, Room>> {
|
|||
),
|
||||
hasFetchedState: true,
|
||||
hasFetchedMembers: isMembers,
|
||||
state: state.fold(
|
||||
const IMap.empty(),
|
||||
(previousValue, stateEvent) => previousValue.add(
|
||||
stateEvent.type,
|
||||
(previousValue[stateEvent.type] ?? const IMap.empty()).addAll(
|
||||
IMap({
|
||||
if (stateEvent.stateKey != null)
|
||||
stateEvent.stateKey!: stateEvent.rowId,
|
||||
}),
|
||||
state: await Isolate.run(() {
|
||||
final newState = state.fold(
|
||||
const IMap<String, IMap<String, int>>.empty(),
|
||||
(previousValue, stateEvent) => previousValue.add(
|
||||
stateEvent.type,
|
||||
(previousValue[stateEvent.type] ?? const IMap.empty()).add(
|
||||
stateEvent.stateKey!,
|
||||
stateEvent.rowId,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
return newState;
|
||||
}),
|
||||
),
|
||||
}.toIMap(),
|
||||
const ISet.empty(),
|
||||
);
|
||||
|
||||
Future<void> update(IMap<String, Room> rooms, ISet<String> leftRooms) async {
|
||||
void update(IMap<String, Room> rooms, ISet<String> leftRooms) {
|
||||
final merged = rooms.entries.fold(state, (acc, entry) {
|
||||
final roomId = entry.key;
|
||||
final incoming = entry.value;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue