import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../api/endpoints/admin_invites.dart'; import '../api/endpoints/admin_quarantine.dart'; import '../api/endpoints/admin_requests.dart'; import '../api/endpoints/admin_users.dart'; import '../library/library_providers.dart' show dioProvider; final adminRequestsApiProvider = FutureProvider((ref) async { return AdminRequestsApi(await ref.watch(dioProvider.future)); }); final adminQuarantineApiProvider = FutureProvider((ref) async { return AdminQuarantineApi(await ref.watch(dioProvider.future)); }); final adminUsersApiProvider = FutureProvider((ref) async { return AdminUsersApi(await ref.watch(dioProvider.future)); }); final adminInvitesApiProvider = FutureProvider((ref) async { return AdminInvitesApi(await ref.watch(dioProvider.future)); }); class AdminCounts { const AdminCounts({ required this.requests, required this.quarantine, required this.users, }); final int requests; final int quarantine; final int users; } /// Fans out to the three list endpoints in parallel and rolls them up /// into `{requests, quarantine, users}` for the landing screen badges. final adminCountsProvider = FutureProvider((ref) async { final requestsApi = await ref.watch(adminRequestsApiProvider.future); final quarantineApi = await ref.watch(adminQuarantineApiProvider.future); final usersApi = await ref.watch(adminUsersApiProvider.future); final results = await Future.wait([ requestsApi.list(), quarantineApi.list(), usersApi.list(), ]); return AdminCounts( requests: (results[0] as List).length, quarantine: (results[1] as List).length, users: (results[2] as List).length, ); });