Files
kitchen/docs/dev/UNFINISHED_FEATURES.md
Developer 8d27c67d3a api实现
2026-04-09 08:54:36 +08:00

13 KiB
Raw Blame History

📋 未完成功能清单

文档创建: 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%

开发顺序建议

4.1 ShoppingListController ✅
  → 4.4 食材分类展示组件 ✅
    → 4.2 购物清单页面 ✅
  → 4.3 从菜谱添加食材入口 ✅
  → 4.5 我的页面增加入口 ✅

技术要点

  • 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 未创建

开发顺序建议

5.1 烹饪计时器(纯 UI无外部依赖
  → 5.2 用量换算(纯逻辑,无外部依赖)
    → 5.6 BMI 计算器(纯逻辑,无外部依赖)
      → 5.7 份量缩放(纯逻辑,无外部依赖)
  → 5.3 过敏原检测(需偏好数据)
  → 5.4 烹饪笔记(需 HiveService
  → 5.5 用餐提醒(需 flutter_local_notifications鸿蒙兼容性待验证

技术要点

  • 烹饪计时器:用 Stream.periodic 实现倒计时,支持多步骤
  • 用量换算:纯 Dart Map 映射,无需外部包
  • 过敏原检测:比对 PreferenceController.blockedAllergens 与菜谱成分
  • 烹饪笔记:CookingNoteModel 已有Controller 调 HiveService CRUD
  • 用餐提醒:flutter_local_notifications 有原生依赖,鸿蒙兼容性需验证
  • BMI 计算器:体重 / 身高²,纯计算
  • 份量缩放:按比例缩放食材用量,纯计算
  • 所有工具页面需 iOS26 Liquid Glass 风格

🔗 需引入的外部依赖

依赖 用途 阶段 纯Dart 鸿蒙兼容 状态
fl_chart 图表绘制 已本地适配
flutter_local_notifications 本地通知 ⚠️ 待验证 未引入

📝 验收标准

阶段三

  • 环形进度正确显示当日热量占比
  • 三大营养素比例饼图正确
  • 周/月趋势折线图可交互
  • 可设置每日营养目标

阶段四

  • 可从菜谱添加食材到购物清单
  • 可勾选已购物品
  • 食材按分类展示

阶段五

  • 烹饪计时器支持多步骤倒计时
  • 用量换算覆盖常用单位
  • 过敏原检测可标记含过敏原的菜谱
  • 烹饪笔记可按菜谱关联
  • 用餐提醒可设置时间并准时通知
  • BMI 计算器结果含健康建议
  • 份量缩放可按比例调整食材用量

🔵 阶段六主页体验优化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点击热区仅文字区域
  • 影响:用户难以准确点击,误触率高
  • 方案:图标增大到 20pxPadding 从 2px 增加到 8px使用 InkWell 扩大热区

6.2 骨架屏缺失

  • 现状:加载时显示 CupertinoActivityIndicator
  • 影响:页面跳动,感知加载时间长
  • 方案:使用 Shimmer 或自定义骨架屏组件,模拟卡片结构

6.3 动态主题

  • 现状:主题固定,仅支持亮/暗色
  • 影响:无法满足个性化需求
  • 方案:扩展 ThemeService支持多主题色蓝/绿/紫/橙)

6.4 搜索功能

  • 现状:搜索栏 readOnly: true,点击无响应
  • 影响:核心功能缺失
  • 方案:创建 SearchPage支持历史记录、热门搜索、结果列表

6.5 详情页缺失

  • 现状:点击卡片 ToastService.show('${item.title} 👀')
  • 影响:无法查看菜谱详情
  • 方案:创建 RecipeDetailPage展示封面、食材、步骤、营养

开发顺序建议

6.1 增大交互按钮(最小改动,立竿见影)
  → 6.2 骨架屏(提升感知性能)
    → 6.4 搜索页面(核心功能)
      → 6.5 菜谱详情页(核心功能)
  → 6.3 动态主题(增强体验)

验收标准

  • 交互按钮点击成功率 > 95%
  • 骨架屏与真实内容结构一致
  • 主题切换实时生效,无闪烁
  • 搜索支持关键词高亮、历史记录
  • 详情页展示完整菜谱信息

🔴 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 主题设置页面不协调

  • 现象
    • 页面比例不均衡
    • 缺少分割线
    • 部分参数设置不生效
  • 可能原因
    • 布局使用固定尺寸
    • 缺少视觉分隔
    • 主题持久化逻辑问题
  • 排查方向:重构布局,添加分割线,检查主题保存逻辑

修复顺序建议

B.1 卡死闪退(最严重,优先修复)
  → B.3 今天吃什么(核心功能)
    → B.2 goal-setting链接问题
      → B.4 主题设置UI体验优化

验收标准

  • 发现页所有按钮正常响应,无闪退
  • goal-setting页面正常打开无异常提示
  • 今天吃什么功能完整可用,有结果反馈
  • 主题设置页面美观协调,设置实时生效

🔴 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 收藏页面单一

  • 现象:只有列表,无删除/排序/分类功能
  • 优化方向:添加滑动删除、分类筛选、排序选项

修复顺序建议

B.7 去掉 Debug 标签(最简单,立即生效) ✅
  → B.5/B.6/B.8 路由/拦截问题(核心功能) ✅ 全部修复
    → B.9 收藏页面优化(体验增强)

验收标准

  • 所有购物清单入口正常跳转
  • 营养中心报告页面正常打开
  • 无 DEBUG 标签显示
  • 收藏页面支持删除和排序

🟡 阶段七今天吃什么增强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

验收标准

  • 支持分类多选筛选
  • 支持标签多选筛选
  • 支持营养素范围筛选
  • 筛选结果实时更新