20 KiB
20 KiB
📋 未完成功能清单
文档创建: 2026-04-09
最后更新: 2026-04-10
数据来源:LOCAL_FEATURES_PLAN.md阶段三~五 + 项目全面分析
说明: 记录所有未完成的功能任务,跟踪开发进度
优先级说明: P1=核心功能 P2=重要功能 P3=增强功能
优先级值1-5: 5=最高优先级(多次提及自动提升)
📊 总体进度
| 阶段 | 总任务 | 已完成 | 未完成 | 完成率 |
|---|---|---|---|---|
| 三:热量追踪+营养分析 | 7 | 7 | 0 | 100% ✅ |
| 四:购物清单 | 5 | 5 | 0 | 100% ✅ |
| 五:增强功能 | 7 | 7 | 0 | 100% ✅ |
| 六:主页体验优化 | 5 | 5 | 0 | 100% ✅ |
| Bug 修复 | 19 | 19 | 0 | 100% ✅ |
| 七:今天吃什么增强 | 5 | 5 | 0 | 100% ✅ |
| 八:API v2.0.0 迁移+Bug修复 | 9 | 9 | 0 | 100% ✅ |
| 九:架构修复+核心Bug | 6 | 0 | 6 | 0% 🔴 |
| 十:代码质量提升 | 5 | 0 | 5 | 0% 🟡 |
| 十一:烹饪模式+营养仪表盘 | 4 | 0 | 4 | 0% 🟢 |
| 十二:社交+通知增强 | 4 | 0 | 4 | 0% 🟢 |
| 十三:AI+规划高级功能 | 4 | 0 | 4 | 0% 🔵 |
| 合计 | 80 | 57 | 23 | 71% |
技术要点
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 | ✅ 已完成 | 已添加入口到"我的"首页 |
开发顺序建议
🟡 阶段七:今天吃什么增强(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 | ✅ 已实现 |
验收标准
- 支持分类多选筛选
- 支持标签多选筛选
- 支持营养素范围筛选
- 筛选结果实时更新
🔵 阶段八:API v2.0.0 迁移 + Bug修复(P0/P1)
目标:迁移到 API v2.0.0 合并接口,修复用户反馈的8个严重Bug
🔴 阶段九:架构修复+核心Bug(P0/P1)
目标:修复架构违规和核心功能缺失
发现时间:2026-04-10(flutter analyze 全面扫描 + 项目分析)
关键阻塞:无
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|---|---|---|---|---|---|
| 9.1 | 热门排行点击跳转详情 | lib/src/pages/hot/hot_page.dart |
P0 | ❌ 未修复 | L148 有 TODO,点击无响应,需跳转到 RecipeDetailPage |
| 9.2 | 首页改用 Repository 层 | lib/src/pages/home_page.dart |
P0 | ❌ 未修复 | 直接使用 _apiService 绕过 Repository,需改为 RecipeRepository |
| 9.3 | 合并收藏功能(去重) | cart_controller.dart + favorites_controller.dart |
P1 | ❌ 未修复 | CartController 实为收藏功能但命名混乱,需统一为 FavoritesController |
| 9.4 | 合并搜索控制器(去重) | search_controller.dart + search/search_controller.dart |
P1 | ❌ 未修复 | 两个搜索控制器并存,需合并为一个 |
| 9.5 | 聊天页面功能化或移除 | lib/src/pages/chat_module/chat_page.dart |
P2 | ❌ 未修复 | 纯 Demo 硬编码消息,需接入真实功能或移除入口 |
| 9.6 | 多语言词条扩充 | app_zh.arb / app_en.arb |
P1 | ❌ 未修复 | 仅 21 词条,大量中文硬编码,需补全页面文字 |
问题详情
9.1 热门排行点击无法跳转详情
- 现象:热门排行列表项点击无响应
- 代码位置:
hot_page.dart:148—// TODO: 点击跳转到菜谱详情页 - 方案:使用
Get.toNamed('/recipe-detail', arguments: item.id)跳转
9.2 首页绕过 Repository 层
- 现象:
home_page.dart直接final ApiService _apiService = ApiService() - 影响:违反架构分层,无法统一缓存/错误处理/数据转换
- 方案:改为
final RecipeRepository _recipeRepository = RecipeRepository(),通过 Repository 获取数据
9.3 收藏功能重复
- 现象:
CartController+CartPage和FavoritesController+FavoritesPage两套并存 - 影响:收藏状态不同步,代码冗余
- 方案:
- 删除
CartController+CartPage - 将 CartController 的 quantity 逻辑合并到 FavoritesController
- 底部 Tab 收藏入口统一指向 FavoritesPage
- 删除
9.4 搜索控制器重复
- 现象:
controllers/search_controller.dart和controllers/search/search_controller.dart两个文件 - 影响:搜索逻辑分散,修改一处容易遗漏另一处
- 方案:保留
search/search_controller.dart(目录结构更规范),删除根目录版本,更新所有引用
9.5 聊天页面
- 现象:
ChatPage只有硬编码消息{'text': '你好,这是聊天示例。', 'me': false} - 方案A:接入 AI 聊天 API(如菜谱问答)
- 方案B:改为"意见反馈"页面
- 方案C:移除入口,待后续有需求再添加
9.6 多语言覆盖率
- 现象:
app_zh.arb仅 21 词条,大量页面文字如"今天吃什么"、"热门排行"、"我的足迹"等硬编码 - 方案:逐页面提取硬编码文字到 arb 文件,优先覆盖核心页面(首页、搜索、详情、发现)
开发顺序建议
9.1 热门排行跳转详情(最小改动,立竿见影)
→ 9.2 首页改用 Repository(架构规范)
→ 9.4 合并搜索控制器(消除冗余)
→ 9.3 合并收藏功能(消除冗余)
→ 9.6 多语言词条扩充(持续进行)
→ 9.5 聊天页面(最后处理)
验收标准
- 热门排行点击可跳转到菜谱详情页
- 首页通过 Repository 层获取数据
- 收藏功能只有一套实现
- 搜索功能只有一套实现
- 聊天页面有真实功能或已移除入口
- 核心页面文字已提取到 arb 文件
🟡 阶段十:代码质量提升(P1/P2)
目标:提升代码可维护性和健壮性
前置依赖:阶段九完成
关键阻塞:无
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|---|---|---|---|---|---|
| 10.1 | 统一 Controller 注册 | lib/src/bindings/app_binding.dart |
P1 | ❌ 未实现 | 部分用 Get.put(),部分用 Get.find(),需统一 Binding |
| 10.2 | HiveService 数据迁移机制 | lib/src/services/data/hive_service.dart |
P2 | ❌ 未实现 | Box schema 变更时无迁移策略,可能导致数据丢失 |
| 10.3 | 统一错误处理 | lib/src/services/api/api_exception.dart |
P1 | ❌ 未实现 | 部分 Repository 抛 Exception,部分返回空数据,需统一错误码 |
| 10.4 | 离线缓存策略 | lib/src/services/data/storage_service.dart |
P1 | ❌ 未实现 | API 数据仅靠 Dio 缓存,离线时首页无数据 |
| 10.5 | DesignTokens 与 ThemeService 解耦 | lib/src/config/design_tokens.dart |
P2 | ❌ 未实现 | 页面混用静态常量和动态值,暗色模式适配不一致 |
问题详情
10.1 Controller 注册不统一
- 现象:部分页面在
build()中Get.put(),部分在onInit()中Get.find() - 影响:Controller 生命周期不可控,可能重复创建或找不到
- 方案:每个页面创建对应 Binding,在
AppBinding中统一注册
10.2 HiveService 无数据迁移
- 现象:Box schema 变更后直接崩溃或数据丢失
- 方案:添加
boxVersion字段,打开 Box 时检查版本号,执行迁移逻辑
10.3 错误处理不统一
- 现象:
RecipeRepository抛Exception,FeedRepository返回空列表 - 方案:定义
AppException层级(NetworkException / ParseException / StorageException),Repository 统一抛出
10.4 离线缓存
- 现象:无网络时首页显示"暂无菜谱"
- 方案:API 成功时将数据写入 Hive,离线时从 Hive 读取
10.5 DesignTokens 解耦
- 现象:页面同时使用
DesignTokens.text1(静态)和themeService.textColor.value(动态) - 方案:所有颜色值通过
ThemeService获取,DesignTokens仅保留间距/圆角/字号等不变量
开发顺序建议
10.1 统一 Controller 注册(架构基础)
→ 10.3 统一错误处理(稳定性)
→ 10.4 离线缓存(用户体验)
→ 10.2 HiveService 迁移机制(数据安全)
→ 10.5 DesignTokens 解耦(代码规范)
验收标准
- 所有 Controller 通过 Binding 注册
- HiveService 支持 schema 版本迁移
- Repository 统一抛出 AppException
- 离线时首页可显示缓存数据
- 页面颜色值统一通过 ThemeService 获取
🟢 阶段十一:烹饪模式+营养仪表盘(P1)
目标:实现核心增强功能,提升应用价值
前置依赖:阶段九完成
关键阻塞:无
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|---|---|---|---|---|---|
| 11.1 | 🍳 烹饪模式 | lib/src/pages/recipe/cooking_mode_page.dart |
P1 | ❌ 未实现 | 详情页"开始烹饪"按钮,步骤引导+计时器联动 |
| 11.2 | 📊 营养追踪仪表盘 | lib/src/pages/home/nutrition_dashboard.dart |
P1 | ❌ 未实现 | 首页展示今日营养摄入环形图,整合 MealRecordController |
| 11.3 | 🛒 菜谱食材一键加入购物清单 | lib/src/pages/recipe/recipe_detail_page.dart |
P1 | ❌ 未实现 | 详情页"加入购物清单"按钮,自动解析食材 |
| 11.4 | 📖 菜谱步骤图文模式 | lib/src/pages/recipe/recipe_detail_page.dart |
P2 | ❌ 未实现 | 步骤展开/折叠,每步配图+计时器 |
功能详情
11.1 烹饪模式
- 入口:菜谱详情页 → "🍳 开始烹饪"按钮
- 功能:
- 全屏步骤引导,左右滑动切换步骤
- 当前步骤高亮,已完成步骤置灰
- 每步自动启动计时器(如有时间信息)
- 支持语音播报(TTS)
- 支持暂停/继续/跳过
- 技术方案:PageView + StepIndicator + CookingTimerController
11.2 营养追踪仪表盘
- 入口:首页顶部卡片区域
- 功能:
- 今日热量/蛋白质/脂肪/碳水摄入环形图
- 与每日目标对比进度
- 点击跳转到营养中心详情
- 技术方案:NutritionRing widget + MealRecordController
11.3 食材一键加入购物清单
- 入口:菜谱详情页 → "🛒 加入购物清单"按钮
- 功能:
- 解析
RecipeModel.ingredients为ShoppingItemModel列表 - 弹出确认弹窗,可勾选/取消勾选食材
- 确认后写入 Hive
- 解析
- 技术方案:ShoppingListController.addFromRecipe()
11.4 步骤图文模式
- 入口:菜谱详情页步骤区域
- 功能:
- 步骤卡片展开/折叠
- 每步配图(如有)
- 每步计时器快捷按钮
- 步骤编号 + 预计时间
开发顺序建议
11.3 食材加入购物清单(最小改动,复用现有 ShoppingListController)
→ 11.2 营养追踪仪表盘(复用现有 NutritionRing + MealRecordController)
→ 11.4 步骤图文模式(增强详情页)
→ 11.1 烹饪模式(最复杂,需新建页面)
验收标准
- 详情页有"开始烹饪"按钮,点击进入步骤引导模式
- 首页显示今日营养摄入环形图
- 详情页可一键将食材加入购物清单
- 详情页步骤支持展开/折叠
🟢 阶段十二:社交+通知增强(P2)
目标:增加社交分享和通知提醒功能
前置依赖:阶段十一完成
关键阻塞:12.1 需 share_plus,12.2 需 flutter_local_notifications
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|---|---|---|---|---|---|
| 12.1 | 📱 分享菜谱 | lib/src/pages/recipe/recipe_detail_page.dart |
P2 | ❌ 未实现 | 生成菜谱卡片图片,支持系统分享 |
| 12.2 | 🔔 烹饪提醒通知 | lib/src/services/notification_service.dart |
P2 | ❌ 未实现 | 定时提醒烹饪步骤,与计时器联动 |
| 12.3 | 🔍 搜索建议/热词 | lib/src/pages/search/search_page.dart |
P2 | ❌ 未实现 | 搜索页展示热门搜索词,输入时自动补全 |
| 12.4 | 📸 拍照记录 | lib/src/pages/tools/cooking_note_page.dart |
P3 | ❌ 未实现 | 烹饪笔记支持拍照上传,记录成品 |
功能详情
12.1 分享菜谱
- 入口:菜谱详情页 → 分享按钮
- 功能:
- 生成菜谱卡片图片(封面+标题+食材摘要)
- 调用 iOS Share Sheet / Android 分享面板
- 支持保存到相册
- 技术方案:
screenshot+share_plus
12.2 烹饪提醒通知
- 入口:烹饪模式 → 设置提醒
- 功能:
- 烹饪步骤到达时发送本地通知
- 计时器完成时通知
- 支持自定义提醒时间
- 技术方案:
flutter_local_notifications
12.3 搜索建议/热词
- 入口:搜索页搜索栏
- 功能:
- 空搜索框时展示热门搜索词
- 输入时自动补全建议
- 热门搜索词从 API 获取
- 技术方案:
RecipeRepository.fetchTags()获取热词
12.4 拍照记录
- 入口:烹饪笔记 → 拍照按钮
- 功能:
- 调用相机拍照或从相册选择
- 图片压缩后保存到本地
- 笔记列表展示缩略图
- 技术方案:
image_picker+ 本地文件存储
需引入的外部依赖
| 依赖 | 用途 | 纯Dart | 鸿蒙兼容 |
|---|---|---|---|
share_plus |
系统分享 | ❌ | ⚠️ 需适配 |
flutter_local_notifications |
本地通知 | ❌ | ⚠️ 需适配 |
image_picker |
拍照/相册 | ❌ | ⚠️ 需适配 |
screenshot |
截图 | ✅ | ✅ |
验收标准
- 详情页可分享菜谱卡片到其他应用
- 烹饪计时器完成时发送本地通知
- 搜索页展示热门搜索词
- 烹饪笔记可添加照片
🔵 阶段十三:AI+规划高级功能(P3)
目标:实现智能化和规划类高级功能
前置依赖:阶段十二完成
关键阻塞:13.1 需 AI API,13.2 需日历组件
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|---|---|---|---|---|---|
| 13.1 | 🤖 AI 菜谱推荐 | lib/src/services/ai_recommend_service.dart |
P3 | ❌ 未实现 | 基于口味偏好+浏览历史,智能推荐菜谱 |
| 13.2 | 📅 每周菜单规划 | lib/src/pages/tools/meal_planner_page.dart |
P3 | ❌ 未实现 | 日历视图规划一周饮食,自动生成购物清单 |
| 13.3 | 🧮 食材用量换算增强 | lib/src/pages/tools/serving_scaler_page.dart |
P3 | ❌ 未实现 | 增强份量缩放,支持不同单位换算 |
| 13.4 | 🌙 就寝提醒 | lib/src/pages/settings/health_reminder_page.dart |
P3 | ❌ 未实现 | 根据饮食时间推荐健康作息 |
功能详情
13.1 AI 菜谱推荐
- 入口:首页"为你推荐"Tab
- 功能:
- 基于用户口味偏好(PreferenceController)
- 基于浏览历史(FootprintsPage 数据)
- 基于收藏记录(FavoritesController)
- 推荐相似菜谱
- 技术方案:调用后端推荐 API 或本地协同过滤算法
13.2 每周菜单规划
- 入口:工具页 → "📅 每周菜单"
- 功能:
- 日历视图选择日期
- 每日早/中/晚三餐分配菜谱
- 自动汇总生成购物清单
- 支持拖拽调整
- 技术方案:自定义日历组件 + Hive 持久化
13.3 食材用量换算增强
- 入口:工具页 → 份量缩放
- 功能:
- 支持克/千克/磅/盎司互转
- 支持毫升/升/杯/汤匙互转
- 常用食材密度表
- 技术方案:扩展
serving_scaler_page.dart,添加单位换算 Tab
13.4 就寝提醒
- 入口:设置 → 健康提醒
- 功能:
- 根据晚餐时间推荐就寝时间
- 睡前不宜进食提醒
- 与营养追踪联动
- 技术方案:
flutter_local_notifications+ 健康算法
验收标准
- "为你推荐"展示个性化推荐菜谱
- 每周菜单可规划三餐并生成购物清单
- 份量缩放支持多种单位换算
- 就寝提醒根据饮食时间智能推荐
📎 软件特性功能汇总
以下功能已开发完成或开发中,从历史版本号归档而来
| 功能 | 状态 | 首次版本 | 说明 |
|---|---|---|---|
| 热量追踪+营养分析 | ✅ 已完成 | v0.3x | 环形图+饼图+折线图+目标设置 |
| 购物清单 | ✅ 已完成 | v0.4x | 添加/删除/勾选/分类/从菜谱添加 |
| 烹饪计时器 | ✅ 已完成 | v0.5x | 多步骤倒计时 |
| 用量换算 | ✅ 已完成 | v0.5x | 常用单位换算 |
| 过敏原检测 | ✅ 已完成 | v0.5x | 标记含过敏原菜谱 |
| 烹饪笔记 | ✅ 已完成 | v0.5x | 按菜谱关联笔记 |
| BMI 计算器 | ✅ 已完成 | v0.5x | 含健康建议 |
| 份量缩放 | ✅ 已完成 | v0.5x | 按比例调整食材用量 |
| 主页体验优化 | ✅ 已完成 | v0.6x | 骨架屏+动画+搜索+详情页 |
| 今天吃什么增强 | ✅ 已完成 | v0.7x | 分类/标签/过敏原三维筛选 |
| API v2.0.0 迁移 | ✅ 已完成 | v0.8x | 合并接口+8个Bug修复 |
| 动态主题 | ✅ 已完成 | v0.6x | 多主题色+暗色模式+卡片滑动方向 |
| Liquid Glass 风格 | ✅ 已完成 | v0.6x | 底栏+搜索栏+分段控件+卡片 |
| 收藏管理 | ✅ 已完成 | v0.8x | 编辑/排序/分类/跳转详情 |
| 静态分析清理 | ✅ 已完成 | v0.52 | 107→1 个 info,0 error/warning |