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)
|
.watch(RoomsController.provider.notifier)
|
||||||
.update(
|
.update(
|
||||||
IMap({
|
IMap({
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
@ -12,7 +14,7 @@ class RoomsController extends Notifier<IMap<String, Room>> {
|
||||||
String roomId,
|
String roomId,
|
||||||
IList<Event> state, {
|
IList<Event> state, {
|
||||||
bool isMembers = false,
|
bool isMembers = false,
|
||||||
}) => update(
|
}) async => update(
|
||||||
{
|
{
|
||||||
roomId: Room(
|
roomId: Room(
|
||||||
events: IMap.fromEntries(
|
events: IMap.fromEntries(
|
||||||
|
|
@ -20,24 +22,25 @@ class RoomsController extends Notifier<IMap<String, Room>> {
|
||||||
),
|
),
|
||||||
hasFetchedState: true,
|
hasFetchedState: true,
|
||||||
hasFetchedMembers: isMembers,
|
hasFetchedMembers: isMembers,
|
||||||
state: state.fold(
|
state: await Isolate.run(() {
|
||||||
const IMap.empty(),
|
final newState = state.fold(
|
||||||
(previousValue, stateEvent) => previousValue.add(
|
const IMap<String, IMap<String, int>>.empty(),
|
||||||
stateEvent.type,
|
(previousValue, stateEvent) => previousValue.add(
|
||||||
(previousValue[stateEvent.type] ?? const IMap.empty()).addAll(
|
stateEvent.type,
|
||||||
IMap({
|
(previousValue[stateEvent.type] ?? const IMap.empty()).add(
|
||||||
if (stateEvent.stateKey != null)
|
stateEvent.stateKey!,
|
||||||
stateEvent.stateKey!: stateEvent.rowId,
|
stateEvent.rowId,
|
||||||
}),
|
),
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
),
|
return newState;
|
||||||
|
}),
|
||||||
),
|
),
|
||||||
}.toIMap(),
|
}.toIMap(),
|
||||||
const ISet.empty(),
|
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 merged = rooms.entries.fold(state, (acc, entry) {
|
||||||
final roomId = entry.key;
|
final roomId = entry.key;
|
||||||
final incoming = entry.value;
|
final incoming = entry.value;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue