Files
AI-Health/health_app/lib/providers/data_providers.dart
MingNian d82e006cf4 refactor: 死代码清理 + 趋势图重构 + 侧边栏交互优化 + 智能体卡片去延迟
- 死代码清理: 删除 AppCard/AppMenuItem/AppTabChip/AppButtons 等 4 个未使用 Widget 文件; 清理 common_widgets/enterprise_widgets/app_status_badge 中未使用 class; 移除 HealthService 等未使用方法; 后端移除 ExerciseService.CreateFromItemsAsync/HealthArchiveService.GetOrCreateAsync/MedicationAgentHandler 死分支/ChatRequest DTO
- 趋势图: 直线折线 + 渐变填充 + 阴影; 去网格; X 轴日+月份; Y 轴整数刻度最多 4 个; 点击数据点/录入记录显示上方浮层; 选中点变实心
- 侧边栏: 对话记录改单选删除(灰底高亮); 操作栏浮层修复触摸问题; 常用功能/健康仪表盘间距收紧; _Panel 去外框
- 智能体: 欢迎卡片去掉 400ms 延迟; 胶囊去阴影
- 其他: api_client IP 适配; 多页面 UI 微调; 新增 chat_provider/prelaunch_guardrails 测试
2026-07-09 15:04:02 +08:00

115 lines
3.4 KiB
Dart

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<ExerciseService>((ref) {
return ExerciseService(ref.watch(apiClientProvider));
});
/// 健康数据服务
final healthServiceProvider = Provider<HealthService>((ref) {
return HealthService(ref.watch(apiClientProvider));
});
final userServiceProvider = Provider<UserService>((ref) {
return UserService(ref.watch(apiClientProvider));
});
final medicationServiceProvider = Provider<MedicationService>((ref) {
return MedicationService(ref.watch(apiClientProvider));
});
final dietServiceProvider = Provider<DietService>((ref) {
return DietService(ref.watch(apiClientProvider));
});
final followUpServiceProvider = Provider<FollowUpService>((ref) {
return FollowUpService(ref.watch(apiClientProvider));
});
final consultationServiceProvider = Provider<ConsultationService>((ref) {
return ConsultationService(ref.watch(apiClientProvider));
});
final adminServiceProvider = Provider<AdminService>((ref) {
return AdminService(ref.watch(apiClientProvider));
});
final inAppNotificationServiceProvider = Provider<InAppNotificationService>((
ref,
) {
return InAppNotificationService(ref.watch(apiClientProvider));
});
final notificationUnreadCountProvider = FutureProvider.autoDispose<int>((
ref,
) async {
final history = await ref
.watch(inAppNotificationServiceProvider)
.getHistory();
return history.unreadCount;
});
/// 最新健康数据 Provider
final latestHealthProvider = FutureProvider.autoDispose<Map<String, dynamic>>((
ref,
) async {
final service = ref.watch(healthServiceProvider);
return service.getLatest();
});
/// 用药列表 Provider
final medicationListProvider =
FutureProvider.autoDispose<List<Map<String, dynamic>>>((ref) async {
final service = ref.watch(medicationServiceProvider);
return service.getList();
});
final medicationReminderProvider =
FutureProvider.autoDispose<List<Map<String, dynamic>>>((ref) async {
final service = ref.watch(medicationServiceProvider);
return service.getReminders();
});
/// 医生列表 Provider
final doctorListProvider = FutureProvider<List<Map<String, dynamic>>>((
ref,
) async {
final service = ref.watch(consultationServiceProvider);
return service.getDoctors().timeout(const Duration(seconds: 8));
});
/// 当前运动计划 Provider
final currentExercisePlanProvider =
FutureProvider.autoDispose<Map<String, dynamic>?>((ref) async {
final service = ref.watch(exerciseServiceProvider);
return service.getCurrentPlan().timeout(const Duration(seconds: 8));
});
/// 拍照/相册直接触发(无需跳转页面)
final cameraActionProvider = NotifierProvider<CameraActionNotifier, String?>(
CameraActionNotifier.new,
);
class CameraActionNotifier extends Notifier<String?> {
@override
String? build() => null;
void trigger(String action) => state = action;
void clear() => state = null;
}
/// 拍饮食动作触发(不用跳多余页面)
final dietActionProvider = NotifierProvider<DietActionNotifier, String?>(
DietActionNotifier.new,
);
class DietActionNotifier extends Notifier<String?> {
@override
String? build() => null;
void trigger(String action) => state = action;
void clear() => state = null;
}