Leave room support, persist last room, fixes

This commit is contained in:
Henry Hiles 2025-12-03 16:16:30 -05:00
commit 7dfd47a404
No known key found for this signature in database
17 changed files with 312 additions and 136 deletions

View file

@ -1,12 +1,33 @@
import "package:collection/collection.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/key_controller.dart";
import "package:nexus/controllers/selected_space_controller.dart";
import "package:nexus/models/full_room.dart";
class SelectedRoomController extends Notifier<int> {
class SelectedRoomController extends AsyncNotifier<FullRoom?> {
@override
int build() => 0;
bool updateShouldNotify(
AsyncValue<FullRoom?> previous,
AsyncValue<FullRoom?> next,
) =>
previous.value?.avatar != next.value?.avatar ||
previous.value?.title != next.value?.title;
void set(int value) => state = value;
@override
Future<FullRoom?> build() async {
final space = await ref.watch(SelectedSpaceController.provider.future);
final selectedRoomId = ref.watch(
KeyController.provider(KeyController.roomKey),
);
static final provider = NotifierProvider<SelectedRoomController, int>(
SelectedRoomController.new,
);
return space.children.firstWhereOrNull(
(room) => room.roomData.id == selectedRoomId,
) ??
space.children.firstOrNull;
}
static final provider =
AsyncNotifierProvider<SelectedRoomController, FullRoom?>(
SelectedRoomController.new,
);
}