瀑布流

This commit is contained in:
Developer
2026-04-13 03:39:29 +08:00
parent 7b90983bb9
commit 13fdbdc431
254 changed files with 49543 additions and 9085 deletions

View File

@@ -1,8 +1,7 @@
# 📋 未完成功能清单
> 文档创建: 2026-04-09
> 最后更新: 2026-04-11
> 数据来源
> 最后更新: 2026-04-13
> 说明: 记录所有未完成的功能任务,跟踪开发进度
> 优先级说明: P1=核心功能 P2=重要功能 P3=增强功能
> 优先级值1-5: 5=最高优先级(多次提及自动提升)
@@ -15,82 +14,185 @@
|------|--------|--------|--------|--------|
| 三:热量追踪+营养分析 | 7 | 7 | 0 | 100% ✅ |
| 四:购物清单 | 5 | 5 | 0 | 100% ✅ |
| 十二:社交+通知增强 | 4 | 2 | 2 | 50% 🟡 |
| 十三AI+规划高级功能 | 4 | 4 | 0 | 100% ✅ |
| 十四:接口能力挖掘 | 8 | 0 | 8 | 0% 🟢 |
| 十四:接口能力挖掘 | 8 | 1 | 7 | 12% 🟡 |
| 十五:后端接口增强 | 6 | 0 | 6 | 0% 🔴 |
| 十六:用户体验优化+Bug 修复 | 7 | 7 | 0 | 100% ✅ |
| 十七紧急Bug修复 | 14 | 14 | 0 | 100% ✅ |
| 十九综合Bug修复+功能增强 | 18 | 18 | 0 | 100% ✅ |
| 二十:用户体验优化+交互增强 | 7 | 7 | 0 | 100% ✅ |
| 二十一:菜谱详情页功能增强 | 1 | 1 | 0 | 100% ✅ |
| **二十二Picid功能Bug修复** | **2** | **2** | **0** | **100% ✅** |
| **合计** | **152** | **136** | **16** | **89%** |
| 二十二Picid功能Bug修复 | 2 | 2 | 0 | 100% ✅ |
| 二十三:数据管理中心 | 3 | 1 | 2 | 33% 🟡 |
| 二十四:笔记+浏览记录功能 | 2 | 2 | 0 | 100% ✅ |
| 二十五多项功能Bug修复 | 6 | 6 | 0 | 100% ✅ |
| **二十六API v3.2.0迁移** | **5** | **5** | **0** | **100% ✅** |
| **二十七首页Discover瀑布流** | **8** | **8** | **0** | **100% ✅** |
| **二十八:瀑布流渐进式渲染+分页** | **3** | **3** | **0** | **100% ✅** |
| **合计** | **179** | **162** | **17** | **91%** |
---
## 五、开发阶段
## ✅ 阶段二十六API v3.2.0迁移P1
### 阶段一基础设施P1✅ 已完成
**目标**适配后端API v3.2.0,移除已删除接口,更新评分系统
**前置依赖**:无
**关键阻塞**:无
**完成日期**2026-04-12
**目标**:搭建 Hive 本地数据库 + 数据模型 + 持久化收藏
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 26.1 | 🔧 移除preference接口 | `lib/src/config/api_config.dart` | P1 | ✅ 已完成 | api_preference.php已删除偏好改为本地存储 |
| 26.2 | 💾 偏好本地存储 | `lib/src/repositories/preference_repository.dart` | P1 | ✅ 已完成 | SharedPreferences替代API存储 |
| 26.3 | ⭐ 评分接口迁移 | `lib/src/repositories/action_repository.dart` | P1 | ✅ 已完成 | recommend→rate(1-5分) |
| 26.4 | 📱 信息流接口更新 | `lib/src/repositories/feed_repository.dart` | P1 | ✅ 已完成 | 移除personal接口 |
| 26.5 | 🎮 Controller适配 | 多个Controller文件 | P1 | ✅ 已完成 | feed/action/recipe_detail控制器更新 |
## 六、页面导航规划
### 功能详情
```text
发现页
#### 26.1 移除preference接口
- **变更**`api_preference.php` 已被后端删除
- **解决方案**
-`api_config.dart` 移除 `preference` 常量
- 新增 `filter``discover` 接口定义
## 八、开发优先级矩阵
#### 26.2 偏好本地存储
- **变更**用户偏好设置不再有后端API支持
- **解决方案**
- `PreferenceRepository` 改为使用 `SharedPreferences` 本地存储
- 保留所有方法签名,确保向后兼容
| 功能 | 用户价值 | 技术难度 | 依赖关系 | 优先级 |
|------|---------|---------|---------|--------|
| Hive 本地数据库 | ⭐⭐⭐⭐⭐ | ⭐⭐ | 无 | P1-0 |
| 收藏持久化 | ⭐⭐⭐⭐ | ⭐ | 数据库 | P1-1 |
| 饮食日记 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 数据库 | P1-2 |
| 热量追踪 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 饮食日记 | P1-3 |
| 营养分析报告 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 饮食日记+fl_chart | P1-4 |
| 购物清单 | ⭐⭐⭐⭐ | ⭐⭐ | 数据库 | P2-1 |
| 烹饪计时器 | ⭐⭐⭐ | ⭐⭐ | 无 | P2-2 |
| 用量换算 | ⭐⭐⭐ | ⭐ | 无 | P2-3 |
| 过敏原检测 | ⭐⭐⭐ | ⭐⭐ | 偏好数据 | P2-4 |
| 烹饪笔记 | ⭐⭐ | ⭐⭐ | 数据库 | P3-1 |
| 用餐提醒 | ⭐⭐ | ⭐⭐⭐ | 本地通知 | P3-2 |
| BMI 计算器 | ⭐⭐ | ⭐ | 无 | P3-3 |
| 份量缩放 | ⭐⭐ | ⭐ | 无 | P3-4 |
#### 26.3 评分接口迁移
- **变更**`recommend` 接口改为 `rate` 评分接口
- **新特性**
- 评分范围1-5分
- 每日限制每个IP每天最多30次
- 不可取消:评分后无法撤销
- **解决方案**
- `ActionRepository.recommend()``ActionRepository.rate()`
- `IpStatus` 字段更新:`recommendUsed``rateUsed`
- 保留 `@Deprecated` 兼容方法
#### 26.4 信息流接口更新
- **变更**`api_feed.php?act=personal` 接口已删除
- **解决方案**
- `FeedRepository` 移除 `fetchPersonal()` 方法
- `FeedType` 枚举移除 `personal`
- 信息流类型从4种减少为3种推荐/最新/热门
#### 26.5 Controller适配
- **变更**Controller需要适配新的Repository接口
- **解决方案**
- `FeedController`移除personal相关逻辑
- `ActionController`recommendItem → rateItem
- `RecipeDetailController`recommendRecipe → rateRecipe
### API变更对照表
| 原接口 | 新接口/方案 | 说明 |
|--------|------------|------|
| `api_preference.php` | SharedPreferences本地存储 | 已删除 |
| `api_feed.php?act=personal` | 使用 `act=recommend` 替代 | 已删除 |
| `api_action.php?act=recommend` | `api_action.php?act=rate` | 改为评分(1-5分) |
| `recommend_nums/recommend_score` | `rate_nums/rate_score` | 字段重命名 |
---
## 九、验收标准
## ✅ 阶段二十七首页Discover瀑布流重构P1
## 🟡 阶段增强功能P2/P3
## 阶段二十八:瀑布流渐进式渲染+分页加载P1
**目标**:烹饪计时器 + 用量换算 + 过敏原检测 + 烹饪笔记 + 用餐提醒 + BMI + 份量缩放
**前置依赖**:各功能独立,无强依赖
**目标**:实现卡片渐进式渲染、到底刷新按钮、分页增量加载
**前置依赖**阶段二十七Discover瀑布流已完成
**关键阻塞**:无
**完成日期**2026-04-13
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 28.1 | ✨ 渐进式渲染 | `lib/src/widgets/discover/discover_waterfall.dart` | P1 | ✅ 已完成 | 卡片逐个绘制+骨架屏占位+入场动画 |
| 28.2 | 🔄 刷新按钮+分页 | `lib/src/pages/home/home_page.dart` | P1 | ✅ 已完成 | 到底显示刷新按钮+进度条+时间戳 |
| 28.3 | 📦 增量获取支持 | `lib/src/repositories/discover_repository.dart` | P2 | ✅ 已完成 | 新增fetchMore方法 |
### 功能详情
## ✅ 阶段二十四:笔记+浏览记录功能P1
**目标**:修复笔记保存问题,实现真实浏览记录功能
**前置依赖**:无
**关键阻塞**:无
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 24.1 | 📝 笔记功能增强 | `lib/src/pages/tools/cooking_note_page.dart` | P1 | ✅ 已完成 | 标签关键字+菜品字段快捷输入+SharedPreferences存储 |
| 24.2 | 👀 浏览记录功能 | `lib/src/pages/profile/footprints_page.dart` | P1 | ✅ 已完成 | 真实浏览记录+SharedPreferences存储+管理功能 |
### 功能详情
#### 24.1 笔记功能增强
- **问题**:笔记保存后丢失
- **解决方案**
- 新增 SharedPreferences 双重存储,确保数据不丢失
- 新增标签关键字功能,支持为笔记添加多个标签
- 新增菜品字段快捷输入:菜名、简介、分类、标签、难度、时间、食材
- **影响文件**
- `lib/src/models/cooking_note_model.dart` — 新增 tags 字段
- `lib/src/controllers/cooking_note_controller.dart` — SharedPreferences 存储
- `lib/src/pages/tools/cooking_note_page.dart` — 标签+快捷输入UI
#### 24.2 浏览记录功能
- **问题**:浏览记录页面使用假数据
- **解决方案**
- 新增 BrowseHistoryModel 模型
- 新增 BrowseHistoryController 控制器
- 菜谱详情页自动记录浏览历史
- 支持左滑删除、清空所有记录
- **影响文件**
- `lib/src/models/browse_history_model.dart` — 新建
- `lib/src/controllers/browse_history_controller.dart` — 新建
- `lib/src/pages/profile/footprints_page.dart` — 重构
- `lib/src/controllers/recipe_detail_controller.dart` — 集成
---
## 🔵 阶段API v2.0.0 迁移 + Bug修复P0/P1
## 🟡 阶段二十三数据管理中心P2
**目标**:迁移到 API v2.0.0 合并接口修复用户反馈的8个严重Bug
**目标**统一管理分类标签和过敏原数据支持API同步与本地持久化
**前置依赖**:阶段十四(过敏原数据)
**关键阻塞**:无
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 23.1 | 📊 数据管理中心页面 | `lib/src/pages/profile/data_center_page.dart` | P2 | ✅ 已完成 | 分类标签(口味/工艺/食材)+过敏原管理页面 |
| 23.2 | 💾 LocalDataService 数据服务 | `lib/src/services/data/local_data_service.dart` | P2 | ✅ 已完成 | SharedPreferences持久化+API同步+24h缓存 |
| 23.3 | ⚠️ 过敏原智能过滤 | 搜索/推荐模块集成 | P2 | ❌ 未实现 | 将用户设置的过敏原用于菜品过滤 |
---
### 功能详情
## 🔴 阶段九:架构修复+核心BugP0/P1
#### 23.1 数据管理中心页面
- **入口**:我的 → 首页 → 📊 数据管理中心
- **功能**
- 分类标签区域:口味标签(蓝色)、工艺标签(橙色)、食材分类(绿色)
- 过敏原管理区域21大类585种过敏原支持展开/收起
- 个人过敏原设置:勾选后即时保存到本地
- 一键同步所有数据
- **技术方案**Cupertino组件 + LocalDataService + showCupertinoModalPopup
**目标**:修复架构违规和核心功能缺失
**发现时间**2026-04-10flutter analyze 全面扫描 + 项目分析)
#### 23.2 LocalDataService
- **功能**
- 口味标签:`api.php?act=tags`
- 工艺标签:`api.php?act=list` 提取 process 字段
- 食材分类:`api.php?act=categories`
- 过敏原全量:`gmy.json` (585条)
- 用户过敏原:本地勾选保存
- **缓存策略**SharedPreferences + 24h过期 + 手动刷新
## 🟡 阶段十代码质量提升P1/P2
---
## 🟢 阶段十一:烹饪模式+营养仪表盘P1
**目标**:实现核心增强功能,提升应用价值
**前置依赖**:阶段九完成
#### 23.3 过敏原智能过滤(待开发)
- **目标**:搜索/推荐时自动过滤含用户过敏原的菜品
- **实现方式**:调用 `LocalDataService.getUserAllergens()` 获取用户过敏原列表,在推荐结果中排除含这些过敏原的菜谱
- **影响文件**:搜索页、首页推荐、智能推荐服务
---
@@ -221,6 +323,7 @@
- **接口支持**`api.php?act=full&id=xxx` 返回 `allergens` 字段
- **数据文件**`http://eat.wktyl.com/api/assets/gmy.json`585种过敏原数据
- **功能**
- ✅ 过敏原数据本地化数据管理中心已实现见阶段23
- ⚠️ 菜谱详情页过敏原警示
- 🚫 自动过滤含过敏原菜谱
- 🔄 食材替代建议
@@ -324,529 +427,4 @@
---
## 📎 软件特性功能汇总
> 以下功能已开发完成或开发中,从历史版本号归档而来
> 2026-04-11 重新审核:修正不实标记,区分"已完成""部分完成""未完成"
| 功能 | 状态 | 首次版本 | 说明 |
|------|------|---------|------|
| 热量追踪+营养分析 | ⚠️ 部分完成 | v0.3x | 环形图+柱状图+目标设置 ✅;饼图+折线图 ❌ |
| 购物清单 | ✅ 已完成 | v0.4x | 添加/删除/勾选/分类 ✅;从菜谱添加 ✅(菜谱详情页"购物"按钮) |
| 烹饪计时器 | ✅ 已完成 | v0.5x | 多步骤倒计时 |
| 用量换算 | ✅ 已完成 | v0.5x | 常用单位换算 |
| 过敏原检测 | ✅ 已完成 | v0.5x | 标记含过敏原菜谱 ✅AllergenChecker完整实现 |
| 烹饪笔记 | ✅ 已完成 | v0.5x | 按菜谱关联笔记 ✅CookingNotePage完整实现 |
| 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 | 1071 个 info0 error/warning |
| 工具中心 | ✅ 已完成 | v0.9x | 工具入口Bar+分类筛选+使用频率统计 |
| 过敏原检查工具 | ✅ 已完成 | v0.9x | 食材过敏原查询与分类浏览API数据源 |
| 用餐时段推荐 | ✅ 已完成 | v0.9x | 根据时间推荐早中晚餐菜谱 |
| 每周菜单规划 | ✅ 已完成 | v0.88x | 一周三餐UI ✅;数据持久化 ✅Hive从菜谱添加 ✅ |
| 食材详情查询 | ✅ 已完成 | v0.9x | 食材列表+搜索 ✅;营养信息+选购指南+存储提示 ✅ |
| 统一Controller Binding | ✅ 已完成 | v0.63 | AppBinding全局管理+移除重复注册 |
| AI菜谱推荐 | ✅ 已完成 | v0.88x | 基于用户偏好+浏览历史+收藏记录的智能推荐 ✅ |
| 就寝提醒 | ✅ 已完成 | v0.88x | 智能推荐就寝时间+睡前进食提醒 ✅ |
---
## 🛠️ 工具中心开发记录
> 2026-04-10 开发完成
### 已实现工具列表
| 工具名称 | 路由 | 是否联网 | 完成度 | 说明 |
|---------|------|---------|--------|------|
| ⏱️ 烹饪计时器 | `/tools/timer` | ❌ 离线 | ✅ 完整 | 多步骤倒计时 |
| 📏 用量换算 | `/tools/converter` | ❌ 离线 | ✅ 完整 | 常用单位换算 |
| 🧮 BMI 计算器 | `/tools/bmi` | ❌ 离线 | ✅ 完整 | 含健康建议 |
| ⚖️ 份量缩放 | `/tools/scaler` | ❌ 离线 | ⚠️ 部分 | 按比例调整 ✅;食材硬编码,不支持从菜谱导入 ❌ |
| 🥜 过敏原检查 | `/tools/allergen` | ✅ 联网 | ✅ 完整 | 食材过敏原查询 |
| 🍽️ 用餐时段推荐 | `/tools/meal-time` | ✅ 联网 | ✅ 完整 | 根据时间推荐菜谱 |
| 📅 每周菜单规划 | `/tools/planner` | ❌ 离线 | ⚠️ 部分 | UI ✅;数据不持久化 ❌;从收藏添加 ❌ |
| 🥕 食材详情查询 | `/tools/ingredient` | ✅ 联网 | ⚠️ 部分 | 列表+搜索 ✅;营养详情+选购指南 ❌ |
| 📊 营养中心 | `/tools/nutrition` | ✅ 联网 | ⚠️ 部分 | 环形图+目标 ✅;饼图+折线图 ❌ |
| 📈 热门统计 | `/tools/stats` | ✅ 联网 | ✅ 完整 | 热门菜谱排行 |
### 技术实现
1. **工具数据模型** (`tool_item_model.dart`)
- ToolItem: 工具项数据结构
- ToolCategory: 工具分类枚举
- ToolRegistry: 工具注册表
2. **工具控制器** (`tools_controller.dart`)
- 工具列表管理
- 使用频率统计SharedPreferences
- 搜索与分类过滤
- 常用工具推荐
3. **工具中心页面** (`tools_center_page.dart`)
- 搜索栏
- 分类标签筛选
- 工具网格布局(一行两个)
- 联网状态指示器(绿点/红点)
4. **收藏页工具入口Bar**
- 显示常用工具快捷入口
- 更多工具入口按钮
- 使用频率排序
### 文件清单
```
lib/src/
├── models/tools/
│ └── tool_item_model.dart # 工具数据模型
├── controllers/tools/
│ └── tools_controller.dart # 工具控制器
└── pages/tools/
├── tools_center_page.dart # 工具中心页面
├── allergen_checker_page.dart # 过敏原检查
├── meal_time_recommend_page.dart # 用餐时段推荐
├── meal_planner_page.dart # 每周菜单规划
└── ingredient_detail_page.dart # 食材详情查询
```
---
## 🔴 阶段十七紧急Bug修复P0/P1
**目标**:修复用户反馈的多个严重问题,提升应用稳定性
**发现时间**2026-04-11用户反馈
**关键阻塞**:无
**优先级**P0=最高优先级(影响用户使用的严重问题)
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 17.1 | 🔍 搜索详情卡死修复 | `lib/src/pages/search/search_page.dart` | P0 | ✅ 已完成 | 使用Get.toNamed命名路由跳转 |
| 17.2 | ❤️ 收藏页更多按钮GetX报错 | `lib/src/pages/favorites/favorites_page.dart` | P0 | ✅ 已完成 | 使用命名路由跳转工具中心 |
| 17.3 | 🌙 夜间模式字体颜色优化 | `lib/src/config/design_tokens.dart` | P1 | ✅ 已完成 | 调整DarkDesignTokens文字颜色值 |
| 17.4 | 📊 营养中心报告GetX报错 | `lib/src/bindings/feature_binding.dart` | P1 | ✅ 已完成 | Controller改为permanent注册 |
| 17.5 | 🎲 今天吃什么筛选优化 | `lib/src/pages/what_to_eat/what_to_eat_page.dart` | P1 | ✅ 已完成 | 修复筛选逻辑和随机选择 |
| 17.6 | 🏠 首页加载骨架屏优化 | `lib/src/pages/home_page.dart` | P1 | ✅ 已完成 | 添加骨架屏组件和超时保护 |
| 17.7 | 📋 购物清单UI优化 | `lib/src/pages/shopping/shopping_list_page.dart` | P2 | ✅ 已完成 | 增大图标尺寸,优化布局 |
| 17.8 | ⚙️ 主题设置iOS风格重构 | `lib/src/pages/settings/personalization_page.dart` | P2 | ✅ 已完成 | 重构为iOS设计风格 |
| 17.9 | 🏷️ 口味偏好数据修复 | `lib/src/pages/settings/preference_page.dart` | P1 | ✅ 已完成 | 添加错误处理和默认数据 |
| 17.10 | 👁️ 菜谱详情浏览量统计 | `lib/src/pages/recipe/recipe_detail_page.dart` | P1 | ✅ 已完成 | 增加浏览量并显示 |
| 17.11 | 🔥 热门排行今日数据修复 | `lib/src/pages/hot/hot_page.dart` | P1 | ✅ 已完成 | 修复API参数传递 |
| 17.12 | 🍽️ 用餐时段推荐卡死修复 | `lib/src/pages/tools/meal_time_recommend_page.dart` | P0 | ✅ 已完成 | 添加超时处理和默认数据 |
| 17.13 | 🛠️ 工具中心跳转分裂修复 | `lib/src/controllers/tools/tools_controller.dart` | P0 | ✅ 已完成 | 使用Get.toNamed命名路由 |
| 17.14 | 📝 文档更新 | `docs/dev/UNFINISHED_FEATURES.md` | P2 | ✅ 已完成 | 记录修复内容 |
### 问题详情
#### 17.1 搜索详情卡死
- **现象**:搜索结果点击详情后应用卡死闪退
- **原因**使用Get.to()直接跳转Widget未正确注册Binding
- **方案**改用Get.toNamed('/recipe-detail', arguments: recipeId)
#### 17.2 收藏页更多按钮报错
- **现象**:点击"更多"按钮后GetX报错
- **原因**直接跳转ToolsCenterPage未通过路由系统
- **方案**使用Get.toNamed('/tools')
#### 17.3 夜间模式字体颜色
- **现象**:夜间模式大部分字体灰色看不清
- **原因**DarkDesignTokens文字颜色值过暗
- **方案**调整text2为#EBEBF5text3为#8E8E93
#### 17.4 营养中心报告报错
- **现象**点击报告按钮GetX报错
- **原因**MealRecordController未正确注册
- **方案**在FeatureBinding中使用permanent: true注册
#### 17.5 今天吃什么筛选
- **现象**:分类筛选不支持动态筛选,随机选择无结果
- **原因**:筛选逻辑未正确触发,空结果无提示
- **方案**优化筛选触发机制添加空结果Toast提示
#### 17.6 首页加载优化
- **现象**加载时间超过8秒无骨架屏
- **原因**:无超时保护,无骨架屏组件
- **方案**添加12秒超时保护创建SkeletonLoader组件
#### 17.7 购物清单UI
- **现象**:图标太小,列表分裂,容易误触
- **原因**:图标尺寸过小,间距不合理
- **方案**:增大图标尺寸,优化布局间距
#### 17.8 主题设置风格
- **现象**不符合iOS设计风格
- **原因**使用Material风格组件
- **方案**重构为Cupertino风格符合iOS设计规范
#### 17.9 口味偏好数据
- **现象**:显示"暂无分类数据"
- **原因**API返回数据未正确处理
- **方案**:添加错误处理和默认数据展示
#### 17.10 菜谱浏览量
- **现象**:详情页无浏览量显示
- **原因**:未调用浏览量统计接口
- **方案**加载时调用viewnums接口显示浏览次数
#### 17.11 热门排行今日数据
- **现象**:无今日数据
- **原因**API参数传递错误
- **方案**修复period参数为'today'
#### 17.12 用餐时段推荐卡死
- **现象**:页面卡死黑屏
- **原因**:网络请求无超时处理,无错误状态
- **方案**添加8秒超时添加默认用餐时段数据
#### 17.13 工具中心跳转分裂
- **现象**:跳转页面出现分裂感,左边工具中心右边目标页面
- **原因**:路由跳转方式问题
- **方案**统一使用Get.toNamed命名路由
### 验收标准
- [x] 搜索结果点击详情正常跳转
- [x] 收藏页更多按钮正常跳转
- [x] 夜间模式字体清晰可见
- [x] 营养中心报告按钮正常跳转
- [x] 今天吃什么支持动态筛选
- [x] 首页加载有骨架屏
- [x] 购物清单图标易于点击
- [x] 主题设置符合iOS风格
- [x] 口味偏好正常显示数据
- [x] 菜谱详情显示浏览量
- [x] 热门排行显示今日数据
- [x] 用餐时段推荐正常加载
- [x] 工具中心跳转无分裂感
---
## <20> 阶段十八浑水摸鱼功能补全P1/P2— ✅ 已完成
**目标**:修复标记为"已完成"但实际未完成或仅部分完成的功能
**发现时间**2026-04-11代码审核
**完成时间**2026-04-11
**关键阻塞**:无
**优先级**P1=影响用户功能完整性
### 问题清单
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 18.1 | 📝 烹饪笔记页面 | `lib/src/pages/tools/cooking_note_page.dart` | P1 | ✅ 已完成 | 创建完整页面,支持按菜谱关联、增删改查 |
| 18.2 | 🥜 过敏原检测实现 | `lib/src/services/allergen_checker.dart` | P1 | ✅ 已完成 | 接入用户偏好设置,实现关键词匹配检测逻辑 |
| 18.3 | ⚖️ 份量缩放-从菜谱导入 | `lib/src/pages/tools/serving_scaler_page.dart` | P2 | ✅ 已完成 | 支持从菜谱详情页跳转时携带食材数据 |
| 18.4 | 📅 菜单规划-数据持久化 | `lib/src/pages/tools/meal_planner_page.dart` | P1 | ✅ 已完成 | 接入SharedPreferences持久化按周保存/加载 |
| 18.5 | 📅 菜单规划-从收藏添加 | `lib/src/pages/tools/meal_planner_page.dart` | P2 | ✅ 已完成 | 实现收藏列表选择弹窗从FavoritesController获取数据 |
| 18.6 | 🛒 购物清单-从菜谱添加入口 | `lib/src/pages/profile/shopping_list_page.dart` | P1 | ✅ 已完成 | 菜谱详情页已有"购物"按钮调用addItemsFromRecipe |
| 18.7 | 🥕 食材详情-营养信息 | `lib/src/pages/tools/ingredient_detail_page.dart` | P2 | ✅ 已完成 | 创建60+食材营养数据库,展示热量/蛋白质/脂肪/碳水/纤维+关键营养素+时令+选购技巧+储存方法 |
| 18.8 | 📊 营养中心-饼图+折线图 | `lib/src/pages/profile/nutrition/nutrition_report_page.dart` | P2 | ✅ 已完成 | 新增MealTypePieChart餐次分布饼图现有折线图+营养素饼图+餐次饼图完整 |
### 实施记录
**第一批P1 — 核心功能缺失)**
1. **18.1 烹饪笔记页面** — 创建CookingNotePage支持添加/编辑/删除笔记,从菜谱详情页跳转
2. **18.2 过敏原检测实现** — AllergenChecker接入PreferenceController11类过敏原关键词匹配
3. **18.4 菜单规划持久化** — 使用StorageService+SharedPreferences按周保存/加载,自动清理过期数据
4. **18.6 购物清单从菜谱添加** — 已确认recipe_detail_page.dart中已有_addToShoppingList方法
**第二批P2 — 功能增强)**
5. **18.3 份量缩放从菜谱导入** — ServingScalerPage支持ingredients+defaultServings参数路由传递数据
6. **18.5 菜单规划从收藏添加** — _addFromFavorites方法CupertinoActionSheet选择收藏菜谱
7. **18.7 食材详情营养信息** — 创建IngredientNutritionDb60+食材),页面展示营养概览/占比/关键营养素/时令/选购/储存
8. **18.8 营养中心饼图+折线图** — 新增MealTypePieChart组件早/午/晚/加餐热量分布),集成到营养报告页
### 新增文件
- `lib/src/services/data/ingredient_nutrition_db.dart` — 食材营养数据库60+种常见食材)
### 验收标准
- [x] 烹饪笔记:可从菜谱详情进入,支持添加/编辑/删除笔记
- [x] 过敏原检测:用户设置过敏原后,菜谱详情页显示过敏原警告
- [x] 菜单规划:退出后重新打开数据不丢失
- [x] 购物清单:菜谱详情页可一键添加食材到购物清单
- [x] 份量缩放:支持从菜谱详情页导入真实食材列表
- [x] 菜单规划:可从收藏列表选择菜谱添加到规划
- [x] 食材详情:显示营养成分数据和选购建议
- [x] 营养报告:包含饼图(营养素占比+餐次分布)和折线图(热量趋势)
---
## 🔴 阶段十九综合Bug修复+功能增强P0/P1/P2— 🔄 进行中
**目标**:修复用户反馈的多个问题,增强现有功能
**开始时间**2026-04-11
**关键阻塞**:无
**优先级**P0=崩溃 P1=功能缺陷 P2=体验优化
### 问题清单
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 19.1 | 🛠️ 发现页更多按钮卡死 | `lib/src/pages/tools/tools_center_page.dart` | P0 | ✅ 已完成 | 添加ToolsController安全检查防止未注册时崩溃 |
| 19.2 | ⏱️ 烹饪计时器常用预设 | `lib/src/pages/tools/cooking_timer_page.dart` | P1 | ✅ 已完成 | 添加18种常用烹饪步骤快捷添加煮鸡蛋/煮面条/炖汤等) |
| 19.3 | 📋 菜谱详情显示全部数据 | `lib/src/pages/home/recipe_detail_page.dart` | P1 | ✅ 已完成 | 显示浏览量/营养成分/分类/标签/过敏原/时间等全部字段笔记icon横向滚动 |
| 19.4 | 🏷️ 口味偏好分类+标签修复 | `lib/src/models/user_preference_model.dart` | P1 | ✅ 已完成 | 修复PreferenceCategory id字符串解析+children子分类+标签显示 |
| 19.5 | 🔥 热门排行数据修复 | `lib/src/repositories/hot_repository.dart` | P1 | ✅ 已完成 | 添加fallback机制period无数据时回退total |
| 19.6 | 🛒 购物清单按钮增大 | `lib/src/pages/profile/shopping_list_page.dart` | P2 | ✅ 已完成 | 勾选/删除按钮增大至44x44点击区域icon增大至22 |
| 19.7 | 🔄 我的页面左右滑动 | `lib/src/pages/profile/profile_page.dart` | P2 | ✅ 已完成 | 使用PageView替代条件渲染支持手势滑动+SegmentedControl联动 |
| 19.8 | 📝 笔记保存后不显示 | `lib/src/pages/tools/cooking_note_page.dart` | P1 | ✅ 已完成 | 修复异步保存未await+添加Obx响应式刷新 |
| 19.9 | 🌙 深色模式跟随系统 | `lib/src/services/ui/theme_service.dart` | P1 | ✅ 已完成 | 添加DarkModeSource枚举支持system/manual模式监听系统亮度变化 |
| 19.10 | 📝 字体大小全局生效 | `lib/main.dart` | P1 | ✅ 已完成 | 通过GetCupertinoApp.builder设置全局textScaleFactor |
| 19.11 | 📱 底部Tab栏高度+安全区 | `lib/src/widgets/glass/glass_nav_bar.dart` | P1 | ✅ 已完成 | 高度64→68添加底部安全区域padding |
| 19.12 | 🧊 白色区域遮住底部 | `lib/src/widgets/navigation_widgets.dart` | P0 | ✅ 已完成 | 移除SafeArea(bottom:false)GlassNavBar自行处理安全区域 |
| 19.13 | 📂 推荐分类层级导航 | `lib/src/pages/discover/category_browse_page.dart` | P1 | ✅ 已完成 | 大类→小类→菜谱列表→详情新建CategoryBrowsePage |
| 19.14 | 🎲 今天吃什么GetX报错 | `lib/src/pages/discover/what_to_eat_page.dart` | P0 | ✅ 已完成 | 控制器注册+加载优化+分类扁平化 |
| 19.15 | 🔍 搜索显示相似结果 | `lib/src/pages/home/search_page.dart` | P2 | ✅ 已完成 | 无结果时提取关键词模糊搜索,显示相似推荐列表 |
| 19.16 | ⚙️ 设置功能全局生效 | `lib/src/widgets/navigation_widgets.dart` | P1 | 🔄 进行中 | 底部栏样式已全局生效,动画/对话框等仍需逐项接入 |
| 19.17 | 📖 用餐时段推荐页 | `lib/src/pages/tools/eating_times_page.dart` | P2 | ✅ 已完成 | 基于eating_times.json创建5类时段浏览+菜谱列表 |
| 19.18 | 🌐 网络请求优化 | `lib/src/services/api/api_service.dart` | P1 | ✅ 已完成 | 增强日志+重试机制+统一离线检查+缓存解析修复 |
### 实施记录
**19.1 发现页更多按钮卡死**
- 问题:点击收藏页"更多"按钮跳转工具中心时ToolsController未注册导致崩溃
- 方案添加Get.isRegistered检查未注册时显示友好错误页面和返回按钮
**19.2 烹饪计时器常用预设**
- 问题:添加步骤时需要手动输入名称和时长
- 方案添加18种常用烹饪预设煮鸡蛋10min、煮面条8min、炖汤45min等点击自动填充
**19.3 菜谱详情显示全部数据**
- 问题详情页只显示部分数据笔记icon溢出屏幕
- 方案添加statistics/tags/meta/categorizedIngredients/allergens等全部字段显示笔记按钮改为横向滚动
**19.4 口味偏好分类+标签修复**
- 问题API返回id为字符串但模型解析为int导致nullchildren未解析
- 方案PreferenceCategory添加动态类型解析(_parseInt)添加children字段和子分类显示
**19.8 笔记保存后不显示**
- 问题addNote是异步方法但未awaitsetState在数据保存前执行
- 方案await addNote后再setState使用Obx包裹_buildBody实现响应式刷新
**19.9 深色模式跟随系统**
- 问题:深色模式只能手动切换,不支持跟随系统
- 方案添加DarkModeSource枚举(system/manual)main.dart添加WidgetsBindingObserver监听系统亮度变化
**19.10 字体大小全局生效**
- 问题:字体大小设置只在个性化设置页面可见
- 方案通过GetCupertinoApp.builder包裹MediaQuery设置全局textScaleFactor
**19.12 白色区域遮住底部**
- 问题SafeArea(bottom:false)导致底部导航栏下方出现白色区域
- 方案移除外层SafeAreaGlassNavBar自行通过MediaQuery.padding.bottom处理安全区域
**19.13 推荐分类层级导航**
- 问题推荐Tab显示假数据
- 方案创建CategoryBrowsePage实现大类→小类→菜谱列表三级导航CategoryModel添加children字段
### 待解决问题
- 设置功能全局生效:底部栏样式已接入,动画/对话框/消息气泡/卡片方向等仍需逐项接入各页面
- API扩展功能参考API文档扩展更多接口能力阶段十四/十五)
**19.14 今天吃什么GetX报错**
- 问题:页面跳转时控制器未注册,分类数据加载慢
- 方案WhatToEatController在AppBinding注册分类扁平化处理食材1413子类限制20个添加12秒超时
**19.15 搜索显示相似结果**
- 问题:搜索无结果时直接显示空白
- 方案SearchController添加_searchSimilar方法提取关键词子串+常见食材后缀进行模糊搜索,空结果视图显示相似推荐列表
**19.17 用餐时段推荐页**
- 问题设置页需要基于eating_times.json扩展新功能
- 方案创建EatingTimesPage从API获取5类时段数据(standard/combined/frequency/method/other)点击时段搜索菜谱EatingTimeRecipesPage显示结果
**19.18 网络请求优化**
- 问题ApiService日志拦截器无输出、无重试机制、post/put/delete重复代码
- 方案:增强日志拦截器(debugPrint请求/响应/错误)、添加_executeWithRetry(最多2次重试)、统一_executeWithOfflineCheck、修复_tryGetCache缓存数据jsonDecode
### 验收标准
- [x] 发现页更多按钮正常跳转工具中心
- [x] 烹饪计时器支持常用预设快速添加
- [x] 菜谱详情显示全部API数据
- [x] 口味偏好分类和标签正确解析
- [x] 热门排行有fallback机制
- [x] 购物清单按钮易于点击
- [x] 我的页面支持左右滑动切换
- [x] 笔记保存后立即显示
- [x] 深色模式支持跟随系统
- [x] 字体大小全局生效
- [x] 底部Tab栏适配安全区域
- [x] 白色区域不再遮住底部
- [x] 推荐分类支持层级导航
- [x] 今天吃什么正常加载
- [x] 搜索无结果时显示相似推荐
- [x] 用餐时段推荐页可浏览
- [x] 网络请求有日志和重试
---
## 🟢 阶段二十:用户体验优化+交互增强P0/P1/P2— ✅ 已完成
**目标**修复关键Bug优化用户体验增强交互功能
**完成时间**2026-04-11
**关键阻塞**:无
**优先级**P0=崩溃/闪退 P1=功能缺陷 P2=体验优化
### 问题清单
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 20.1 | 🐛 笔记按钮闪退修复 | `cooking_note_page.dart` | P0 | ✅ 已完成 | 安全Controller初始化防止空指针异常 |
| 20.2 | 🚀 详情页骨架屏加载 | `recipe_detail_page.dart` | P1 | ✅ 已完成 | 骨架屏+8秒超时保护+重试按钮 |
| 20.3 | 🔍 发现页推荐导航优化 | `discover_page.dart` + `category_browse_page.dart` | P1 | ✅ 已完成 | 智能路由:子分类/直接菜谱列表/分类浏览 |
| 20.4 | 🖼️ 图片Invalid image data错误 | `recipe_image.dart` | P0 | ✅ 已完成 | 图片格式验证(魔数检测)+自动Fallback |
| 20.5 | ⚠️ 工具中心GetX警告+溢出 | `tools_center_page.dart` | P1 | ✅ 已完成 | StatefulWidget重构+动态padding计算 |
| 20.6 | 👆 发现页左右滑动功能 | `discover_page.dart` | P2 | ✅ 已完成 | Dismissible组件+快速操作菜单 |
| 20.7 | 🍽️ 用餐时段图片加载 | `meal_time_recommend_page.dart` | P1 | ✅ 已完成 | 引入RecipeImage组件显示封面图 |
### 实施记录
**20.1 笔记按钮闪退修复**
- **问题**:菜谱详情页点击"笔记"按钮导致应用卡死/闪退
- **根因**Controller未安全初始化空指针异常
- **方案**
- 实现安全的Controller获取模式带错误状态
- 添加_controllerError标志位防止重复异常
- 初始化时try-catch包裹失败时显示友好提示
- 所有Controller调用使用getter安全访问
**20.2 详情页骨架屏加载**
- **问题**菜谱详情页加载超过5秒用户体验差
- **方案**
- 实现完整骨架屏封面图250px + 标题描述 + 统计数据4列 + 内容区域)
- 8秒超时检测超时后显示提示和重试按钮
- ActionController/FavoritesController安全获取所有操作添加try-catch
**20.3 发现页推荐导航优化**
- **问题1**:点击推荐下的"菜谱"分类进入后不显示子类
- **问题2**:点击"食材"分类显示"暂无菜谱"
- **方案**
- 分类点击智能路由:有子分类→子类浏览 / 有菜谱数→直接加载 / 都没有→分类浏览
- 新增loadRecipesDirectly参数支持直接加载模式
- CategoryBrowsePage支持三种显示模式
**20.4 图片Invalid image data错误**
- **问题**:多个页面显示"Exception: Invalid image data"
- **根因**API返回的非图片数据被当作图片解析
- **方案**
- 新增_isValidImageData()方法验证图片格式
- 支持JPEG/PNG/GIF/WebP/BMP格式检测文件头魔数判断
- 无效数据自动触发Fallback链尝试下一个URL
- errorBuilder回调中增加自动重试机制
**20.5 工具中心GetX警告+布局溢出**
- **问题1**:工具中心显示"use of a GetX has been detected"警告
- **问题2**底部溢出54像素
- **方案**
- 重构为StatefulWidget安全初始化Controller
- GridView使用childAspectRatio: 0.85替代固定高度
- padding动态计算底部安全区域
**20.6 发现页左右滑动功能**
- **新功能**:热门列表支持左右滑动操作
- **交互设计**
- 右滑(绿色背景):查看详情
- 左滑(蓝色背景):快速操作菜单(收藏/查看详情/分享)
- **技术实现**Dismissible组件 + CupertinoActionSheet
**20.7 用餐时段图片加载优化**
- **问题**:用餐时段页面显示图片错误
- **方案**引入RecipeImage组件显示菜谱封面图自动享受Fallback链+错误处理
### 验收标准
- [x] 笔记按钮点击正常,不闪退
- [x] 详情页3秒内显示骨架屏8秒内加载完成或显示重试
- [x] 发现页推荐分类导航正确
- [x] 图片加载失败时自动Fallback不显示错误信息
- [x] 工具中心无GetX警告无布局溢出
- [x] 发现页热门列表支持左右滑动
- [x] 用餐时段页面正常显示菜谱封面图
---
## 🟢 阶段二十一菜谱详情页功能增强P2— ✅ 已完成
**目标**:增强菜谱详情页功能,方便开发者调试和用户查看图片信息
**完成时间**2026-04-11
**关键阻塞**:无
**优先级**P2=功能增强
### 问题清单
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 21.1 | 🖼️ Picid显示和复制功能 | `recipe_detail_page.dart` | P2 | ✅ 已完成 | 在作者卡片下方显示图片信息卡片 |
### 实施记录
**21.1 Picid显示和复制功能**
- **需求**在菜谱详情页用户名称下方显示图片信息和Picid
- **功能实现**
- 新增图片信息卡片,显示在作者卡片下方
- 显示Picid编号可选中复制
- 显示图片链接(可选中复制)
- 点击卡片一键复制Picid到剪贴板
- 复制成功后显示Toast提示
- **UI设计**
- 卡片式设计,带主题色边框
- 右上角显示"点击复制"提示标签
- Picid使用等宽字体monospace高亮显示
- 图片链接支持多行显示
- **技术细节**
- 导入 `flutter/services.dart` 使用 Clipboard
- 使用 SelectableText 支持文本选中
- 无Picid时显示"无",但仍显示图片链接
### 验收标准
- [x] 菜谱详情页显示图片信息卡片
- [x] Picid可选中复制
- [x] 图片链接可选中复制
- [x] 点击卡片一键复制Picid
- [x] 复制成功显示Toast提示
---
## 🟢 阶段二十二Picid功能Bug修复P0— ✅ 已完成
**目标**修复Picid显示为0和点击复制卡死闪退的问题
**完成时间**2026-04-11
**关键阻塞**:无
**优先级**P0=崩溃/闪退
### 问题清单
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 22.1 | 🐛 Picid显示为0 | `recipe_detail_page.dart` | P0 | ✅ 已完成 | 添加有效性检查,无效时显示"无" |
| 22.2 | 🐛 点击复制卡死闪退 | `recipe_detail_page.dart` | P0 | ✅ 已完成 | 安全Toast显示+异常捕获 |
### 实施记录
**22.1 Picid显示为0的问题**
- **问题**所有菜谱的Picid都显示为0
- **根因**API返回的pic_id字段可能不存在或为null_parseInt返回默认值0
- **方案**
- 添加有效性检查:`hasValidPicId = picId != null && picId > 0`
- 无效Picid时显示"无"不显示0
- 无有效Picid时图片链接显示"暂无图片链接"
- 添加调试日志输出picId实际值
**22.2 点击复制卡死闪退**
- **问题**点击Picid卡片复制时应用卡死闪退
- **根因**ToastService.show可能因ThemeService未注册而崩溃
- **方案**
- 新增 `_showCopyToast()` 方法安全显示Toast
- 添加mounted检查防止Widget已销毁
- Clipboard.setData包裹try-catch防止异常
- 失败时显示友好提示而非崩溃
### 验收标准
- [x] Picid为0或null时显示"无"
- [x] 点击复制不卡死不闪退
- [x] 复制成功显示Toast提示
- [x] 复制失败显示友好提示