Files
AI-Health/health_app/lib/widgets/service_package_card.dart
MingNian f6dd14be3b feat: 全面UI改造 — 报告/饮食/运动/用药/侧边栏/对话流/胶囊
- 报告模块:重写AI解读页,统一白色卡片+三栏布局(指标→解读→医生审核);加删除功能+后端删接口;VLM自动识别报告类型生成中文标题;去五颜六色
- 饮食分析:全面重设计,暖橙主题配色,图片自适应,餐次emoji选择器,去紫色
- 运动确认卡片:修复duration_minutes JSON类型转换,支持中文数字识别(三十分钟/半小时→30);主区域只显示运动名,字段行改为横向排列
- 流式输出:简化为最基础逐字追加,去buffer+Timer+淡入动画
- 欢迎卡片:每智能体独立渐变色(青/橙/蓝/紫/绿/粉),加卡片入场滑入+淡入动画(600ms)
- 确认卡片:头部去紫色背景改浅灰白,字段行去图标改纯信息横排,编辑框去双重边框
- 用药管理:胶囊改TabBar,添加按钮改右下FAB;打卡按钮改对号圆圈形式;药丸图标白底
- 侧边栏:加VIP服务/保险栏+图标,标题字体放大;服务包去查看更多+去VIP金色标签
- 胶囊:首页智能体胶囊白底深色字; side胶囊加阴影
- 对话流:reverse=false,今日健康出现在顶部; 对话页input bar匹配主页面样式
- 其他:个人资料去紫色+去多余入口;设置页白底图标;蓝牙页加返回按钮;报告管理改名
- 后端:加DELETE /api/reports/{id}; 修复manage_exercise数据类型转换;AI提示优化中文数字
2026-06-10 23:46:45 +08:00

