import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'auth_provider.dart'; import '../services/health_service.dart'; import '../services/admin_service.dart'; import '../services/in_app_notification_service.dart'; final exerciseServiceProvider = Provider((ref) { return ExerciseService(ref.watch(apiClientProvider)); }); /// 健康数据服务 final healthServiceProvider = Provider((ref) { return HealthService(ref.watch(apiClientProvider)); }); final userServiceProvider = Provider((ref) { return UserService(ref.watch(apiClientProvider)); }); final medicationServiceProvider = Provider((ref) { return MedicationService(ref.watch(apiClientProvider)); }); final dietServiceProvider = Provider((ref) { return DietService(ref.watch(apiClientProvider)); }); final followUpServiceProvider = Provider((ref) { return FollowUpService(ref.watch(apiClientProvider)); }); final consultationServiceProvider = Provider((ref) { return ConsultationService(ref.watch(apiClientProvider)); }); final adminServiceProvider = Provider((ref) { return AdminService(ref.watch(apiClientProvider)); }); final inAppNotificationServiceProvider = Provider(( ref, ) { return InAppNotificationService(ref.watch(apiClientProvider)); }); final notificationUnreadCountProvider = FutureProvider.autoDispose(( ref, ) async { final history = await ref .watch(inAppNotificationServiceProvider) .getHistory(); return history.unreadCount; }); /// 最新健康数据 Provider final latestHealthProvider = FutureProvider.autoDispose>(( ref, ) async { final service = ref.watch(healthServiceProvider); return service.getLatest(); }); /// AI 录入数据后调用,刷新侧边栏 void refreshHealthData(WidgetRef ref) { ref.invalidate(latestHealthProvider); ref.invalidate(medicationListProvider); } /// 用药列表 Provider final medicationListProvider = FutureProvider.autoDispose>>((ref) async { final service = ref.watch(medicationServiceProvider); return service.getList(); }); final medicationReminderProvider = FutureProvider.autoDispose>>((ref) async { final service = ref.watch(medicationServiceProvider); return service.getReminders(); }); /// 医生列表 Provider final doctorListProvider = FutureProvider>>(( ref, ) async { final service = ref.watch(consultationServiceProvider); return service.getDoctors().timeout(const Duration(seconds: 8)); }); /// 问诊配额 Provider final consultationQuotaProvider = FutureProvider>(( ref, ) async { final service = ref.watch(consultationServiceProvider); return service.getQuota(); }); /// 当前运动计划 Provider final currentExercisePlanProvider = FutureProvider.autoDispose?>((ref) async { final service = ref.watch(exerciseServiceProvider); return service.getCurrentPlan().timeout(const Duration(seconds: 8)); }); /// 拍照/相册直接触发(无需跳转页面) final cameraActionProvider = NotifierProvider( CameraActionNotifier.new, ); class CameraActionNotifier extends Notifier { @override String? build() => null; void trigger(String action) => state = action; void clear() => state = null; } /// 拍饮食动作触发(不用跳多余页面) final dietActionProvider = NotifierProvider( DietActionNotifier.new, ); class DietActionNotifier extends Notifier { @override String? build() => null; void trigger(String action) => state = action; void clear() => state = null; }