23 KiB
23 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.99.40] - 2026-04-24
✨ 优化 — 身体分析页面5项需求实现 + 溢出修复
修复: Tab页面底部溢出 1084px
- 根因: 3个Tab使用
Column布局,内容超出SizedBox固定高度(900-1200px) - 修复: Tab内部改用
SingleChildScrollView支持滚动 - 新增: 每个Tab底部增加 👈 左右滑动切换提示
修复: Tab滑到底后无法滑回顶部
- 根因: 外层
ListView与内层SingleChildScrollView嵌套滚动冲突,向上滑动时外层抢占手势 - 修复: 分析结果展示时改用
Column+Expanded布局,PageView独立占据剩余空间,彻底消除嵌套滚动 - 优化: 结果页面顶部改为紧凑信息栏(性别/年龄/身高/体重)+ 🔄重新分析按钮,节省空间
新增: 趣味统计 - 各星球体重
- 功能: 展示用户在9个天体(水星/金星/地球/火星/木星/土星/天王星/海王星/月球)上的体重
- 数据: 基于各行星相对地球的平均重力加速度计算
- UI: 使用 Wrap 布局的 Chip 样式展示,地球高亮标记
新增: 有氧运动(燃脂)心率计算卡片
- 功能: 在核心指标Tab中BMI卡片后新增 ❤️🔥 燃脂最佳心率卡片
- 展示: 渐变背景大字显示最佳心率区间 xx-xx bpm,标注为最大心率的60%~70%
优化: 摄入需求/蛋白质根据BMI智能显示
- 逻辑: 偏瘦(BMI<18.5)隐藏减脂选项,肥胖(BMI≥28)隐藏增肌选项
- 影响: GoalCaloriesCard 和 ProteinCard 均已适配
新增: Tab滑动边缘发光动画
- 效果: 在第1个Tab继续左滑时,左边缘显示主题色渐变发光;最后1个Tab右滑同理
- 实现: NotificationListener监听OverscrollNotification,Stack+Positioned叠加边缘发光层
需求1: 修复按钮状态不实时更新
- 问题: 输入身高/年龄/体重后,"开始分析"按钮仍为禁用状态,需额外操作才能激活
- 根因:
onChanged仅在_hasResult == true时调用setState(),首次输入不触发重建 - 修复:
onChanged始终调用setState(),按钮状态实时响应输入
需求2: AppBar 增加隐私与算法说明
- 在导航栏右侧增加 ℹ️ 图标按钮
- 点击弹出
CupertinoAlertDialog,包含:- 🔒 隐私声明:所有数据仅在本地计算,不会联网上传
- 📐 算法来源:Harris-Benedict / Mifflin-St Jeor / US Navy / Karvonen 等
- ⚠️ 免责声明:仅供学习参考,禁止医用、禁止商用
需求3: 参考文献页面增加身体分析数据来源
- 新增 7 条 🧬 身体分析分类参考文献:
- Harris-Benedict BMR 公式 (Wikipedia)
- Mifflin-St Jeor BMR 公式 (PubMed)
- US Navy 体脂率估算法 (US Navy)
- Karvonen 心率区间公式 (Wikipedia)
- WHO BMI 分类与肥胖标准 (WHO)
- 中国居民膳食营养素参考摄入量 2023版 (中国营养学会)
- Mosteller 体表面积计算公式 (Wikipedia)
需求4: 基础信息卡片增加保存/隐藏按钮
- 💾 保存按钮:将填写信息写入 SharedPreferences,下次打开自动填充
- 👁️ 隐藏/显示按钮:切换输入区域显示状态,数据保留仅隐藏表单
需求5: 核心指标/科学指数/趣味统计支持左右滑动
- 将 Tab 切换改为
PageView实现,支持手势左右滑动 GlassSegmentedControl与PageView双向联动
涉及文件
body_analysis_page.dart— 全部5项需求实现references_page.dart— 新增7条身体分析参考文献
[0.99.39] - 2026-04-24
🐛 修复 — 排敏助手页面一直转圈 + 闪退 + Obx异常
问题1: 页面一直转圈(无法加载)
- 根因:
GetBuilder不监听RxBool isLoading变化,_loadData()完成后isLoading.value = false无法触发重建 - 修复:
AntiController._loadData()完成后调用update();anti_main_page中isLoading判断改用Obx局部包裹
问题2: Obx "improper use" 异常
- 根因: 将整个页面用
Obx包裹,但部分页面未直接访问.obs变量,GetX 无法追踪 - 修复: 所有页面改回
GetBuilder+ controller 中所有数据修改方法添加update()调用
问题3: 点击"开始记录"闪退
- 根因: 只有
antiMain路由有binding注册AntiController,其他6个子路由缺少 binding,导航时Get.find<AntiController>()找不到 controller - 修复: 所有 anti 子路由添加
binding: BindingsBuilder(() => Get.lazyPut(() => AntiController(), fenix: true))
问题4: Opacity 断言错误
- 根因:
Curves.easeOutBack回弹曲线值超过1.0,Opacity要求值在 [0.0, 1.0] 范围 - 修复:
opacity: value.clamp(0.0, 1.0)
涉及文件
anti_controller.dart— 所有修改数据方法添加update()调用anti_main_page.dart—GetBuilder+ 局部Obx包裹isLoadinganti_detail/add/heatmap/rating/tags/list_page.dart— 改回GetBuilderapp_routes.dart— 所有 anti 路由添加 binding + fenix: trueanti_empty_state.dart— opacity clamp 修复
[0.99.38] - 2026-04-24
🧹 清理 — 排敏模块(anti) 135项分析警告清零
修复Warnings (5项)
_isSubmitting未使用 → 添加到保存按钮防重复提交逻辑dead_code/dead_null_aware_expression→as String改为as String?_hoveredIndex未使用 → 移除isHalfFilled未使用 → 移除
修复Deprecated (119项)
withOpacity()全部替换为withValues(alpha:)(14个文件)
修复Info (11项)
use_build_context_synchronously→ 添加mounted检查 +// ignore注释prefer_final_fields→_selectedTags改为finalunnecessary_import→ 移除冗余cupertino.dart导入strict_top_level_inference→var改为具体类型AllergenElimination
[0.99.37] - 2026-04-24
✨ 新增 + 🐛 修复 — 身体分析新增9项指标 + Conicity Index单位修复
新增指标
- 🔬 科学指数Tab +4项:
- 🏋️ FFMI 无脂肪质量指数 + 标准化FFMI + 等级判定
- 📐 Ponderal 体重指数(Rohrer指数,BMI改进版)
- ⚡ 基础代谢效率 (BMR/kg)
- 🔔 锥度指数 (Conicity Index,需腰围)
- 🎮 趣味统计Tab +5项:
- 🫁 一生呼吸总次数
- 👁️ 一生眨眼总次数
- 🧴 一生皮肤细胞脱落量
- 🍽️ 一生消耗食物总重量
- 🚶 一生行走距离估算
🐛 Bug修复
- 修复 Conicity Index 计算公式中 waist 单位错误(cm→m),原结果偏大约1000倍
验证
- 新增
scripts/test_body_analysis.dart算法验证脚本(59项测试全部通过) - 运行:
dart run scripts/test_body_analysis.dart
[0.99.36] - 2026-04-24
♻️ 重构 — 身体分析模块文件拆分
变更说明
将 body_analysis_page.dart(1929行)拆分为6个文件,每个文件不超过800行代码,统一放入 body_analysis/ 目录。
新目录结构
body_analysis/
├── body_analysis_page.dart (主页面 ~260行)
├── body_analysis_calculator.dart (计算引擎 + 数据模型 ~310行)
├── body_analysis_cards.dart (通用卡片组件 ~460行)
├── core_tab.dart (核心指标Tab ~80行)
├── science_tab.dart (科学指数Tab ~160行)
└── fun_tab.dart (趣味统计Tab ~200行)
拆分策略
body_analysis_calculator.dart: Gender/ActivityLevel枚举 + HeartRateZone/WaterSchedule数据模型 + BodyAnalysisCalculator计算类(25+项指标)body_analysis_cards.dart: MetricCard/InfoButton/WaterCard/HeartRateZonesCard/GoalCaloriesCard/ProteinCard/BodyFatCard/IdealWeightCardcore_tab.dart: 核心指标Tab(喝水/BMR/TDEE/BMI/体脂率/心率/摄入/蛋白质)science_tab.dart: 科学指数Tab(骨骼/血液/LBM/理想体重/代谢年龄/腰围比/骨架/体表面积/睡眠)fun_tab.dart: 趣味统计Tab(心跳/呼吸/眨眼/泵血/空气/唾液/DNA/原子/头发/指甲/一生心跳)body_analysis_page.dart: 主页面框架(输入表单 + Tab切换)
路由更新
- import路径从
health/body_analysis_page.dart→health/body_analysis/body_analysis_page.dart
[0.99.35] - 2026-04-24
✨ 新功能 — 身体分析工具(25+项科学指标与趣味统计)
功能概述
新增 身体分析 工具,基于身高/年龄/性别/体重分析25+项科学指标和趣味统计,支持选填参数解锁更多精确指标。
核心功能
- 🧬 基础输入:性别选择、年龄、身高、体重
- 📐 选填参数:腰围、臀围、颈围、手腕围、活动等级、已知体脂率(展开式,解锁更多指标)
- 🏥 核心指标Tab(8项):
- 💧 每日喝水量 + 8时段喝水时间表
- 🔥 BMR 基础代谢率(Mifflin-St Jeor公式)
- 🏃 TDEE 每日总能量消耗(5级活动系数)
- 📊 BMI 身体质量指数 + 等级判定
- 📐 体脂率(BFR) + 等级判定(支持BMI估算/Navy精确法/手动输入)
- ❤️ 燃脂心率区间(5个区间:热身/燃脂/有氧/无氧/极限)
- 🎯 减脂/增肌/维持 摄入需求
- 🥩 蛋白质需求量
- 🔬 科学指数Tab(10项):
- 🦴 骨骼重量估算 | 🩸 血液总量估算 | 💪 去脂体重(LBM)
- 🎯 理想体重(4种公式:Devine/Robinson/Miller/Hamwi)
- 🧠 代谢年龄 | 🫁 人体表面积 | 💤 推荐睡眠时长
- 📏 腰围身高比(需腰围)| 📐 腰臀比WHR(需腰围+臀围)| 🏷️ 骨架类型(需手腕围)
- 🎮 趣味统计Tab(11项):
- 🫀 今日心跳次数 | 🫁 今日呼吸次数 | 👁️ 今日眨眼次数
- 🩸 今日心脏泵血量 | 🌬️ 今日呼吸空气体积 | 💧 今日唾液分泌量
- 🧬 体内DNA总长度 | 🌍 身体原子数量
- 💇 一生头发生长总长度 | 💅 一生指甲生长总长度 | ⏱️ 一生心跳总数
交互设计
- 每个指标卡片右上角 ❗ 感叹号按钮,点击弹出该指标的科学介绍和公式说明
- GlassSegmentedControl 三Tab切换
- 选填参数折叠/展开,提示"填写越多,分析越精确"
- 活动等级5级选择器(久坐/轻度/中度/高度/极高)
- 统一毛玻璃卡片风格,iOS 26 Liquid Glass设计
路由配置
/tools/body-analysis— 身体分析页面入口- 注册到
health分类,瀑布流优先级1,标记NEW
[0.99.34] - 2026-04-23
✨ 新功能 — Anti 敏宝排敏助手(完整实现)
功能概述
新增 Anti 敏宝排敏助手 工具,专为敏宝家庭设计的辅食过敏原追踪和排敏管理工具。
核心功能
- 🛡️ 排敏项目管理:创建、编辑、暂停/恢复、删除排敏项目
- 📝 每日记录系统:记录身体状态(正常/轻微/明显)、喂养详情、症状描述
- 📊 热力图可视化:GitHub风格的热力图展示身体状态变化趋势
- ⭐ 评分与结论:5星评分 + 排敏结论(成功/需延长观察/过敏确认)
- 🏷️ 标签系统:支持自定义标签分类(预设5个系统标签)
- 📋 数据统计:总数、成功数、失败数、成功率等统计指标
- 🔍 搜索与筛选:按状态筛选排敏项目,支持关键词搜索
技术架构
-
数据模型层(4个文件):
allergen_elimination_model.dart— 排敏项目核心实体(含状态机、评分系统)daily_record_model.dart— 每日记录(含 BodyStatus 枚举用于热力图颜色编码)feeding_record_model.dart— 喂养记录(时间、量、制作方法)allergen_tag_model.dart— 标签数据模型
-
业务逻辑层:
anti_controller.dart— GetX 状态管理控制器,完整的 CRUD 操作 + SharedPreferences 持久化
-
UI 组件库(8个可复用组件):
anti_utils.dart— 工具类(日期格式化、颜色映射、文本转换)anti_status_badge.dart— 状态徽章组件anti_progress_card.dart— 进度卡片组件anti_daily_record_card.dart— 每日记录卡片anti_heatmap_widget.dart— 热力图可视化组件anti_tag_chip.dart— 标签芯片(支持选中动画)anti_star_rating.dart— 星级评分选择器anti_empty_state.dart— 空状态占位组件
-
页面层(7个页面):
anti_main_page.dart— 主页面(Today视图):卡片堆叠布局,当前进度+今日快捷操作+统计概览anti_add_page.dart— 新增页面:双模式(新建排敏项目 / 添加每日记录),表单验证anti_heatmap_page.dart— 热力图页面:90天范围热力图,点击查看详情anti_list_page.dart— 列表页面:搜索+状态筛选,卡片式列表anti_detail_page.dart— 详情页面:完整信息+进度条+时间线+操作菜单anti_rating_page.dart— 评分页面:星级评分+结论选择+备注anti_tags_page.dart— 标签管理:创建/删除自定义标签,滑动删除
设计规范
- ✅ iOS 风格 UI(Cupertino 组件为主)
- ✅ 响应式布局(支持手机/平板/桌面)
- ✅ 统一设计令牌(使用主题色、圆角变量)
- ✅ 动画效果(入场动画、状态切换过渡)
- ✅ Emoji 图标增强亲和力
- ✅ 无障碍支持(语义化标签)
路由配置
/tools/anti— 主页入口/tools/anti/add— 新增(支持参数传递 eliminationId)/tools/anti/heatmap— 热力图/tools/anti/list— 排敏列表/tools/anti/detail/:id— 详情(参数:eliminationId)/tools/anti/rating/:id— 评分(参数:eliminationId)/tools/anti/tags— 标签管理
工具注册
- 在
tool_item_model.dart注册为 "Anti 敏宝排敏助手" - 图标:🛡️ | 分类:health | 优先级:12 | 徽章:NEW
数据持久化
- 使用
SharedPreferences本地存储 - 自动保存所有 CRUD 操作
- 支持数据清除和重置(调试用)
文件清单(共20个新文件)
lib/src/pages/tools/anti/
├── models/
│ ├── allergen_elimination_model.dart (核心实体)
│ ├── daily_record_model.dart (每日记录)
│ ├── feeding_record_model.dart (喂养记录)
│ └── allergen_tag_model.dart (标签)
├── controllers/
│ └── anti_controller.dart (业务逻辑)
├── widgets/
│ ├── anti_utils.dart (工具类)
│ ├── anti_status_badge.dart (状态徽章)
│ ├── anti_progress_card.dart (进度卡片)
│ ├── anti_daily_record_card.dart (记录卡片)
│ ├── anti_heatmap_widget.dart (热力图)
│ ├── anti_tag_chip.dart (标签芯片)
│ ├── anti_star_rating.dart (星级评分)
│ └── anti_empty_state.dart (空状态)
├── anti_main_page.dart (主页)
├── anti_add_page.dart (新增)
├── anti_heatmap_page.dart (热力图)
├── anti_list_page.dart (列表)
├── anti_detail_page.dart (详情)
├── anti_rating_page.dart (评分)
└── anti_tags_page.dart (标签管理)
修改的现有文件:
├── lib/src/models/app/tool_item_model.dart (+工具注册)
└── lib/src/config/app_routes.dart (+路由配置)
使用指南
- 从工具中心找到 "🛡️ Anti 敏宝排敏助手" 并进入
- 点击 "+ 新增排敏项目" 创建第一个排敏任务
- 填写宝宝信息、过敏原名称、计划天数
- 每日记录身体状态(正常/轻微/明显)
- 完成后进行评分和总结
- 通过热力图回顾变化趋势
后续优化方向
- 数据导出功能(PDF报告生成)
- 多宝宝支持(切换不同宝宝的记录)
- 提醒通知(定时提醒记录)
- 云端同步(多设备数据备份)
- 医生分享模式(生成专业报告)
[0.99.33] - 2026-04-23
🐛 修复 — 鸿蒙端平台识别失败导致构建信息显示"未知"
问题描述
鸿蒙设备上 app_info_page 的构建信息卡片显示"未知",无法正确识别为 HarmonyOS 平台
根因分析
- 单一检测机制不可靠:原
_checkIsHarmonyOS()仅依赖(Platform as dynamic).isOhos == true动态检测 - 动态检测在某些鸿蒙版本/Flutter版本可能失败:
isOhos属性可能不存在或行为不一致 - 缺少兜底机制:未使用
defaultTargetPlatform和操作系统名称特征作为备用检测 - 项目内已有先例:scanner_page.dart 已使用双重检测
isHarmonyOS || defaultTargetPlatform == TargetPlatform.ohos
修复内容
- 🔧 重构鸿蒙检测逻辑(platform_utils.dart):
- ✅ 方案1: 检查
defaultTargetPlatform == TargetPlatform.ohos(最稳定可靠) - ✅ 方案2: 动态检测
(Platform as dynamic).isOhos(兼容旧版) - ✅ 方案3: 通过
Platform.operatingSystem名称特征检测(兜底方案) - 💾 缓存检测结果避免重复计算
- ✅ 方案1: 检查
- 🔧 增强 app_info_page SDK 显示逻辑:
- 增加双重检测:
platform.isHarmonyOS || defaultTargetPlatform == TargetPlatform.ohos - 新增 Web 平台支持:显示 "Web SDK"
- 优化代码结构:复用 PlatformUtils 实例避免重复创建
- 增加双重检测:
技术细节
- 多重检测机制确保在各种鸿蒙设备/Flutter版本下都能正确识别
- 检测优先级:defaultTargetPlatform > isOhos动态检测 > OS名称特征
- 异常处理增强:单个方案失败不影响其他方案执行
修改文件
lib/src/utils/platform_utils.dart— 重构 _checkIsHarmonyOS() 方法,增加多重检测机制lib/src/pages/profile/info/app_info_page.dart— 增加鸿蒙双重检测 + Web平台支持
测试建议
- 在真机/模拟器上验证鸿蒙端是否正确显示 "Deveco API 23"
- 验证其他平台(iOS/Android/Web/桌面端)显示不受影响
- 可在调试模式下打印
PlatformUtils().operatingSystemName确认识别结果
[0.99.32] - 2026-04-22
🐛 修复 — 瀑布流标签卡片小方块不显示问题
问题描述
TagDiscoverCard(如"蒸""葱爆"等标签卡片)内类型标签小方块显示为空白
根因分析
- 类型标签 Container 被
Flexible包裹,在Row(mainAxisSize: MainAxisSize.min)中被压缩到零宽度 - padding 过小(horizontal: space1 ≈ 4px)导致文字几乎不可见
- typeLabel 文案:工艺 → 做法(与弹窗标题一致)
修复内容
- 🔧 移除
Flexible包裹:类型标签 Container 改为直接放置在 Row 中,不再被压缩 - 📏 增大 padding:horizontal 从
space1(4px) →6px - 🔤 文案统一:
typeLabel工艺类型返回值从"工艺"→"做法" - ✍️ 重写文件:消除可能的隐藏字符导致 linter 报错
修改文件
lib/src/widgets/discover/content/tag_discover_card.dart— 重写 build 方法,移除 Flexible、增大 paddinglib/src/models/feed/discover_model.dart— typeLabel 文案修正
[0.99.31] - 2026-04-22
✨ 新增 — 瀑布流卡片显示口味/工艺标签
变更描述
首页瀑布流菜品卡片底部新增口味和工艺标签展示(当API返回对应字段时)
实现内容
- 🏷️ 口味标签:👅 emoji + 口味文字,橙色胶囊样式
- 🍳 工艺标签:🍳 emoji + 工艺文字,主题色边框胶囊样式
- 📦 模型扩展:
DiscoverRecipe新增taste、cookingMethod可选字段,兼容旧数据 - ⚡ 按需渲染:仅当 taste/cookingMethod 非空时才展示标签行
修改文件
lib/src/models/feed/discover_model.dart— DiscoverRecipe 增加 taste/cookingMethod 字段lib/src/widgets/discover/content/recipe_discover_card.dart— 卡片新增_buildTasteAndMethodRow
[0.99.30] - 2026-04-22
✨ 新增 — 了解我们页面加入QQ群入口卡片
变更描述
了解我们页面 ICP 备案区域下方新增「加入QQ群」卡片,点击弹窗确认后跳转QQ群链接
实现内容
- 💬 QQ群入口卡片:ICP备案下方新增 section,展示群号 271129018,群名「闲言APP v4.1」
- 🔗 弹窗确认:点击后弹出 CupertinoAlertDialog,确认后通过 url_launcher 跳转外部QQ群链接
- 📋 复制群号:右侧复制按钮可一键复制群号到剪贴板
- 🎨 适配暗黑模式:卡片颜色、文字颜色均使用 DesignTokens 动态主题
修改文件
lib/src/pages/profile/info/learn_us_page.dart— 新增_buildQQGroupSection、_showQQGroupDialog方法lib/src/pages/profile/profile_home.dart— 移除之前误加的QQ群卡片代码
[0.99.29] - 2026-04-22
✨ 增强 — 扫码识别菜谱 + 相机权限管理完善
变更描述
扫码功能增强:识别CP/ID后通过API转换为APP内部菜品ID跳转详情页;相机权限管理完善
实现内容
- 🔍 扫码结果智能识别:截取URL中的CP编码和ID参数,通过
WhatToEatRepositoryAPI查询转换为APP内部菜品ID- 支持
https://eat.wktyl.com/api/kitchen/recipe_share.php?code=CP037130格式 - 支持
https://eat.wktyl.com/?id=28087格式 - 支持纯文本
CP037130格式 - 查询成功显示菜谱识别对话框,跳转菜品详情页
- 查询失败降级为普通扫码结果显示
- 支持
- 📷 相机权限弹窗引导:扫码前弹出相机用途说明,拒绝后显示各平台开启指引
- 🔒 权限管理页面增强:
- 新增相机权限项(📷),状态动态显示(已开启/已拒绝)
- 相机权限拒绝时显示红色标识,点击可跳转系统设置
- 权限说明弹窗更新:区分动态权限和基础权限
- 📄 隐私政策更新:设备权限调用新增相机权限说明
修改文件
lib/src/pages/home/scanner_page.dart— CP/ID通过API转换,权限弹窗引导lib/src/pages/profile/tools/permission_page.dart— 新增相机权限,动态状态显示lib/src/pages/profile/info/privacy_policy_page.dart— 新增相机权限说明
[0.99.28] - 2026-04-22
🔄 升级 — mobile_scanner 本地包升级至官方 v7.2.0 + 鸿蒙适配合并
变更描述
将本地 packages/mobile_scanner 从鸿蒙适配版 v7.1.4 升级为官方 v7.2.0,并保留鸿蒙端支持
合并内容
- 📦 基础:官方
mobile_scannerv7.2.0(新增 camera_lens_type、switch_camera_option、barcode_bytes 等) - 🔧 鸿蒙适配合并:
ohos/目录完整保留(鸿蒙原生 ets 实现)lib/src/method_channel/ohos_surface_producer_delegate.dart— 鸿蒙 Surface 代理lib/src/method_channel/surface_producer_delegate.dart— Surface 代理接口lib/src/method_channel/mobile_scanner_method_channel.dart— 添加TargetPlatform.ohos支持lib/src/method_channel/rotated_preview.dart— 鸿蒙旋转方向修复pubspec.yaml— 添加ohos平台声明
修改文件
packages/mobile_scanner/— 整体替换为官方 v7.2.0 + 鸿蒙适配合并版packages/本地已适配鸿蒙的库.md— 添加 mobile_scanner 适配记录