import 'package:aioa_mobile/core/auth/authenticated_http_client.dart'; import 'package:aioa_mobile/core/config/runtime_config.dart'; import 'package:aioa_mobile/features/tasks/data/approval_task_repository.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; final approvalTaskRepositoryProvider = Provider( (ref) => ApprovalTaskRepository( client: ref.watch(authenticatedHttpClientProvider), baseUrl: RuntimeConfig.apiBaseUrl, ), ); final approvalTaskProvider = AsyncNotifierProvider>( ApprovalTaskController.new, ); class ApprovalTaskController extends AsyncNotifier> { @override Future> build() => ref.read(approvalTaskRepositoryProvider).list(); Future refresh() async { state = const AsyncLoading(); state = await AsyncValue.guard( () => ref.read(approvalTaskRepositoryProvider).list(), ); } Future decide({ required ApprovalTaskItem task, required bool approved, String? comment, }) async { try { await ref .read(approvalTaskRepositoryProvider) .decide(task: task, approved: approved, comment: comment); state = AsyncData([ for (final item in state.value ?? const []) if (item.id != task.id) item, ]); return null; } on ApprovalTaskException catch (error) { return error.message; } } }