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/models/membership.dart"; import "package:nexus/models/requests/get_room_state_request.dart"; import "package:nexus/models/room.dart"; class MembersController extends AsyncNotifier> { final Room room; MembersController(this.room); @override Future> build() async { if (room.metadata == null) return const IList.empty(); final state = await ref .watch(ClientController.provider.notifier) .getRoomState( GetRoomStateRequest( roomId: room.metadata!.id, fetchMembers: room.metadata!.hasMemberList == false, includeMembers: true, ), ); return state.nonNulls .where((member) => member.content["membership"] == "join") .map( (membership) => Membership.fromContent(membership.content, membership.stateKey!), ) .toIList(); } static final provider = AsyncNotifierProvider.family, Room>( MembersController.new, ); }