don't pass room around, use many watches
This commit is contained in:
parent
e0ba99d9b9
commit
60be7aaf72
15 changed files with 207 additions and 231 deletions
|
|
@ -2,24 +2,28 @@ import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
|||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||
import "package:nexus/controllers/client_controller.dart";
|
||||
import "package:nexus/controllers/client_state_controller.dart";
|
||||
import "package:nexus/controllers/selected_room_controller.dart";
|
||||
import "package:nexus/models/membership.dart";
|
||||
import "package:nexus/models/requests/get_room_state_request.dart";
|
||||
import "package:nexus/models/room.dart";
|
||||
|
||||
class MembersController extends AsyncNotifier<IList<Membership>> {
|
||||
final Room room;
|
||||
MembersController(this.room);
|
||||
|
||||
@override
|
||||
Future<IList<Membership>> build() async {
|
||||
if (room.metadata == null) return const IList.empty();
|
||||
final data = ref.watch(
|
||||
SelectedRoomController.provider.select(
|
||||
(value) => value?.metadata == null
|
||||
? null
|
||||
: (value!.metadata!.id, value.metadata!.hasMemberList),
|
||||
),
|
||||
);
|
||||
if (data == null) return const IList.empty();
|
||||
|
||||
final state = await ref
|
||||
.watch(ClientController.provider.notifier)
|
||||
.getRoomState(
|
||||
GetRoomStateRequest(
|
||||
roomId: room.metadata!.id,
|
||||
fetchMembers: room.metadata!.hasMemberList == false,
|
||||
roomId: data.$1,
|
||||
fetchMembers: data.$2 == false,
|
||||
includeMembers: true,
|
||||
),
|
||||
);
|
||||
|
|
@ -42,7 +46,7 @@ class MembersController extends AsyncNotifier<IList<Membership>> {
|
|||
}
|
||||
|
||||
static final provider =
|
||||
AsyncNotifierProvider.family<MembersController, IList<Membership>, Room>(
|
||||
AsyncNotifierProvider<MembersController, IList<Membership>>(
|
||||
MembersController.new,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue