17 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.66.0] - 2026-04-11
Fixed — 阶段十九综合Bug修复+功能增强
-
🐛 19.1 发现页更多按钮卡死 —
tools_center_page.dart- 添加ToolsController安全检查,防止未注册时崩溃
-
🐛 19.2 烹饪计时器常用预设 —
cooking_timer_page.dart- 添加18种常用烹饪步骤快捷添加(煮鸡蛋/煮面条/炖汤等)
-
🐛 19.3 菜谱详情显示全部数据 —
recipe_detail_page.dart- 显示浏览量/营养成分/分类/标签/过敏原/时间等全部字段
- 笔记icon改为横向滚动,修复溢出
-
🐛 19.4 口味偏好分类+标签修复 —
user_preference_model.dart- 修复PreferenceCategory id字符串解析+children子分类+标签显示
-
🐛 19.5 热门排行数据修复 —
hot_repository.dart- 添加fallback机制,period无数据时回退total
-
🐛 19.6 购物清单按钮增大 —
shopping_list_page.dart- 勾选/删除按钮增大至44x44点击区域
-
🐛 19.7 我的页面左右滑动 —
profile_page.dart- 使用PageView替代条件渲染,支持手势滑动
-
🐛 19.8 笔记保存后不显示 —
cooking_note_page.dart- 修复异步保存未await+添加Obx响应式刷新
-
🐛 19.9 深色模式跟随系统 —
theme_service.dart- 添加DarkModeSource枚举,支持system/manual模式
-
🐛 19.10 字体大小全局生效 —
main.dart- 通过GetCupertinoApp.builder设置全局textScaleFactor
-
🐛 19.11 底部Tab栏高度+安全区 —
glass_nav_bar.dart- 高度增加,添加底部安全区域padding
-
🐛 19.12 白色区域遮住底部 —
navigation_widgets.dart- 移除SafeArea(bottom:false),GlassNavBar自行处理安全区域
-
✨ 19.13 推荐分类层级导航 —
category_browse_page.dart- 大类→小类→菜谱列表→详情,新建CategoryBrowsePage
-
🐛 19.14 今天吃什么GetX报错 —
what_to_eat_page.dart- 控制器注册+加载优化+分类扁平化
-
✨ 19.15 搜索显示相似结果 —
search_page.dart+search_controller.dart- 无结果时提取关键词模糊搜索,显示相似推荐列表
-
⚙️ 19.16 设置功能全局生效 —
navigation_widgets.dart- 底部栏样式已全局生效(贴边/悬浮切换)
-
✨ 19.17 用餐时段推荐页 —
eating_times_page.dart- 基于eating_times.json创建5类时段浏览+菜谱列表
-
⚡ 19.18 网络请求优化 —
api_service.dart- 增强日志拦截器+重试机制+统一离线检查+缓存解析修复
[0.65.0] - 2026-04-11
Added — 阶段任务补全(12/13/14/16)
-
✨ 12.1 分享菜谱 —
recipe_detail_page.dart- 菜谱详情页添加分享按钮(CupertinoIcons.share)
- 生成格式化分享文本:菜名+食材列表+做法+来源标识
- 调用 CommonUtils.shareContent(底层 share_plus)
-
✨ 12.3 搜索热词从API获取 —
search_controller.dart- 热门搜索词改为从 RecipeRepository.fetchTags() API 获取
- API 获取失败时保留硬编码 fallback 热词(10个经典菜名)
- onInit 时自动加载热词
-
✨ 13.3 食材用量换算增强 —
serving_scaler_page.dart- 添加 CupertinoSegmentedControl 切换「份量缩放」/「单位换算」Tab
- 单位换算支持三大类:⚖️重量(g/kg/lb/oz/斤/两)、🥛容量(ml/L/杯/汤匙/茶匙)、🔢计数(个/根/片/瓣/条/块/把/勺/滴)
- 实时计算换算结果,支持任意单位互转
- 底部展示常用换算速查表(8组常用换算)
-
✨ 14.3 过敏原警示增强 —
allergen_checker.dart+recipe_detail_page.dart- AllergenChecker 添加食材替代建议映射(11类过敏原→替代食材)
- 菜谱详情页过敏原警示区展示替代建议(🔄 标识)
-
✨ 14.4 点赞/推荐系统完善 —
recipe_detail_page.dart- 点赞按钮显示当前状态(实心/空心心形+颜色变化)
- 推荐按钮显示当前推荐状态
- 五星评分对话框(1-5星+表情描述)
-
✨ 14.8 浏览量统计+热度标签 —
recipe_detail_page.dart- 菜谱详情页展示浏览次数+热度标签(🔥热门/🔥🔥非常热门)
-
✨ 16.6 收藏页面UI重构 —
favorites_page.dart- 全面重构为 iOS 26 Liquid Glass 风格
- 所有卡片/按钮/筛选器使用 BackdropFilter + 半透明背景
- 统一使用 DarkDesignTokens.glass / glassBorder 设计令牌
- 空状态居中毛玻璃卡片,编辑栏底部毛玻璃效果
- 收藏项卡片毛玻璃+细边框,选中态半透明高亮
[0.64.0] - 2026-04-11
Added — 阶段十八:浑水摸鱼功能补全
-
✨ 18.1 烹饪笔记页面 —
cooking_note_page.dart- 创建完整CookingNotePage,支持按菜谱关联的笔记增删改查
- 从菜谱详情页跳转时携带recipeId和recipeTitle
-
✨ 18.2 过敏原检测实现 —
allergen_checker.dart- 接入PreferenceController获取用户过敏原偏好设置
- 实现11类过敏原关键词匹配检测(坚果/海鲜/乳制品/蛋类/谷物/豆类/肉类/水果/蔬菜/菌类/调味品)
- checkAllergens返回实际检测结果,isAllergen正确判断
-
✨ 18.3 份量缩放从菜谱导入 —
serving_scaler_page.dart- ServingScalerPage支持ingredients和defaultServings参数
- 从菜谱详情页跳转时携带真实食材列表,替代硬编码数据
- 菜谱详情页添加"份量缩放"按钮
-
✨ 18.4 菜单规划数据持久化 —
meal_planner_page.dart- 接入StorageService+SharedPreferences按周保存/加载菜单数据
- 自动检测周次变化,清理过期数据
-
✨ 18.5 菜单规划从收藏添加 —
meal_planner_page.dart- 实现_addFromFavorites方法,CupertinoActionSheet选择收藏菜谱
- 从FavoritesController获取收藏列表数据
-
✅ 18.6 购物清单从菜谱添加 — 已确认实现
- recipe_detail_page.dart已有_addToShoppingList方法和"购物"按钮
-
✨ 18.7 食材详情营养信息 —
ingredient_detail_page.dart+ingredient_nutrition_db.dart- 创建IngredientNutritionDb营养数据库(60+种常见食材)
- 页面展示:热量大字+营养概览(热量/蛋白质/脂肪/碳水/纤维)+营养素占比条+关键营养素标签+时令季节+选购技巧+储存方法
- 列表卡片显示热量预览信息
- 支持模糊匹配和分类回退
-
✨ 18.8 营养中心饼图+折线图 —
charts_widgets.dart+nutrition_report_page.dart- 新增MealTypePieChart组件(早/午/晚/加餐热量分布饼图)
- 营养报告页集成餐次分布饼图卡片
- 现有图表完整:折线图(热量趋势)+营养素饼图+餐次分布饼图+进度条
新增文件
lib/src/services/data/ingredient_nutrition_db.dart— 食材营养数据库
[0.63.0] - 2026-04-11
Fixed — 控制器注册重复与生命周期统一管理
-
🐛 控制器重复注册修复 —
app_binding.dart- 移除 MainBinding 中 FavoritesController/ShoppingListController 的重复注册(已在 AppBinding 全局注册)
- 移除 FavoritesBinding 中 FavoritesController/ToolsController 的重复注册
- 移除 RecipeDetailBinding 中 FavoritesController/ActionController/ShoppingListController 的重复注册
- 移除 ShoppingBinding 中 ShoppingListController 的重复注册(且与 AppBinding 的 put+permanent 方式冲突)
- 移除 ToolsBinding 中 ToolsController 的重复注册
- 移除 DiscoverBinding/HotBinding/WhatToEatBinding 中 HotController/WhatToEatController 的重复注册
- 删除已清空的 Binding 类:MainBinding, DiscoverBinding, HotBinding, WhatToEatBinding, ShoppingBinding, FavoritesBinding, RecipeDetailBinding, ToolsBinding
-
🔧 AppBinding 全局控制器统一管理
- 新增 ToolsController 全局注册(permanent: true)— 多页面使用,应全局管理
- 新增 HotController 全局注册(permanent: true)— 主标签页+独立页面均使用
- 新增 WhatToEatController 全局注册(permanent: true)— 主标签页+独立页面均使用
- 添加分类注释,明确服务层/主题层/核心业务控制器的职责边界
-
🧹 页面内联注册清理
favorites_page.dart— 移除 ToolsController 防御性 Get.put,改为直接 Get.findtools_center_page.dart— 移除 ToolsController 防御性 Get.put,改为直接 Get.findrecipe_detail_page.dart— 移除 ActionController/FavoritesController 防御性 Get.put,改为直接 Get.findnavigation_widgets.dart— 移除 MainNavigationController 的 Get.isRegistered 检查+Get.put,改为直接 Get.findapp_routes.dart— 移除已删除 Binding 的路由引用
影响说明
此修复解决了以下问题:
- 状态丢失:Get.put() 对已注册的同类型会替换实例,导致控制器状态数据丢失
- 注册方式冲突:同一控制器在不同 Binding 中混用 put/lazyPut,生命周期不一致
- 内存泄漏风险:重复创建/销毁控制器实例造成不必要的资源消耗
- 防御性代码冗余:页面中 try-catch + Get.put 模式不再需要
[0.62.1] - 2026-04-10
Fixed — Linter 警告清理
- 🧹 代码规范警告修复
glass_animations.dart- null 检查语法修复nutrition_center_page.dart- 字符串插值优化favorites_page.dart- separatorBuilder 参数规范化tools_center_page.dart- separatorBuilder 参数规范化ingredient_detail_page.dart- separatorBuilder 参数规范化skeleton_loader.dart- separatorBuilder 参数规范化meal_time_recommend_page.dart- separatorBuilder + 字符串插值修复meal_planner_page.dart- separatorBuilder 参数规范化allergen_checker_page.dart- separatorBuilder 参数规范化
Added — 代码分析与风险评估
- 📋 CODE_ANALYSIS.md 文档新增
- 闪退卡死风险点分析(高/中/低风险分级)
- 性能优化机会清单
- 新功能建议与优先级
[0.62.0] - 2026-04-10
Fixed — 营养中心崩溃修复
-
🐛 营养中心报告按钮卡死闪退 —
nutrition_center_page.dart/nutrition_report_page.dart- 添加 MealRecordController 初始化错误处理
- 添加 null 检查,避免空指针异常
- 导航时添加 try-catch 错误捕获
- 显示友好的错误提示页面
-
🐛 热门排行数据显示"暂无数据" —
hot_repository.dart- 添加详细调试日志,方便排查问题
- 优化数据结构兼容性处理
- 修复 period 参数传递错误
- 添加错误提示和降级处理
Optimized — 性能优化
-
⚡ 今天吃什么动态筛选优化 —
what_to_eat_controller.dart/what_to_eat_page.dart- 添加筛选条件调试日志
- 优化空结果提示(显示已选筛选条件数量)
- 改进错误信息显示
-
⚡ 启动加载优化 —
home_page.dart- 添加骨架屏组件(SkeletonLoader)
- 实现 12 秒超时保护
- 添加缓存优先策略
Added — 测试工具
-
🧪 接口验证脚本 —
scripts/verify_nutrition_api.dart- 验证 API 接口连通性
- 测试热门排行数据
- 性能基准测试(5 次迭代)
- 彩色输出和详细统计
-
📊 性能优化报告 —
scripts/NUTRITION_PERFORMANCE.md- 接口验证结果汇总
- API 接口文档摘要
- 实际性能测试结果
- 优化建议和验收标准
-
📚 脚本工具说明 —
scripts/README.md- 使用方法指南
- 故障排查手册
- 测试结果记录
Test Results — 测试结果
- ✅ 接口连通性: 100% 成功率
- 🟡 平均响应时间: 1393ms(一般)
- ✅ 稳定性: 波动 < 100ms
- 📈 优化空间: 目标 < 500ms
开发进度
已完成功能
- ✅ 主题服务(ThemeService)+ 动态主题色 + 卡片滑动方向设置
- ✅ 动画服务(AnimationService)
- ✅ 国际化支持(en, zh, zh_Hant)
- ✅ 权限管理服务
- ✅ 自适应布局系统
- ✅ GetX 全局状态管理
- ✅ 标准组件库
- ✅ 路由守卫系统
- ✅ 繁体中文语言切换 + 弹窗/Toast 样式配置
- ✅ 核心错误修复(DeviceType/类型提升/空值检查等)
- ✅ API 基础设施(baseUrl + 模型 + Repository)— 阶段一
- ✅ 核心数据接入(首页真实数据)— 阶段二
- ✅ 信息流 + 推荐系统 — 阶段三
- ✅ 互动功能:点赞/推荐/浏览 — 阶段四
- ✅ 用户偏好系统 — 阶段五
- ✅ "今天吃什么"功能 — 阶段六
- ✅ 热门排行 + 在线统计 — 阶段七
- ✅ 缓存优化 + 离线支持 — 阶段八
- ✅ API v2.0.0 迁移 — 13个接口文件精简到9个,端点整合(优先级5)
- ✅ 8个严重Bug修复 — 主页/搜索/收藏/口味偏好/热门排行/详情页(优先级5)
- ✅ 搜索功能重写 — 直接调用API,iOS 26风格UI(优先级4)
- ✅ 今天吃什么动态筛选 — 分类/标签/过敏原三重筛选(优先级4)
- ✅ 热门排行HotItem模型 — 支持period/sortBy切换(优先级3)
- ✅ 首页横向滑动卡片 — PageView+ListView双模式(优先级3)
- ✅ 营养中心偏好修复 — 用户初始化+分类/标签加载(优先级3)
- ✅ 实用工具入口 — 烹饪计时/用量换算/BMI/份量缩放(优先级2)
- ✅ 页面拦截修复 — 路由守卫+PageRegistry注册(优先级2)
- ✅ 布局溢出修复 — 标签栏横向滑动+工具区横向滚动(优先级2)
- ✅ 工具中心布局溢出修复 — 移除Spacer+mainAxisExtent替代childAspectRatio(v0.60.0)
- ✅ 浑水摸鱼功能补全 — 烹饪笔记+过敏原检测+份量缩放+菜单持久化+收藏添加+购物清单+食材营养+餐次饼图(v0.64.0)
- ✅ 工具中心 — 数据模型+控制器+搜索/分类/频率统计+联网指示(优先级4)
- ✅ 过敏原检查 — API数据加载+分类浏览+等级提示(优先级3)
- ✅ 用餐时段推荐 — 时段自动推荐+分类搜索(优先级3)
- ✅ 每周菜单规划 — 七日选择器+三餐规划+搜索/收藏选择(优先级3)
- ✅ 食材详情查询 — 营养信息+分类+关联菜谱(优先级3)
- ✅ 营养追踪仪表盘 — 首页环形图+四项指标(优先级5)
- ✅ 搜索列表/今天吃什么Bug修复 — 空值检查+布局溢出(优先级4)
- ✅ 统一 Controller Binding 注册 — AppBinding全局管理+移除重复注册(优先级4)
- ✅ 崩溃修复 — 收藏页Obx崩溃+详情页营养全0检测(v0.61.0)
- ✅ 阶段任务补全(12/13/14/16) — 分享菜谱+搜索热词API+单位换算+过敏原替代+点赞评分+浏览量统计+收藏页Liquid Glass(v0.65.0)
待开发功能(详见 UNFINISHED_FEATURES.md 阶段九~十三)
阶段九:架构修复+核心Bug(P0/P1)
- 🔴 热门排行点击跳转详情(优先级5)
- 🔴 首页改用 Repository 层(优先级5)
- 🟡 合并收藏功能去重(优先级4)
- 🟡 合并搜索控制器去重(优先级4)
- 🟡 多语言词条扩充(优先级4)
- 🟢 聊天页面功能化或移除(优先级3)
阶段十:代码质量提升(P1/P2)
- 🟡 HiveService 数据迁移机制(优先级3)
- 🟡 统一错误处理 AppException(优先级4)
- 🟡 离线缓存策略(优先级4)
- 🟢 DesignTokens 与 ThemeService 解耦(优先级3)
阶段十一:烹饪模式+营养仪表盘(P1)
- 🟢 🍳 烹饪模式(步骤引导+计时器+语音播报)(优先级5)
- 🟢 📊 营养追踪仪表盘(首页环形图)(优先级5)
- 🟢 🛒 菜谱食材一键加入购物清单(优先级4)
- 🟢 📖 菜谱步骤图文模式(优先级4)
阶段十二:社交+通知增强(P2)
- 🔵 📱 分享菜谱(优先级4)
- 🔵 🔔 烹饪提醒通知(优先级3)
- 🔵 🔍 搜索建议/热词(优先级3)
- 🔵 📸 拍照记录(优先级3)
阶段十三:AI+规划高级功能(P3)
- 🔵 🤖 AI 菜谱推荐(优先级2)
- 🔵 📅 每周菜单规划(优先级3)
- 🔵 🧮 食材用量换算增强(优先级2)
- 🔵 🌙 就寝提醒(优先级1)
技术栈
- 框架: Flutter
- 状态管理: GetX
- 响应式布局: flutter_adaptive_scaffold
- 动画系统: animations
- 国际化: flutter_localizations + intl
- 权限管理: permission_handler
贡献指南
- 遵循 iOS 风格设计规范
- 使用主题服务统一管理颜色和字体
- 使用动画服务统一管理动画效果
- 新增功能需更新 CHANGELOG.md
- 代码提交前运行
flutter analyze确保无错误 - 新建页面必须支持 GetX 状态管理