import 'package:aioa_mobile/core/auth/authenticated_http_client.dart'; import 'package:aioa_mobile/core/config/runtime_config.dart'; import 'package:aioa_mobile/features/form/data/leave_draft_submission_repository.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; final leaveDraftSubmissionRepositoryProvider = Provider( (ref) => LeaveDraftSubmissionRepository( client: ref.watch(authenticatedHttpClientProvider), baseUrl: RuntimeConfig.apiBaseUrl, ), ); final leaveSubmissionProvider = NotifierProvider( LeaveSubmissionController.new, ); class LeaveSubmissionState { const LeaveSubmissionState({this.submitting = false, this.error}); final bool submitting; final String? error; } class LeaveSubmissionController extends Notifier { @override LeaveSubmissionState build() => const LeaveSubmissionState(); Future submit(Map values) async { if (state.submitting) return null; state = const LeaveSubmissionState(submitting: true); try { final created = await ref .read(leaveDraftSubmissionRepositoryProvider) .create(values); state = const LeaveSubmissionState(); return created; } on LeaveDraftSubmissionException catch (error) { state = LeaveSubmissionState(error: error.message); return null; } } }