feat: 健康录入提醒 + 多指标异常 + 用药漏服 + UI 优化

后端
- NotificationPreference 增加健康录入提醒总开关和 5 子项(血压/心率/血糖/血氧/体重)
- EF 迁移 AddHealthRecordReminder
- 新增 GET/PUT /api/notification-prefs
- 新增 HealthRecordReminderService 每天 9 点/12 点扫描未录入用户推送提醒

前端
- 通知偏好对接真实后端 API
- 设置页新增「健康录入提醒」总开关+5 子项
- 通知中心右上角加齿轮跳设置页
- 今日健康卡片:4 项异常检测+多项合并;用药只显漏服并按时间窗口区分文案
- 侧边栏头像改圆形白底灰图标,去掉紫色品牌渐变
- 整体背景统一浅灰白 #F6F8FC,去掉浅紫渐变
- 设置页简化(去掉分组/彩色图标方块)
- 健康档案保存按钮移到右上角,TextButton 全局默认黑色
- API baseUrl 跟随网络环境
This commit is contained in:
MingNian
2026-06-24 22:11:21 +08:00
parent 7ff429e071
commit 53ce19e8c3
18 changed files with 2379 additions and 565 deletions

View File

@@ -727,9 +727,7 @@ class _ExercisePlanPageState extends ConsumerState<ExercisePlanPage> {
backgroundColor: AppTheme.primary,
child: const Icon(Icons.add),
),
body: Container(
decoration: const BoxDecoration(gradient: AppColors.bgGradient),
child: AppFutureView<List<Map<String, dynamic>>>(
body: AppFutureView<List<Map<String, dynamic>>>(
future: _future,
onRetry: _load,
errorTitle: '运动计划加载失败',
@@ -770,7 +768,7 @@ class _ExercisePlanPageState extends ConsumerState<ExercisePlanPage> {
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(AppTheme.rMd),
border: Border.all(color: const Color(0xFFE8ECF0)),
border: Border.all(color: const Color(0xFFCFD6E0), width: 1.2),
boxShadow: [AppTheme.shadowLight],
),
child: Row(
@@ -854,7 +852,6 @@ class _ExercisePlanPageState extends ConsumerState<ExercisePlanPage> {
);
},
),
),
);
}
}
@@ -1399,7 +1396,7 @@ class _HealthArchivePageState extends ConsumerState<HealthArchivePage> {
Widget build(BuildContext context) {
if (_loading) {
return Scaffold(
backgroundColor: Colors.white,
backgroundColor: const Color(0xFFF6F8FC),
appBar: AppBar(
backgroundColor: Colors.white,
elevation: 0,
@@ -1417,7 +1414,7 @@ class _HealthArchivePageState extends ConsumerState<HealthArchivePage> {
);
}
return Scaffold(
backgroundColor: Colors.white,
backgroundColor: const Color(0xFFF6F8FC),
appBar: AppBar(
backgroundColor: Colors.white,
elevation: 0,
@@ -1442,6 +1439,7 @@ class _HealthArchivePageState extends ConsumerState<HealthArchivePage> {
)
: TextButton(
onPressed: _save,
style: TextButton.styleFrom(foregroundColor: AppColors.textPrimary),
child: const Text('保存', style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600)),
),
],
@@ -1550,8 +1548,14 @@ class _Section extends StatelessWidget {
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(14),
border: Border.all(color: AppColors.border),
boxShadow: AppColors.cardShadowLight,
border: Border.all(color: const Color(0xFFD5DCE5)),
boxShadow: [
BoxShadow(
color: const Color(0xFF101828).withValues(alpha: 0.08),
blurRadius: 18,
offset: const Offset(0, 6),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,