254 lines
11 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 '../../core/app_theme.dart';
import '../../core/navigation_provider.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
/// 服务包数据模型
class ServicePackage {
final String id;
final String title;
final String subtitle;
final Color headerColor;
final List<ServiceItem> services;
final String targetAudience;
final List<DetailSection> detailSections;
const ServicePackage({
required this.id,
required this.title,
required this.subtitle,
required this.headerColor,
required this.services,
required this.targetAudience,
required this.detailSections,
});
}
class ServiceItem {
final IconData icon;
final String label;
const ServiceItem({required this.icon, required this.label});
}
class DetailSection {
final String title;
final String content;
const DetailSection({required this.title, required this.content});
}
/// 预定义服务包数据 —— 基于项目实际功能
final List<ServicePackage> servicePackages = [
ServicePackage(
id: 'vip_comprehensive',
title: '心血管健康管理服务包',
subtitle: 'VIP 产品权益',
headerColor: const Color(0xFF4A90D9),
services: [
ServiceItem(icon: Icons.phone_in_talk_outlined, label: '电话咨询'),
ServiceItem(icon: Icons.chat_bubble_outline, label: '在线咨询'),
ServiceItem(icon: Icons.calendar_month_outlined, label: '个性化随访'),
ServiceItem(icon: Icons.medication_outlined, label: '调药管理'),
ServiceItem(icon: Icons.monitor_heart_outlined, label: '风险监测'),
ServiceItem(icon: Icons.devices_outlined, label: '智能硬件'),
ServiceItem(icon: Icons.family_restroom_outlined, label: '亲情账号'),
ServiceItem(icon: Icons.verified_user_outlined, label: '健康保障'),
],
targetAudience:
'心血管疾病患者(如高血压、冠心病、心律失常等)\n'
'高危人群(如高血脂、糖尿病、肥胖、长期吸烟饮酒者)\n'
'术后康复人群(如心脏支架/搭桥术后、PCI术后患者',
detailSections: [
DetailSection(
title: '1、个性化康复管理',
content:
'设定动态化的危险因素管理目标,根据患者的住院数据(如基础疾病、高危因素、合并症、当前用药等),确定高危因素(如高脂血症、高血糖等),设定高危因子(如低密度脂蛋白等)的管控目标。基于药物不良反应,制定个性化管理及复查方案。',
),
DetailSection(
title: '2、家庭医生专业团队',
content:
'由心内科主诊医生团队联合康复管理团队共同参与患者管理,将疾病康复从院内延伸至院外。团队由专科医生、康复治疗师、健康管理师、营养师等多学科成员组成。',
),
DetailSection(
title: '3、全年不限次数在线咨询',
content:
'为患者提供全年不限次数的咨询服务,支持微信(如文字、图文、语音等)、电话咨询等方式。如检查报告解读、用药咨询、病情咨询、饮食咨询、心理咨询等。',
),
DetailSection(
title: '4、主动跟踪随访管理',
content:
'动态临床评估:动态评估疾病复发、出血、致死致残等风险,实时优化管理方案。\n'
'主动症状管理:全年主动跟踪患者临床症状,实现疾病恶化早发现、早处理。\n'
'精准药物管理:全程用药指导,严密监控药物副作用,及时处理药物不良反应,确保药物治疗效果。\n'
'生活方式干预:个性化指导患者合理膳食、运动康复、心理调节、戒烟限酒等。',
),
DetailSection(
title: '5、可穿戴智能设备',
content:
'配备可穿戴智能监测设备,患者居家测量后实时上传管理中心,医生和家属均可远程实时监测数据(血压和心率),记录数据变化趋势,智能预警,及时干预异常指标,降低不良事件发生率。',
),
DetailSection(
title: '6、亲情账号联动管理',
content:
'支持5名家属参与管理实时多端同步患者病情医生、患者、家属三方共享患者安心家属放心。',
),
DetailSection(
title: '7、健康档案与报告分析',
content:
'自动整合血压、心率、血糖、血氧、体重等健康数据,生成可视化健康趋势报告。\n'
'AI 智能分析健康数据变化,提前预警潜在风险,提供个性化健康建议。',
),
],
),
ServicePackage(
id: 'vip_premium',
title: '心力衰竭专项管理服务包',
subtitle: 'VIP 产品权益',
headerColor: const Color(0xFF2BA87E),
services: [
ServiceItem(icon: Icons.phone_in_talk_outlined, label: '电话咨询'),
ServiceItem(icon: Icons.chat_bubble_outline, label: '在线咨询'),
ServiceItem(icon: Icons.calendar_month_outlined, label: '个性化随访'),
ServiceItem(icon: Icons.medication_outlined, label: '调药管理'),
ServiceItem(icon: Icons.monitor_heart_outlined, label: '风险监测'),
ServiceItem(icon: Icons.devices_outlined, label: '智能硬件'),
ServiceItem(icon: Icons.family_restroom_outlined, label: '亲情账号'),
],
targetAudience:
'心力衰竭患者\n'
'心力衰竭高危人群(心肌梗死、瓣膜病、心肌病、高血压、代谢综合征等)',
detailSections: [
DetailSection(
title: '1、个性化康复管理',
content:
'设定动态化的危险因素管理目标,根据患者的住院数据(如基础疾病、高危因素、合并症、当前用药等),确定高危因素管控目标。基于药物不良反应,制定个性化管理及复查方案。',
),
DetailSection(
title: '2、家庭医生专业团队',
content:
'由心内科主诊医生团队联合哈瑞特医疗院外康复管理团队共同参与患者管理,将疾病康复从院内延伸至院外,哈瑞特医疗康复管理团队由专科医生、康复治疗师、健康管理师、营养师等多学科成员组成。',
),
DetailSection(
title: '3、全年不限次数在线咨询',
content:
'为患者提供全年不限次数的咨询服务,支持微信(如文字、图文、语音等)、电话咨询(400-1666199),如检查报告解读、用药咨询、病情咨询、饮食咨询、心理咨询等。',
),
DetailSection(
title: '4、主动跟踪随访管理',
content:
'动态临床评估:动态评估疾病复发、出血、致死致残等风险,实时优化管理方案。\n'
'主动症状管理:全年主动跟踪患者临床症状,实现疾病恶化早发现、早处理。\n'
'精准药物管理:全程用药指导,严密监控药物副作用,及时处理药物不良反应,确保药物治疗效果。\n'
'生活方式干预:个性化指导患者合理膳食、运动康复、心理调节、戒烟限酒等。',
),
DetailSection(
title: '5、可穿戴智能设备',
content:
'配备可穿戴智能监测设备,患者居家测量后实时上传管理中心,医生和家属均可远程实时监测数据(血压和心率),记录数据变化趋势,智能预警,及时干预异常指标,降低不良事件发生率。',
),
DetailSection(
title: '6、亲情账号联动管理',
content:
'支持5名家属参与管理实时多端同步患者病情医生、患者、家属三方共享患者安心家属放心。',
),
],
),
];
/// 服务包卡片
class ServicePackageCard extends ConsumerWidget {
final bool compact;
const ServicePackageCard({super.key, this.compact = false});
@override
Widget build(BuildContext context, WidgetRef ref) {
final package = servicePackages.first;
// 构建服务图标网格
final services = package.services.take(8).toList();
final serviceRows = <Widget>[];
for (var i = 0; i < services.length; i += 4) {
final rowItems = services.skip(i).take(4).toList();
serviceRows.add(Padding(
padding: EdgeInsets.only(top: i > 0 ? 12 : 0),
child: Row(
children: rowItems.map((item) {
return Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 40,
height: 40,
decoration: const BoxDecoration(
color: Color(0xFFFFF8EE),
shape: BoxShape.circle,
),
child: Icon(item.icon, size: 23, color: const Color(0xFFF5A623)),
),
const SizedBox(height: 4),
Text(item.label,
style: const TextStyle(fontSize: 14, color: AppTheme.textSub),
textAlign: TextAlign.center,
),
],
),
);
}).toList(),
),
));
}
Widget card = Material(
color: Colors.transparent,
child: InkWell(
onTap: () => pushRoute(ref, 'servicePackageDetail', params: {'id': package.id}),
borderRadius: BorderRadius.circular(16),
child: Padding(
padding: const EdgeInsets.fromLTRB(18, 16, 18, 14),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// 标题行 + 详情入口
Row(children: [
Text(package.title, style: const TextStyle(fontSize: 19, fontWeight: FontWeight.w600, color: AppTheme.text)),
const Spacer(),
GestureDetector(
onTap: () => pushRoute(ref, 'servicePackageDetail', params: {'id': package.id}),
child: Row(mainAxisSize: MainAxisSize.min, children: [
Text('详情', style: TextStyle(fontSize: 16, color: AppTheme.textSub)),
const SizedBox(width: 2),
Icon(Icons.chevron_right, size: 21, color: AppTheme.textHint),
]),
),
]),
const SizedBox(height: 12),
// 服务图标网格
...serviceRows,
],
),
),
),
);
if (compact) return card;
return Container(
margin: const EdgeInsets.symmetric(horizontal: 24),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(8),
blurRadius: 12,
offset: const Offset(0, 4),
),
],
),
child: card,
);
}
}