Files
AI-Health/health_app/lib/core/app_router.dart
MingNian 1c020b8ae5 feat: UI 系统中心化 + 趋势图重构 + 法律文档 H5 上线
- UI 系统: 新增 design_tokens / module_visuals / app_buttons / app_status_badge / app_toast / ai_content 六个共享模块; 28 个页面接入, SnackBar 全部替换为 AppToast
- 趋势图: 直线折线 + 渐变填充 + 阴影; 去网格线; X 轴日+月份分隔; Y 轴整数刻度最多 4 个; 点击数据点/录入记录显示上方浮层, 选中点变实心
- 法律文档 H5: 后端 wwwroot 托管隐私政策/服务协议/关于/个人信息收集清单/第三方 SDK 清单 + 索引页; Program.cs 启用 UseDefaultFiles + UseStaticFiles
- 其他: auth_provider 登录流程调整; api_client IP 适配; 主页智能体栏间距优化
2026-07-08 21:25:07 +08:00

137 lines
5.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'navigation_provider.dart';
import '../pages/auth/login_page.dart';
import '../pages/home/home_page.dart';
import '../pages/chart/trend_page.dart';
import '../pages/medication/medication_list_page.dart';
import '../pages/medication/medication_checkin_page.dart';
import '../pages/medication/medication_edit_page.dart';
import '../pages/report/report_pages.dart';
import '../pages/report/ai_analysis_page.dart';
import '../pages/consultation/consultation_pages.dart';
import '../pages/settings/settings_pages.dart';
import '../pages/settings/notification_prefs_page.dart';
import '../pages/notifications/notification_center_page.dart';
import '../pages/history/conversation_history_page.dart';
import '../pages/profile/profile_page.dart';
import '../pages/diet/diet_capture_page.dart';
import '../pages/device/device_scan_page.dart';
import '../pages/device/device_management_page.dart';
import '../pages/remaining_pages.dart';
import '../pages/doctor/doctor_home_page.dart';
import '../pages/doctor/doctor_patient_detail_page.dart';
import '../pages/doctor/doctor_report_detail_page.dart';
import '../pages/doctor/doctor_followup_edit_page.dart';
import '../pages/doctor/doctor_settings_page.dart';
import '../pages/doctor/doctor_profile_page.dart';
import '../pages/admin/admin_home_page.dart';
import '../pages/admin/admin_add_doctor_page.dart';
import '../providers/auth_provider.dart' show userRoleProvider;
import '../widgets/app_error_state.dart';
Widget _missingParamPage() {
return const Scaffold(
body: AppErrorState(title: '页面参数错误', subtitle: '缺少打开页面所需的信息,请返回后重试'),
);
}
String? _requiredParam(Map<String, String> params, String key) {
final value = params[key]?.trim();
return value == null || value.isEmpty ? null : value;
}
/// 根据路由信息返回对应页面
Widget buildPage(RouteInfo route, WidgetRef ref) {
final params = route.params;
switch (route.name) {
case 'login':
return const LoginPage();
case 'home':
final role = ref.watch(userRoleProvider);
return role == 'Doctor' ? const DoctorHomePage() : const HomePage();
case 'doctorHome':
return const DoctorHomePage();
case 'adminHome':
return const AdminHomePage();
case 'adminAddDoctor':
return const AdminAddDoctorPage();
case 'trend':
return TrendPage(
metricType: params['type']?.isNotEmpty == true ? params['type'] : null,
);
case 'calendar':
return const HealthCalendarPage();
case 'medications':
return const MedicationListPage();
case 'medCheckIn':
return MedicationCheckInPage(medId: params['id']);
case 'medicationEdit':
return const MedicationEditPage();
case 'reports':
return const ReportListPage();
case 'aiAnalysis':
final id = _requiredParam(params, 'id');
return id == null ? _missingParamPage() : AiAnalysisPage(id: id);
case 'reportOriginal':
return ReportOriginalPage(
url: params['url'] ?? '',
title: params['title'] ?? '原始报告',
);
case 'exercisePlan':
return const ExercisePlanPage();
case 'exercisePlanDetail':
return const ExercisePlanPage();
case 'exerciseCreate':
return const ExercisePlanCreatePage();
case 'dietRecords':
return const DietRecordListPage();
case 'dietCapture':
return const DietCapturePage();
case 'profile':
return const ProfilePage();
case 'doctorProfile':
return const DoctorProfileEditPage();
case 'doctorSettings':
return const DoctorSettingsPage();
case 'doctorPatientDetail':
final id = _requiredParam(params, 'id');
return id == null ? _missingParamPage() : DoctorPatientDetailPage(id: id);
case 'doctorChat':
final id = _requiredParam(params, 'id');
return id == null ? _missingParamPage() : DoctorChatPage(id: id);
case 'doctorReportDetail':
final id = _requiredParam(params, 'id');
return id == null ? _missingParamPage() : DoctorReportDetailPage(id: id);
case 'doctorFollowUpEdit':
final id = _requiredParam(params, 'id');
return id == null ? _missingParamPage() : DoctorFollowUpEditPage(id: id);
case 'devices':
return const DeviceManagementPage();
case 'deviceScan':
return const DeviceScanPage();
case 'healthArchive':
return const HealthArchivePage();
case 'followups':
return const FollowUpListPage();
case 'settings':
return const SettingsPage();
case 'notificationPrefs':
return const NotificationPrefsPage();
case 'notifications':
return const NotificationCenterPage();
case 'conversationHistory':
return const ConversationHistoryPage();
case 'staticText':
final type = _requiredParam(params, 'type');
return type == null ? _missingParamPage() : StaticTextPage(type: type);
case 'dietDetail':
final id = _requiredParam(params, 'id');
return id == null ? _missingParamPage() : DietRecordDetailPage(id: id);
default:
return const LoginPage();
}
}
// ── 医生端次级页面 Stubs逐步实现──