feat: 健康仪表盘配色调整 + 登录页品牌升级 + iOS 配置 + 隐私文案修订 + 文档清理

## UI 配色
- 健康仪表盘: 背景从蓝紫粉三色渐变改为 #4FACFE 纯色蓝, 白字清晰不抢眼
- app_colors / app_design_tokens / app_theme: 配色体系微调
- 多个 widget 和页面跟随配色更新(health_drawer/admin_drawer/doctor_drawer/enterprise_widgets 等)

## 登录页品牌升级
- 新增品牌素材: drawer_background_v2 / login_background_v2 / health_login_character_transparent
- login_page 重构, 接入新品牌视觉
- app.dart 启动流程调整

## iOS / Android 配置
- Info.plist: 权限描述调整
- AppIcon / LaunchImage: 资源更新
- AndroidManifest: 权限微调

## 隐私文案修订
- privacy.html: 蓝牙设备描述调整为"标准蓝牙血压服务", 移除未上线设备类型表述
- terms.html: 移除"在线医生咨询"相关条款, 服务范围收窄

## 通知中心
- notification_center_page: 重构通知项布局

## 其他
- 删除已完成的计划/spec 文档(ui-system-first-pass / apple-sign-in / secondary-page-color-refresh / notification-preferences-design / ui-design-system)
- 新增 native_navigation_test
- 新增 HANDOFF 交接文档
- home_message_order_test 更新
- .gitignore 调整
This commit is contained in:
MingNian
2026-07-16 22:30:23 +08:00
parent 528859686f
commit 6e5d3e64cd
44 changed files with 624 additions and 1234 deletions

View File

