feat: 三端抽屉重构 + 配色系统更新 + 后台管理页精调 + 键盘抬起组件

## 抽屉重构
- admin_drawer / doctor_drawer / health_drawer 三端抽屉全部重做
- drawer_shell 增强

## 配色系统
- app_colors / app_module_visuals / app_theme 更新
- app.dart 启动流程调整

## 后台管理页
- admin_doctors_page 大幅重构(+251)
- admin_home / doctor_dashboard / doctor_reports / doctor_home / doctor_followups / doctor_settings 精调

## 患者端
- home_page / chat_messages_view / medication_list / notification_center / remaining_pages / exercise_plan / device / diet / consultation 微调

## 新增
- keyboard_lift.dart: 键盘抬起处理组件
- AGENTS.md: agent 指引文档

## 其他
- api_client IP 适配
- app_future_view 增强
- data_providers 调整
- secondary_page_visuals_test 更新
This commit is contained in:
MingNian
2026-07-19 19:11:30 +08:00
parent ae94ced2d5
commit 0d4fd88ce7
35 changed files with 1022 additions and 644 deletions

View File

@@ -425,9 +425,9 @@ class _DeviceManagementPageState extends ConsumerState<DeviceManagementPage>
onPressed: () => pushRoute(ref, 'deviceScan'),
style: IconButton.styleFrom(
backgroundColor: Colors.white,
foregroundColor: AppColors.primaryDark,
foregroundColor: AppColors.device,
fixedSize: const Size(40, 40),
side: const BorderSide(color: AppColors.primaryLight),
side: const BorderSide(color: AppColors.deviceBorder),
shape: const CircleBorder(),
),
icon: const Icon(Icons.add_rounded),
@@ -604,10 +604,10 @@ class _DevicesHeader extends StatelessWidget {
width: 50,
height: 50,
decoration: BoxDecoration(
color: _deviceVisual.lightColor,
color: AppColors.device,
borderRadius: AppRadius.smBorder,
),
child: Icon(_deviceVisual.icon, color: AppColors.device, size: 27),
child: Icon(_deviceVisual.icon, color: Colors.white, size: 27),
),
const SizedBox(width: 14),
Expanded(
@@ -671,14 +671,10 @@ class _DeviceSection extends StatelessWidget {
width: 34,
height: 34,
decoration: BoxDecoration(
color: _deviceVisual.lightColor,
color: AppColors.device,
borderRadius: AppRadius.smBorder,
),
child: Icon(
type.icon,
size: 19,
color: _deviceVisual.color,
),
child: Icon(type.icon, size: 19, color: Colors.white),
),
const SizedBox(width: 10),
Text(
@@ -733,7 +729,6 @@ class _BoundDeviceTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
final accent = connected ? AppColors.successText : AppColors.textHint;
final availability = deviceSyncAvailabilityLabel(device.type);
return AnimatedContainer(
duration: const Duration(milliseconds: 180),
@@ -750,10 +745,10 @@ class _BoundDeviceTile extends StatelessWidget {
width: 42,
height: 42,
decoration: BoxDecoration(
color: connected ? AppColors.successLight : AppColors.deviceLight,
color: AppColors.device,
borderRadius: AppRadius.smBorder,
),
child: Icon(device.type.icon, color: accent, size: 22),
child: Icon(device.type.icon, color: Colors.white, size: 22),
),
const SizedBox(width: 12),
Expanded(