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

349 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📋 未完成功能清单
> 文档创建: 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` | 本地通知 | 五 | ❌ 否 | ⚠️ 待验证 | ❌ 未引入 |
---
## 📝 验收标准
### 阶段三 ✅
- [x] 环形进度正确显示当日热量占比
- [x] 三大营养素比例饼图正确
- [x] 周/月趋势折线图可交互
- [x] 可设置每日营养目标
### 阶段四
- [ ] 可从菜谱添加食材到购物清单
- [ ] 可勾选已购物品
- [ ] 食材按分类展示
### 阶段五
- [ ] 烹饪计时器支持多步骤倒计时
- [ ] 用量换算覆盖常用单位
- [ ] 过敏原检测可标记含过敏原的菜谱
- [ ] 烹饪笔记可按菜谱关联
- [ ] 用餐提醒可设置时间并准时通知
- [ ] 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 动态主题(增强体验)
```
### 验收标准
- [x] 交互按钮点击成功率 > 95%
- [x] 骨架屏与真实内容结构一致
- [ ] 主题切换实时生效,无闪烁
- [x] 搜索支持关键词高亮、历史记录
- [ ] 详情页展示完整菜谱信息
---
## 🔴 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 收藏页面优化(体验增强)
```
### 验收标准
- [x] 所有购物清单入口正常跳转
- [x] 营养中心报告页面正常打开
- [x] 无 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 | ❌ |
### 验收标准
- [ ] 支持分类多选筛选
- [ ] 支持标签多选筛选
- [ ] 支持营养素范围筛选
- [ ] 筛选结果实时更新