forked from Henry-Hiles/nexus
Leave room support, persist last room, fixes
This commit is contained in:
parent
f7c6c3bb6a
commit
7dfd47a404
17 changed files with 312 additions and 136 deletions
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue