From 34e6c07d8d33a472ffe3c8b6a230a1cda310013e Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Thu, 21 May 2026 12:16:01 -0400 Subject: [PATCH] temp isolate --- lib/controllers/rooms_controller.dart | 28 +++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/controllers/rooms_controller.dart b/lib/controllers/rooms_controller.dart index 55a0d2b..bcee62d 100644 --- a/lib/controllers/rooms_controller.dart +++ b/lib/controllers/rooms_controller.dart @@ -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"; @@ -38,7 +40,11 @@ class RoomsController extends Notifier> { ); Future update(IMap rooms, ISet 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 incoming = entry.value; final existing = acc[roomId]; @@ -51,15 +57,18 @@ class RoomsController extends Notifier> { events: incoming.events.isEmpty ? existing.events : existing.events.addAll(incoming.events), - state: incoming.state.entries.fold( - existing.state, - (previousValue, event) => previousValue.add( - event.key, - (previousValue[event.key] ?? const IMap.empty()).addAll( - event.value, + state: await Isolate.run(() { + final state = incoming.state.entries.fold( + existing.state, + (previousValue, event) => previousValue.add( + event.key, + (previousValue[event.key] ?? const IMap.empty()).addAll( + event.value, + ), ), - ), - ), + ); + return state; + }), reset: false, hasFetchedMembers: incoming.hasFetchedMembers || existing.hasFetchedMembers, @@ -86,7 +95,6 @@ class RoomsController extends Notifier> { merged, (acc, roomId) => acc.remove(roomId), ); - state = prunedList; }