- 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 适配; 主页智能体栏间距优化
137 lines
5.1 KiB
Dart
137 lines
5.1 KiB
Dart
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(逐步实现)──
|