📋 未完成功能清单
文档创建: 2026-04-09
最后更新: 2026-04-09
数据来源: LOCAL_FEATURES_PLAN.md 阶段三~五
说明: 记录所有未完成的功能任务,跟踪开发进度
优先级说明: P1=核心功能 P2=重要功能 P3=增强功能
优先级值1-5: 5=最高优先级(多次提及自动提升)
📊 总体进度
| 阶段 |
总任务 |
已完成 |
未完成 |
完成率 |
| 三:热量追踪+营养分析 |
7 |
7 |
0 |
100% ✅ |
| 四:购物清单 |
5 |
5 |
0 |
100% ✅ |
| 五:增强功能 |
7 |
0 |
7 |
0% |
| 六:主页体验优化 |
5 |
3 |
2 |
60% |
| Bug 修复 |
9 |
4 |
5 |
44% |
| 七:今天吃什么增强 |
5 |
0 |
5 |
0% |
| 合计 |
38 |
19 |
19 |
50% |
开发顺序建议
技术要点
ShoppingItemModel 已有 category 字段,分类展示直接用 groupby
- 勾选已购用
isChecked 字段,写入 Hive 持久化
- 从菜谱添加需解析
RecipeModel.ingredients,转为 ShoppingItemModel 列表
- 购物清单页面需 iOS26 Liquid Glass 风格
已完成文件清单
| 文件路径 |
说明 |
lib/src/controllers/shopping/shopping_list_controller.dart |
购物清单控制器 |
lib/src/pages/shopping/shopping_list_page.dart |
购物清单页面 |
lib/src/models/shopping/shopping_item_model.dart |
购物清单模型(已存在) |
路由
| 路由路径 |
页面 |
/shopping-list |
购物清单页面 |
🟡 阶段五:增强功能(P2/P3)
目标:烹饪计时器 + 用量换算 + 过敏原检测 + 烹饪笔记 + 用餐提醒 + BMI + 份量缩放
前置依赖:各功能独立,无强依赖
关键阻塞:5.5 用餐提醒需 flutter_local_notifications
| 序号 |
任务 |
产出文件 |
优先级 |
状态 |
说明 |
| 5.1 |
烹饪计时器页面 |
lib/src/pages/tools/cooking_timer_page.dart |
P2 |
❌ 未创建 |
pages/tools/ 目录不存在 |
| 5.2 |
用量换算工具页面 |
lib/src/pages/tools/unit_converter_page.dart |
P2 |
❌ 未创建 |
|
| 5.3 |
过敏原检测逻辑 |
lib/src/services/allergen_checker.dart |
P2 |
❌ 未创建 |
|
| 5.4 |
烹饪笔记功能 |
lib/src/controllers/cooking_note_controller.dart |
P3 |
❌ 未创建 |
|
| 5.5 |
用餐提醒 |
lib/src/services/notification_service.dart |
P3 |
❌ 未创建 |
需 flutter_local_notifications |
| 5.6 |
BMI 计算器 |
lib/src/pages/tools/bmi_calculator_page.dart |
P3 |
❌ 未创建 |
|
| 5.7 |
份量缩放工具 |
lib/src/pages/tools/serving_scaler_page.dart |
P3 |
❌ 未创建 |
|
开发顺序建议
技术要点
- 烹饪计时器:用
Stream.periodic 实现倒计时,支持多步骤
- 用量换算:纯 Dart Map 映射,无需外部包
- 过敏原检测:比对
PreferenceController.blockedAllergens 与菜谱成分
- 烹饪笔记:
CookingNoteModel 已有,Controller 调 HiveService CRUD
- 用餐提醒:
flutter_local_notifications 有原生依赖,鸿蒙兼容性需验证
- BMI 计算器:
体重 / 身高²,纯计算
- 份量缩放:按比例缩放食材用量,纯计算
- 所有工具页面需 iOS26 Liquid Glass 风格
🔗 需引入的外部依赖
| 依赖 |
用途 |
阶段 |
纯Dart |
鸿蒙兼容 |
状态 |
fl_chart |
图表绘制 |
三 |
✅ 是 |
✅ 是 |
✅ 已本地适配 |
flutter_local_notifications |
本地通知 |
五 |
❌ 否 |
⚠️ 待验证 |
❌ 未引入 |
📝 验收标准
阶段三 ✅
阶段四
阶段五
🔵 阶段六:主页体验优化(P1)
目标:修复主页交互体验问题,提升可用性
前置依赖:无
关键阻塞:无
| 序号 |
任务 |
产出文件 |
优先级 |
状态 |
问题描述 |
| 6.1 |
增大卡片交互按钮点击区域 |
lib/src/pages/home_page.dart |
P1 |
❌ 未修复 |
图标16px过小,点击困难,需增大到20px+扩大热区 |
| 6.2 |
添加骨架屏加载效果 |
lib/src/widgets/skeleton/ |
P1 |
❌ 未创建 |
加载中无骨架屏,用户体验差 |
| 6.3 |
支持动态主题切换 |
lib/src/services/ui/theme_service.dart |
P2 |
❌ 未实现 |
当前主题固定,需支持跟随系统/手动切换 |
| 6.4 |
搜索功能+搜索页面 |
lib/src/pages/search/search_page.dart |
P1 |
❌ 未创建 |
搜索栏只读无跳转,需完整搜索功能 |
| 6.5 |
菜谱详情页 |
lib/src/pages/recipe/recipe_detail_page.dart |
P1 |
❌ 未创建 |
点击卡片只显示Toast,需跳转到详情页 |
问题详情
6.1 交互按钮过小
- 现状:图标 16px,点击热区仅文字区域
- 影响:用户难以准确点击,误触率高
- 方案:图标增大到 20px,Padding 从 2px 增加到 8px,使用
InkWell 扩大热区
6.2 骨架屏缺失
- 现状:加载时显示
CupertinoActivityIndicator
- 影响:页面跳动,感知加载时间长
- 方案:使用
Shimmer 或自定义骨架屏组件,模拟卡片结构
6.3 动态主题
- 现状:主题固定,仅支持亮/暗色
- 影响:无法满足个性化需求
- 方案:扩展 ThemeService,支持多主题色(蓝/绿/紫/橙)
6.4 搜索功能
- 现状:搜索栏
readOnly: true,点击无响应
- 影响:核心功能缺失
- 方案:创建 SearchPage,支持历史记录、热门搜索、结果列表
6.5 详情页缺失
- 现状:点击卡片
ToastService.show('${item.title} 👀')
- 影响:无法查看菜谱详情
- 方案:创建 RecipeDetailPage,展示封面、食材、步骤、营养
开发顺序建议
验收标准
🔴 Bug修复清单(P0)
目标:修复用户反馈的严重问题
发现时间:2026-04-09
| 序号 |
问题描述 |
影响页面 |
优先级 |
状态 |
可能原因 |
| B.1 |
发现页营养中心部分按钮卡死闪退 |
discover_page.dart |
P0 |
❌ 未修复 |
空指针/异步异常未捕获 |
| B.2 |
goal-setting页面被链接提示 |
goal_setting_page.dart |
P0 |
❌ 未修复 |
路由或依赖注入问题 |
| B.3 |
今天吃什么选择无反应 |
what_to_eat_page.dart |
P0 |
❌ 未修复 |
状态管理或逻辑错误 |
| B.4 |
主题设置页面不协调 |
personalization_page.dart |
P1 |
❌ 未修复 |
布局比例、缺少分割线 |
问题详情
B.1 发现页营养中心卡死闪退
- 现象:点击部分按钮后应用卡死并闪退
- 可能原因:
- 控制器未正确初始化
- 异步操作未正确处理异常
- 空安全违规访问
- 排查方向:检查
DiscoverPage 中的按钮点击事件处理
B.2 goal-setting页面链接问题
- 现象:页面显示"被链接"提示
- 可能原因:
- 路由参数传递错误
- GetX依赖注入问题
- 页面生命周期问题
- 排查方向:检查路由跳转和控制器注册
B.3 今天吃什么无反应
- 现象:点击"开始选择"、"随机"、"智能"按钮后无结果
- 可能原因:
- 排查方向:检查
WhatToEatController 的选择逻辑
B.4 主题设置页面不协调
- 现象:
- 可能原因:
- 布局使用固定尺寸
- 缺少视觉分隔
- 主题持久化逻辑问题
- 排查方向:重构布局,添加分割线,检查主题保存逻辑
修复顺序建议
验收标准
🔴 Bug修复清单 第二波(P0)
发现时间:2026-04-09(第二轮反馈)
| 序号 |
问题描述 |
影响页面 |
优先级 |
状态 |
可能原因 |
| B.5 |
发现页购物清单点击无反应 |
discover_page.dart |
P0 |
✅ 已修复 |
按钮事件未绑定 |
| B.6 |
我的页面购物清单被拦截 |
profile_home.dart |
P0 |
✅ 已修复 |
PageRegistry 未注册 |
| B.7 |
右上角 debug 标签 |
main.dart |
P1 |
✅ 已修复 |
debugShowCheckedModeBanner未关闭 |
| B.8 |
发现页营养中心报告被拦截 |
discover_page.dart |
P0 |
✅ 已修复 |
PageRegistry 未注册 |
| B.9 |
收藏页面单一无交互 |
favorites_page.dart |
P2 |
❌ 未修复 |
缺少删除/排序/分类功能 |
问题详情
B.5 发现页购物清单点击无反应
- 现象:点击购物清单入口无响应
- 排查方向:检查按钮onTap事件和路由跳转
B.6 我的页面购物清单被拦截
- 现象:页面显示"被拦截"提示
- 排查方向:检查PageStandardsMiddleware和页面规范
B.7 Debug标签
- 现象:右上角显示DEBUG标签
- 修复方案:设置
debugShowCheckedModeBanner: false
B.8 营养中心报告被拦截
- 现象:点击报告入口显示"被拦截"
- 排查方向:检查路由注册和页面规范
B.9 收藏页面单一
- 现象:只有列表,无删除/排序/分类功能
- 优化方向:添加滑动删除、分类筛选、排序选项
修复顺序建议
验收标准
🟡 阶段七:今天吃什么增强(P1)
目标:实现接口支持的动态筛选功能
前置依赖:接口已支持(api_what_to_eat.php v1.24.0)
分析结论:接口已完整支持随机/智能/分类/标签/营养素筛选,APP端未调用
| 序号 |
任务 |
产出文件 |
优先级 |
状态 |
说明 |
| 7.1 |
实现分类筛选UI |
what_to_eat_page.dart |
P1 |
❌ 未实现 |
显示接口返回的分类列表供选择 |
| 7.2 |
实现标签筛选UI |
what_to_eat_page.dart |
P1 |
❌ 未实现 |
显示接口返回的标签列表 |
| 7.3 |
实现营养素筛选UI |
what_to_eat_page.dart |
P1 |
❌ 未实现 |
热量/蛋白质/脂肪范围滑块 |
| 7.4 |
调用 available_filters 接口 |
what_to_eat_repository.dart |
P1 |
❌ 未实现 |
根据已选条件获取可用筛选 |
| 7.5 |
保存筛选偏好 |
HiveService |
P2 |
❌ 未实现 |
本地记住用户偏好 |
接口分析
| 端点 |
APP调用 |
说明 |
act=random |
✅ 已调用 |
随机模式 |
act=smart |
✅ 已调用 |
智能模式(仅用偏好) |
act=config |
✅ 已调用 |
获取配置 |
act=subcategories |
❌ 未调用 |
获取子分类 |
act=available_filters |
❌ 未调用 |
动态筛选 |
筛选参数(接口支持)
| 参数 |
类型 |
APP实现 |
include_categories |
int[] |
❌ |
exclude_categories |
int[] |
❌ |
include_tags |
int[] |
❌ |
exclude_tags |
int[] |
❌ |
exclude_allergens |
string[] |
⚠️ 仅偏好 |
nutrition |
string |
❌ |
验收标准