13 KiB
13 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.99.42] - 2026-04-25
✨ 新增 — 导出功能增强(4项改进)
新增: 用户自选保存路径
- 变更: 导出文件时弹出系统文件选择器,用户自行选择保存位置
- 实现: 使用
FilePicker.saveFile()替代静默写入 Download 目录 - 影响: DOCX/PDF/自定义导出 均已支持路径选择
- 文件:
lib/src/widgets/recipe_detail/interaction/recipe_export_button.dart
新增: 系统分享功能
- 变更: 导出成功后弹出对话框,支持「📤 分享给朋友」按钮
- 实现: 使用
Share.shareXFiles()调用系统分享接口 - 支持格式: PDF、DOCX 均可分享至微信/邮件/其他应用
- 文件:
lib/src/widgets/recipe_detail/interaction/recipe_export_button.dart
修复: PDF中文乱码(??? 问题)
- 问题: PDF使用 Helvetica + WinAnsiEncoding,不支持中文字符 → 全部显示为 ???
- 根因:
docs_gee/pdf_generator.dart仅支持PDF Base 14字体(Helvetica/Times/Courier),无CJK支持 - 修复:
- 扩展
PdfGenerator构造函数,新增embeddedFontBytes/embeddedBoldFontBytes参数 - 当传入TTF/OTF字体时,自动创建 CIDFont Type0 + Identity-H 编码
- 内嵌 NotoSansSC 字体到PDF文档
- 扩展
- 验证:
scripts/test_pdf_export_verify.dart验证脚本确认 FontDescriptor/CIDFontType2/Identity-H 正确嵌入 - 文件:
packages/docs_gee/docx_generator/lib/src/pdf_generator.dart
新增: PDF封面图片嵌入
- 功能: 导出PDF时自动在文档顶部嵌入菜品封面图
- 实现:
- 从
DefaultCacheManager缓存读取已下载的封面图(不重新下载) - 若无缓存则输出空白(不阻塞导出流程)
- 图片居中显示,尺寸根据文件大小自适应(200-450pt)
- 从
- 新增参数:
coverImageBytes/coverImageWidth/coverImageHeight - 文件:
packages/docs_gee/docx_generator/lib/src/pdf_generator.dart,lib/src/widgets/recipe_detail/interaction/recipe_export_button.dart
[0.99.41] - 2026-04-24
🐛 修复 — 3项重要Bug修复
修复: 主题跟随系统切换不实时生效
- 问题: 开启"跟随系统"后,切换系统深色模式,应用未实时切换
- 根因:
GetCupertinoApp的Obx闭包内未直接访问isDarkMode.value,导致 GetX 未追踪到主题状态变化 - 修复: 在
main.dart的Obx闭包内显式引用themeService.isDarkMode.value,确保主题变化触发重建 - 文件:
lib/main.dart
修复: 统计面板数字显示0
- 问题: 运营数据大屏中,当数据为0时直接显示"0",不符合展示要求
- 修复:
_formatNumber方法增加n <= 0判断,最少显示"1" - 文件:
lib/src/pages/profile/data/stats_dashboard_page.dart
修复: 数据导出JSON导入无法识别 (3个子问题)
- 问题1: UTF-8编码错误 —
FilePicker读取文件使用String.fromCharCodes,不正确处理UTF-8中文- 修复: 改用
utf8.decode(bytes, allowMalformed: true),确保中文内容正确解码 - 文件:
lib/src/pages/profile/tools/data_export_page.dart
- 修复: 改用
- 问题2: MealRecordModel缺少toJson —
exportToJson()直接序列化 Model 对象,输出Instance of 'MealRecordModel'而非有效JSON- 修复: 为
MealRecordModel添加toJson()和fromJson()方法;MealRecordController.exportToJson()改用.map((e) => e.toJson())序列化 - 文件:
lib/src/models/data/record/meal_record_model.dart,lib/src/controllers/data/meal_record_controller.dart
- 修复: 为
- 问题3: _inferDataSource字段名不匹配 — 收藏导出使用
favorite_type(下划线),但推断逻辑只检查favoriteType(驼峰)- 修复:
_inferDataSource同时检查favoriteType和favorite_type - 文件:
lib/src/services/data/business/data_export_service.dart
- 修复:
✨ 优化 — 数据导出格式重构
重构: 导出JSON增加元数据标识
- 新增: 全量导出和单源导出均添加
_meta元数据字段{ "_meta": { "app": "cute_kitchen", "version": 2, "exportTime": "2026-04-24T12:00:00", "format": "full" | "single", "source": "favorites" }, "favorites": [...] } - 优化:
previewImport增加元数据验证,拒绝非本应用导出的数据 - 优化:
ImportPreview增加error字段,导入失败时显示具体原因 - 优化: V1格式(无_meta)向下兼容,仍可识别
- 验证:
scripts/test_export_import.dart45项测试全部通过
[0.99.40] - 2026-04-24
✨ 新增 — 血液酒精含量(BAC)计算器
新增: BAC计算器页面
- 功能: 输入体重/饮酒量/酒精度/已过时间,计算血液酒精含量
- 算法: Widmark公式,男性r=0.68,女性r=0.55,代谢率0.015%/小时
- 选填: 性别、空腹状态,提高准确度
- 单位切换: 已喝酒量支持 毫升↔斤↔公斤 三态切换(1斤=500ml, 1公斤=1000ml)
- 快捷选择: 啤酒(5°)/葡萄酒(12°)/白酒(52°)/烈酒(40°)/酒心巧克力(5°)/自酿米酒(15°)/自酿果酒(12°)/自定义
- 结果卡片: BAC核心结果、醉酒等级条、法律标准(中国)、醒酒时间、酒精摄入详情、安全提示
- 知识弹窗: 📖按钮展示自我意识判断/醉酒症状识别/科学解酒方法/酒驾危害/免责声明
- 数据保存: 💾按钮保存输入数据到本地
- 文件:
lib/src/pages/tools/health/bac/(bac_calculator.dart, bac_cards.dart, bac_page.dart) - 验证:
scripts/test_bac_calculator.dart40项测试全部通过
新增: 参考文献页面增加酒精计算数据来源
- Widmark公式与BAC (Wikipedia)
- 中国酒驾醉驾标准 (GB 19522-2010)
- WHO酒精代谢与健康
- 🍺 酒精计算分类条目增加「计算器」跳转按钮
✨ 优化 — 身体分析页面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叠加边缘发光层
删除: BMI计算器页面
- 原因: 身体分析页面已完整覆盖BMI计算功能及更多指标
- 影响文件: 删除 bmi_calculator_page.dart,移除 app_routes.dart 中 bmiCalculator/toolsBmi 路由和 PageRegistry
- 联动: 体重管理页面 BMI 跳转按钮改为跳转身体分析页面
优化: 重新分析按钮展开编辑框
- 改动: 点击"🔄 重新分析"时,同时展开输入区域并取消隐藏状态
需求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