@@ -147,7 +147,7 @@ class _DietRecordListPageState extends ConsumerState<DietRecordListPage> {
: '${_selectedDate.month}${_selectedDate.day}日饮食',
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
),
@@ -242,7 +242,7 @@ class _DietRecordListPageState extends ConsumerState<DietRecordListPage> {
'${d.day}',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: isSel ? Colors.white : AppColors.textPrimary,
),
),
@@ -441,7 +441,7 @@ class _DietDaySummary extends StatelessWidget {
'${date.month}${date.day}',
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: AppColors.textPrimary,
),
),
@@ -556,7 +556,7 @@ class _DietTrendPanel extends StatelessWidget {
'热量趋势',
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
),
@@ -803,7 +803,7 @@ class _DietRecordDetailPageState extends ConsumerState<DietRecordDetailPage> {
mealNames[d['mealType']?.toString()] ?? '饮食记录',
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
),
@@ -1222,7 +1222,7 @@ class _ExercisePlanOverviewCard extends StatelessWidget {
'$done/$total',
style: TextStyle(
fontSize: 13,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: _ExercisePlanPageState._exerciseVisual.color,
),
),
@@ -1375,7 +1375,7 @@ class _ExerciseTodayInlineTask extends StatelessWidget {
!hasItem || isRestDay ? '今日无' : (isCompleted ? '撤销' : '打卡'),
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
),
),
),
@@ -1439,7 +1439,7 @@ class _ExerciseCheckInSummary extends StatelessWidget {
'${(progress * 100).round()}%',
style: TextStyle(
fontSize: 22,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: _ExercisePlanPageState._exerciseVisual.color,
),
),
@@ -1531,7 +1531,7 @@ class _ExerciseSummaryStat extends StatelessWidget {
overflow: TextOverflow.ellipsis,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
),
@@ -1767,7 +1767,7 @@ class _ExerciseHeroCard extends StatelessWidget {
style: const TextStyle(
color: AppColors.textPrimary,
fontSize: 20,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
),
),
const SizedBox(height: 4),
@@ -1896,7 +1896,7 @@ class _TodayExerciseCard extends StatelessWidget {
overflow: TextOverflow.ellipsis,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
),
@@ -1943,7 +1943,7 @@ class _TodayExerciseCard extends StatelessWidget {
isRestDay ? '休息' : (isDone ? '撤销' : '打卡'),
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
),
),
),
@@ -2062,7 +2062,7 @@ class _ExerciseDayTile extends StatelessWidget {
!isToday
? '只读'
: (isRestDay ? '休息' : (isCompleted ? '撤销' : '打卡')),
style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w800),
style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w600),
),
),
),
@@ -3091,7 +3091,7 @@ class _ArchiveSummary extends StatelessWidget {
'$completion%',
style: const TextStyle(
fontSize: 13,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
),
),
],
@@ -3166,7 +3166,7 @@ class _Section extends StatelessWidget {
title,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
),
@@ -4375,7 +4375,7 @@ class StaticTextPage extends ConsumerWidget {
### 一、我们收集的信息
为向您提供健康管理、AI 健康咨询、报告解读、饮食识别、用药管理、运动计划、在线医生咨询和蓝牙设备同步等功能,我们会根据您使用的具体功能收集以下信息:
为向您提供健康管理、AI 健康咨询、报告解读、饮食识别、用药管理、运动计划和蓝牙设备同步等功能,我们会根据您使用的具体功能收集以下信息:
1. 账号与身份信息
- 手机号码:用于注册、登录、身份识别和账号安全验证。
@@ -4397,7 +4397,7 @@ class StaticTextPage extends ConsumerWidget {
- 未经您主动选择或确认,我们不会读取您的相册其他内容,也不会持续访问您的相机。
4. 蓝牙设备信息
- 当您使用蓝牙设备功能时,我们会扫描和连接附近支持的健康设备。目前代码中已实现血压计数据同步,设备模型中预留了血糖仪、体重秤、血氧仪类型,但当前实际支持的数据解析以血压计为主
- 当您使用蓝牙设备功能时,我们会扫描和连接附近支持的健康设备。目前实际支持以采用标准蓝牙血压服务的血压计为主;其他设备类型将在功能正式开放后另行说明
- 我们会在本地保存已绑定设备的设备标识、设备名称、设备类型、服务 UUID、最近同步时间以及用于避免重复同步的短期记录指纹。
- 通过血压计同步时,我们会读取并记录收缩压、舒张压、脉搏、测量时间等数据。
@@ -4522,7 +4522,7 @@ class StaticTextPage extends ConsumerWidget {
### 一、服务内容
小脉健康为用户提供健康数据记录、健康档案管理、用药管理、饮食识别、运动计划、健康日历、检查报告管理、AI 健康解释、在线医生咨询、随访和蓝牙健康设备同步等功能。具体服务内容会根据产品版本、实际开通情况、监管要求和运营安排进行调整。
小脉健康为用户提供健康数据记录、健康档案管理、用药管理、饮食识别、运动计划、健康日历、检查报告管理、AI 健康解释和蓝牙健康设备同步等功能。具体服务内容会根据产品版本、实际开通情况、监管要求和运营安排进行调整。
本应用当前可能包含以下服务:
@@ -4532,7 +4532,6 @@ class StaticTextPage extends ConsumerWidget {
- 饮食识别:上传或拍摄饮食图片,识别食物种类、估算份量和热量。
- AI 健康咨询根据您输入的文字、图片、PDF 或健康档案,提供健康解释和管理建议。
- 用药、运动和日历提醒:帮助您记录计划、查看进度和接收站内提醒。
- 在线医生咨询:在开通范围内与医生或相关服务人员进行消息沟通。
### 二、账号注册与使用
@@ -4551,7 +4550,6 @@ class StaticTextPage extends ConsumerWidget {
- 检查报告解读仅是对报告文字、指标或图片内容的辅助说明,不能替代医生结合病史、体格检查、影像资料和线下检查作出的诊断。
- 饮食识别、热量估算、运动建议和健康评分可能存在误差,仅作为参考。
- 用药相关内容不应替代医生、药师或说明书建议。请勿根据 App 内容自行开始、停止、更换或调整药物。
- 医生咨询、随访和报告审核等服务,应结合线下诊疗意见综合判断。
如您出现胸痛、胸闷憋气、呼吸困难、意识异常、晕厥、言语不清、一侧肢体无力、严重头痛、严重过敏、血压或血糖明显异常等紧急情况,请立即拨打急救电话或前往医疗机构就诊,不应等待或依赖本应用回复。
@@ -4684,7 +4682,7 @@ class StaticTextPage extends ConsumerWidget {
style: const TextStyle(
fontSize: 19,
color: AppColors.textPrimary,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
),
),
centerTitle: true,
@@ -4709,7 +4707,7 @@ class StaticTextPage extends ConsumerWidget {
h1Padding: const EdgeInsets.only(bottom: 18),
h1: const TextStyle(
fontSize: 24,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: AppColors.textPrimary,
height: 1.35,
letterSpacing: 0,
@@ -4717,7 +4715,7 @@ class StaticTextPage extends ConsumerWidget {
h2Padding: const EdgeInsets.only(top: 18, bottom: 8),
h2: const TextStyle(
fontSize: 19,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: AppColors.textPrimary,
height: 1.45,
letterSpacing: 0,
@@ -4725,7 +4723,7 @@ class StaticTextPage extends ConsumerWidget {
h3Padding: const EdgeInsets.only(top: 16, bottom: 6),
h3: const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
height: 1.45,
letterSpacing: 0,