Files
kitchen/docs/dev/UNFINISHED_FEATURES.md
2026-04-11 02:02:23 +08:00

910 lines
35 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-11
> 数据来源
> 说明: 记录所有未完成的功能任务,跟踪开发进度
> 优先级说明: P1=核心功能 P2=重要功能 P3=增强功能
> 优先级值1-5: 5=最高优先级(多次提及自动提升)
---
## 📊 总体进度
| 阶段 | 总任务 | 已完成 | 未完成 | 完成率 |
|------|--------|--------|--------|--------|
| 三:热量追踪+营养分析 | 7 | 7 | 0 | 100% ✅ |
| 四:购物清单 | 5 | 5 | 0 | 100% ✅ |
| 十三AI+规划高级功能 | 4 | 0 | 4 | 0% 🔵 |
| 十四:接口能力挖掘 | 8 | 0 | 8 | 0% 🟢 |
| 十五:后端接口增强 | 6 | 0 | 6 | 0% 🔴 |
| 十六:用户体验优化+Bug 修复 | 7 | 7 | 0 | 100% ✅ |
| 十七紧急Bug修复 | 14 | 14 | 0 | 100% ✅ |
| **合计** | **124** | **95** | **29** | **77%** |
---
## 五、开发阶段
### 阶段一基础设施P1✅ 已完成
**目标**:搭建 Hive 本地数据库 + 数据模型 + 持久化收藏
## 六、页面导航规划
```
发现页
└── 📊 营养中心
├── 🍽️ 饮食日记(日历视图 + 每日记录列表)
│ └── 添加记录(底部弹窗:选餐次 + 选菜谱/手动输入)
├── 🔥 热量追踪(环形进度 + 三大营养素比例 + 目标线)
└── 📊 分析报告(周/月趋势折线图 + 营养素饼图)
我的页面
├── 📋 购物清单(分类展示 + 勾选已购)
├── ⏱️ 烹饪计时器(多步骤倒计时)
├── 🔄 用量换算
├── 🎯 BMI 计算器
└── ⚙️ 设置
├── 🎯 每日营养目标
├── 🔔 用餐提醒
└── ⚠️ 过敏原管理
```
---
## 八、开发优先级矩阵
| 功能 | 用户价值 | 技术难度 | 依赖关系 | 优先级 |
|------|---------|---------|---------|--------|
| 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 |
---
## 九、验收标准
## 🟡 阶段五增强功能P2/P3
**目标**:烹饪计时器 + 用量换算 + 过敏原检测 + 烹饪笔记 + 用餐提醒 + BMI + 份量缩放
**前置依赖**:各功能独立,无强依赖
---
## 🔵 阶段八API v2.0.0 迁移 + Bug修复P0/P1
**目标**:迁移到 API v2.0.0 合并接口修复用户反馈的8个严重Bug
---
## 🔴 阶段九:架构修复+核心BugP0/P1
**目标**:修复架构违规和核心功能缺失
**发现时间**2026-04-10flutter analyze 全面扫描 + 项目分析)
## 🟡 阶段十代码质量提升P1/P2
**目标**:提升代码可维护性和健壮性
**前置依赖**:阶段九完成
**关键阻塞**:无
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 10.1 | 统一 Controller 注册 | `lib/src/bindings/feature_binding.dart` | P1 | ✅ 已完成 | 创建 FeatureBinding路由添加 binding 参数,页面改用 Get.find() |
| 10.2 | HiveService 数据迁移机制 | `lib/src/services/data/hive_service.dart` | P2 | ✅ 已完成 | 添加 schema 版本号 + 迁移函数,支持 Box 升级 |
| 10.3 | 统一错误处理 | `lib/src/errors/app_exception.dart` | P1 | ✅ 已完成 | 定义 AppException + AppErrorCode + Result<T>,统一错误码映射 |
| 10.4 | 离线缓存策略 | `lib/src/services/data/cache_service.dart` | P1 | ✅ 已完成 | 新增 CacheService支持 TTL 过期 + 离线读取 |
| 10.5 | DesignTokens 与 ThemeService 解耦 | `lib/src/services/ui/theme_service.dart` | P2 | ✅ 已完成 | 新增 DynamicTokens 类ThemeService.tokens 统一获取主题颜色 |
### 验收标准
- [x] 所有 Controller 通过 Binding 注册
- [x] HiveService 支持 schema 版本迁移
- [x] Repository 统一抛出 AppException
- [x] 离线时首页可显示缓存数据
- [x] 页面颜色值统一通过 ThemeService 获取
---
## 🟢 阶段十一:烹饪模式+营养仪表盘P1
**目标**:实现核心增强功能,提升应用价值
**前置依赖**:阶段九完成
---
## 🟢 阶段十二:社交+通知增强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` | 系统分享 | ❌ | ⚠️ 需适配 |
| `image_picker` | 拍照/相册 | ❌ | ⚠️ 需适配 |
| `screenshot` | 截图 | ✅ | ✅ |
### 验收标准
- [ ] 详情页可分享菜谱卡片到其他应用
- [ ] 烹饪计时器完成时发送本地通知
- [ ] 搜索页展示热门搜索词
- [ ] 烹饪笔记可添加照片
---
## 🔵 阶段十三AI+规划高级功能P3
**目标**:实现智能化和规划类高级功能
**前置依赖**:阶段十二完成
**关键阻塞**13.1 需 AI API13.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` + 健康算法
### 验收标准
- [ ] "为你推荐"展示个性化推荐菜谱
- [ ] 每周菜单可规划三餐并生成购物清单
- [ ] 份量缩放支持多种单位换算
- [ ] 就寝提醒根据饮食时间智能推荐
---
## 🟢 阶段十四接口能力挖掘P1/P2
**目标**利用已有API接口能力实现App端未开发的功能
**前置依赖**API v2.0.0 已支持完整接口
**关键阻塞**:无
**数据来源**`docs/api/doc/API_DOC.md` + `docs/api/doc/APP_GUIDE.md`
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 14.1 | 🍽️ 用餐时段推荐 | `lib/src/pages/home/meal_time_recommend.dart` | P1 | ❌ 未实现 | 根据时间推荐早餐/午餐/晚餐 |
| 14.2 | 📊 营养分析增强 | `lib/src/pages/nutrition/nutrition_detail_page.dart` | P1 | ❌ 未实现 | 营养成分详情+趋势图表 |
| 14.3 | ⚠️ 过敏原警示增强 | `lib/src/pages/recipe/recipe_detail_page.dart` | P1 | ❌ 未实现 | 详情页过敏原警示+食材替代建议 |
| 14.4 | 🔥 点赞/推荐系统 | `lib/src/services/action_service.dart` | P2 | ❌ 未实现 | 点赞/取消点赞+五星评分 |
| 14.5 | 📱 社交分享 | `lib/src/pages/recipe/share_recipe_page.dart` | P2 | ❌ 未实现 | 生成分享链接+二维码海报 |
| 14.6 | 👤 个性化信息流 | `lib/src/pages/home_page.dart` | P1 | ❌ 未实现 | 基于用户偏好的首页推荐 |
| 14.7 | 🥕 食材详情页 | `lib/src/pages/ingredient/ingredient_detail_page.dart` | P2 | ❌ 未实现 | 食材介绍+营养+选购指南 |
| 14.8 | 📈 浏览量统计 | `lib/src/services/analytics_service.dart` | P2 | ❌ 未实现 | 增加浏览量+热度标签展示 |
### 功能详情
#### 14.1 用餐时段推荐
- **接口支持**`api.php?act=search&keyword=早餐/中餐/晚餐`
---
## 🔴 阶段十六:用户体验优化+Bug修复P0/P1
**目标**修复用户反馈的7个严重问题提升应用稳定性和用户体验
**发现时间**2026-04-10用户反馈
**关键阻塞**:无
**优先级**P0=最高优先级(影响用户使用的严重问题)
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 16.1 | 🚀 启动加载优化+骨架屏 | `lib/src/pages/home_page.dart` | P0 | ✅ 已完成 | 添加超时保护+骨架屏组件+缓存优先策略 |
| 16.2 | 🛠️ 收藏页面"更多"卡死修复 | `lib/src/pages/favorites/favorites_page.dart` | P0 | ✅ 已完成 | 添加Binding+错误处理+空指针保护 |
| 16.3 | 🔍 搜索详情卡死修复 | `lib/src/pages/search/search_page.dart` | P0 | ✅ 已完成 | 为RecipeDetailPage添加Binding+Controller安全获取 |
| 16.4 | 🎲 今天吃什么动态筛选优化 | `lib/src/pages/what_to_eat/what_to_eat_page.dart` | P1 | ✅ 已完成 | 优化UI显示+添加错误提示+空结果处理 |
| 16.5 | 📊 营养中心报告按钮修复 | `lib/src/pages/nutrition/nutrition_center_page.dart` | P1 | ✅ 已完成 | 检查NutritionBinding+添加错误处理 |
| 16.6 | ❤️ 收藏页面UI重构 | `lib/src/pages/favorites/favorites_page.dart` | P2 | ❌ 未实现 | iOS 26 Liquid Glass风格+优化按钮尺寸 |
| 16.7 | 🔥 热门排行数据修复 | `lib/src/repositories/hot_repository.dart` | P1 | ✅ 已完成 | 检查API返回+添加错误提示+调试日志 |
### 问题详情
#### 16.1 启动加载慢+无骨架屏
- **现象**:启动应用时 loading 动画超过10秒首页点击菜谱 loading 超过5秒
- **原因分析**
1. `RecipeRepository.fetchFeedRecipes()` 没有超时保护
2. 首页没有骨架屏,只有简单的 loading 动画
3. 没有缓存机制,每次都要从网络获取数据
- **解决方案**
1. 添加超时保护12秒
2. 创建骨架屏组件 `SkeletonLoader`
3. 添加缓存优先策略,优先显示缓存数据
#### 16.2 收藏页面点击"更多"卡死闪退
- **现象**:收藏页面点击"更多"按钮后应用卡死闪退
- **原因分析**
1. `ToolsCenterPage` 使用 `Get.put(ToolsController())` 直接注册
2. 可能 `ToolsController` 初始化时出错
3. 没有错误处理和空指针保护
- **解决方案**
1. 创建 `ToolsBinding` 并添加到路由配置
2. 使用 `Get.find()` 获取 Controller
3. 添加 try-catch 错误处理
#### 16.3 搜索结果点击详情卡死闪退
- **现象**:搜索后点击详细结果,应用卡死闪退
- **原因分析**
1. `RecipeDetailPage` 使用 `Get.find<FavoritesController>()`
2. 如果 Controller 未注册会抛出异常
3. `ActionController``ShoppingListController` 初始化可能失败
- **解决方案**
1.`RecipeDetailPage` 添加完整的 Binding
2. 所有 Controller 使用 try-catch 保护
3. 添加空指针检查和默认值
#### 16.4 今天吃什么动态筛选问题
- **现象**:不支持动态筛选,随机选择有时不显示结果
- **原因分析**
1. 代码已实现动态筛选,但 UI 不够明显
2. 随机选择不显示结果可能是 API 返回空数据
3. 没有错误提示
- **解决方案**
1. 优化 UI使筛选功能更明显
2. 添加错误提示和空结果处理
3. 添加调试日志,排查 API 问题
#### 16.5 营养中心报告按钮卡死
- **现象**:点击右上角"报告"按钮应用卡死闪退,"今天"按钮无反应
- **原因分析**
1. `NutritionReportPage` 使用 `Get.find<MealRecordController>()`
2. 路由配置中已有 `NutritionBinding`
3. 可能是 `MealRecordController` 初始化失败
- **解决方案**
1. 检查 `NutritionBinding` 是否正确注册
2. 添加错误处理和空指针保护
3. 添加加载状态提示
#### 16.6 收藏页面UI设计问题
- **现象**:排版杂乱无章,按钮太小点不到,不符合操作逻辑
- **原因分析**
1. UI 布局不够清晰
2. 按钮尺寸不符合 iOS 设计规范
3. 操作流程不顺畅
- **解决方案**
1. 重构 UI使用 iOS 26 Liquid Glass 风格
2. 增大按钮尺寸至最小 44x44
3. 优化操作流程和布局比例
#### 16.7 热门排行数据为空
- **现象**:今日浏览量、点赞数、推荐数都显示"暂无数据"
- **原因分析**
1. `HotRepository` 调用 `stats_full.php?act=hot` API
2. API 可能返回空数据或数据结构不匹配
3. 没有错误提示
- **解决方案**
1. 检查 API 返回数据结构
2. 添加错误提示和空数据处理
3. 添加调试日志,排查 API 问题
### 开发顺序建议
```
16.1 启动加载优化(影响最大,用户第一印象)
→ 16.2 收藏页面"更多"修复(严重闪退)
→ 16.3 搜索详情修复(严重闪退)
→ 16.5 营养中心修复(功能性问题)
→ 16.4 今天吃什么优化(体验问题)
→ 16.7 热门排行修复(数据问题)
→ 16.6 收藏页面UI重构体验优化
```
### 验收标准
- [ ] 启动应用 3 秒内显示骨架屏5 秒内加载完成
- [ ] 收藏页面点击"更多"正常跳转,无卡死闪退
- [ ] 搜索结果点击详情正常跳转,无卡死闪退
- [ ] 今天吃什么支持动态筛选,随机选择有结果提示
- [ ] 营养中心报告按钮正常跳转,"今天"按钮有反馈
- [ ] 收藏页面 UI 整洁美观,按钮易于点击
- [ ] 热门排行显示真实数据,无数据时有友好提示
### 技术要点
#### 骨架屏组件
```dart
class SkeletonLoader extends StatefulWidget {
final double width;
final double height;
final BorderRadius? borderRadius;
const SkeletonLoader({
required this.width,
required this.height,
this.borderRadius,
});
}
class _SkeletonLoaderState extends State<SkeletonLoader>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 1500),
)..repeat();
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _controller,
builder: (context, child) {
return Container(
width: widget.width,
height: widget.height,
decoration: BoxDecoration(
color: Colors.grey[300],
borderRadius: widget.borderRadius,
),
);
},
);
}
}
```
#### Controller 安全获取
```dart
FavoritesController? _favoritesController;
@override
void initState() {
super.initState();
try {
_favoritesController = Get.find<FavoritesController>();
} catch (e) {
debugPrint('FavoritesController not found: $e');
_favoritesController = null;
}
}
```
#### 超时保护
```dart
Future<List<RecipeModel>> fetchFeedRecipes() async {
try {
final results = await _recipeRepository.fetchFeedRecipes()
.timeout(const Duration(seconds: 12));
return results;
} on TimeoutException {
debugPrint('fetchFeedRecipes timeout');
return [];
} catch (e) {
debugPrint('fetchFeedRecipes error: $e');
return [];
}
}
```
- **数据文件**`http://eat.wktyl.com/api/assets/eating_times.json`34种时段
- **功能**
- 🌅 早餐推荐7-10点
- 🍱 午餐推荐11-14点
- 🌙 晚餐推荐17-20点
- 📅 每日菜单规划(早中晚餐)
#### 14.2 营养分析增强
- **接口支持**`api.php?act=full&id=xxx` 返回 `nutrition` 字段
- **数据文件**`http://eat.wktyl.com/api/assets/nutrition_types.json`31种营养成分
- **功能**
- 📊 营养成分详情展示(维生素/矿物质/宏量营养素)
- 🎯 每日营养目标追踪
- 🏋️ 健身餐推荐(高蛋白/低碳水)
- 📈 营养趋势分析图表
#### 14.3 过敏原警示增强
- **接口支持**`api.php?act=full&id=xxx` 返回 `allergens` 字段
- **数据文件**`http://eat.wktyl.com/api/assets/gmy.json`585种过敏原数据
- **功能**
- ⚠️ 菜谱详情页过敏原警示
- 🚫 自动过滤含过敏原菜谱
- 🔄 食材替代建议
- 📋 过敏原报告生成
#### 14.4 点赞/推荐系统
- **接口支持**
- `api_action.php?act=like&type=recipe&id=1&action=like/unlike`
- `api_action.php?act=recommend&type=recipe&id=1&score=5`
- **功能**
- 👍 点赞/取消点赞
- ⭐ 五星评分
- 📊 用户评价统计
- 🏆 推荐排行榜
#### 14.5 社交分享
- **接口支持**`api_what_to_eat.php?act=detail&code=CP032892`code字段生成分享链接
- **功能**
- 🔗 分享链接生成(`https://eat.wktyl.com/recipe/CP032892`
- 📱 二维码海报
- 📊 热度标签展示(🔥爆款/📈热门/❤️受欢迎)
- 👥 社交平台分享
#### 14.6 个性化信息流
- **接口支持**`api_feed.php?act=personal&user_id=xxx`
- **功能**
- 🎯 基于偏好推荐
- 🚫 自动过滤过敏原
- 📊 千人千面首页
- 🔄 智能刷新
#### 14.7 食材详情页
- **接口支持**`api.php?act=ingredient_detail&id=1`
- **返回字段**`introduction`/`nutrition`/`usage_tip`/`effect`/`guidance`
- **功能**
- 📖 食材介绍
- 🥗 营养成分
- 💡 使用技巧
- 🏥 食疗功效
- 🛒 选购指南
#### 14.8 浏览量统计
- **接口支持**
- `api_action.php?act=view&type=recipe&id=1&count=1`
- `api.php?act=detail&id=xxx&viewnums=true`
- **功能**
- 📈 增加浏览量
- 🔥 热门排行统计
- 📊 用户浏览历史
- 📈 趋势分析
### 开发优先级
| 优先级 | 功能 | 说明 |
|--------|------|------|
| **P1** | 用餐时段推荐 | 接口完整,实现简单,用户价值高 |
| **P1** | 个性化信息流 | 接口完整,提升用户体验 |
| **P1** | 过敏原警示增强 | 接口完整,健康安全 |
| **P2** | 点赞/推荐系统 | 接口完整,增加互动 |
| **P2** | 营养分析增强 | 接口完整,健康管理 |
| **P2** | 社交分享 | 接口完整,增加传播 |
| **P2** | 食材详情页 | 接口完整,内容丰富 |
| **P2** | 浏览量统计 | 接口完整,数据驱动 |
### 验收标准
- [ ] 首页根据时段推荐早餐/午餐/晚餐
- [ ] 营养中心展示详细营养成分
- [ ] 详情页显示过敏原警示
- [ ] 详情页可点赞/评分
- [ ] 详情页可分享菜谱
- [ ] 首页个性化推荐
- [ ] 食材可查看详情页
- [ ] 浏览量正确统计
---
## 🔴 阶段十五后端接口增强P1/P2
**目标**:新增后端接口,实现高级功能
**前置依赖**:后端开发配合
**关键阻塞**:需要后端新增接口
**优先级说明**:🔴 红色表示需要后端支持
| 序号 | 任务 | 建议接口 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 15.1 | 👤 用户注册登录 | `api_user.php?act=register/login` | P1 | ❌ 未实现 | 用户账号体系 |
| 15.2 | 💾 收藏云端同步 | `api_favorite.php?act=add/remove/list` | P1 | ❌ 未实现 | 收藏数据云端存储 |
| 15.3 | 💬 评论系统 | `api_comment.php?act=list/add/delete` | P2 | ❌ 未实现 | 菜谱评论功能 |
| 15.4 | 🔔 消息推送 | `api_message.php?act=list/read` | P2 | ❌ 未实现 | 站内信+推送通知 |
| 15.5 | 📜 浏览历史同步 | `api_history.php?act=add/list` | P2 | ❌ 未实现 | 浏览历史云端存储 |
| 15.6 | 📝 菜谱上传 | `api_recipe.php?act=add/edit/delete` | P2 | ❌ 未实现 | 用户菜谱上传/编辑 |
### 功能详情
#### 15.1 用户注册登录
- **现状**:❌ 无注册登录接口
- **建议接口**
```
POST api_user.php?act=register
{ "username": "xxx", "password": "xxx", "email": "xxx" }
POST api_user.php?act=login
{ "username": "xxx", "password": "xxx" }
GET api_user.php?act=profile&user_id=xxx
```
- **功能**
- 📱 手机号注册/登录
- 🔗 第三方登录(微信/Apple ID
- 👤 用户资料管理
- 🔐 密码找回
#### 15.2 收藏云端同步
- **现状**:⚠️ 仅本地 Hive 存储
- **建议接口**
```
POST api_favorite.php?act=add
{ "user_id": "xxx", "recipe_id": 123 }
GET api_favorite.php?act=list&user_id=xxx
DELETE api_favorite.php?act=remove
{ "user_id": "xxx", "recipe_id": 123 }
```
- **功能**
- ☁️ 收藏云端存储
- 🔄 多设备同步
- 📂 收藏分类管理
- 🔗 收藏分享
#### 15.3 评论系统
- **现状**:❌ 无评论接口
- **建议接口**
```
GET api_comment.php?act=list&recipe_id=123&page=1
POST api_comment.php?act=add
{ "user_id": "xxx", "recipe_id": 123, "content": "xxx" }
DELETE api_comment.php?act=delete
{ "user_id": "xxx", "comment_id": 456 }
```
- **功能**
- 💬 发表评论
- 👍 评论点赞
- 📝 评论回复
- 🔔 评论通知
#### 15.4 消息推送
- **现状**:❌ 无推送接口
- **建议接口**
```
GET api_message.php?act=list&user_id=xxx
POST api_message.php?act=read
{ "user_id": "xxx", "message_id": 123 }
```
- **功能**
- 📬 站内信
- 🔔 推送通知
- 📢 系统公告
- 💬 评论提醒
#### 15.5 浏览历史同步
- **现状**:⚠️ 仅本地存储
- **建议接口**
```
POST api_history.php?act=add
{ "user_id": "xxx", "recipe_id": 123 }
GET api_history.php?act=list&user_id=xxx&page=1
```
- **功能**
- ☁️ 浏览历史云端存储
- 🔄 多设备同步
- 📊 浏览统计
- 🧹 历史清理
#### 15.6 菜谱上传
- **现状**:❌ 无上传接口
- **建议接口**
```
POST api_recipe.php?act=add
{ "title": "xxx", "ingredients": [...], "steps": [...] }
PUT api_recipe.php?act=edit
{ "recipe_id": 123, "title": "xxx" }
DELETE api_recipe.php?act=delete
{ "recipe_id": 123 }
```
- **功能**
- 📝 用户菜谱上传
- ✏️ 菜谱编辑
- 🗑️ 菜谱删除
- 📊 菜谱审核
### 开发优先级
| 优先级 | 功能 | 说明 |
|--------|------|------|
| **P1** | 用户注册登录 | 核心功能,其他功能依赖用户体系 |
| **P1** | 收藏云端同步 | 用户数据安全,多设备同步 |
| **P2** | 评论系统 | 增加互动,提升活跃度 |
| **P2** | 消息推送 | 用户触达,提升留存 |
| **P2** | 浏览历史同步 | 用户体验,多设备同步 |
| **P2** | 菜谱上传 | UGC内容丰富平台 |
### 验收标准
- [ ] 用户可注册/登录
- [ ] 收藏数据云端同步
- [ ] 菜谱可评论
- [ ] 收到系统通知
- [ ] 浏览历史云端同步
- [ ] 用户可上传菜谱
---
## 📎 软件特性功能汇总
> 以下功能已开发完成或开发中,从历史版本号归档而来
| 功能 | 状态 | 首次版本 | 说明 |
|------|------|---------|------|
| 热量追踪+营养分析 | ✅ 已完成 | 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 个 info0 error/warning |
| 工具中心 | ✅ 已完成 | v0.9x | 工具入口Bar+分类筛选+使用频率统计 |
| 过敏原检查工具 | ✅ 已完成 | v0.9x | 食材过敏原查询与分类浏览 |
| 用餐时段推荐 | ✅ 已完成 | v0.9x | 根据时间推荐早中晚餐菜谱 |
| 每周菜单规划 | ✅ 已完成 | v0.9x | 一周三餐规划与进度追踪 |
| 食材详情查询 | ✅ 已完成 | v0.9x | 食材营养信息与选购指南 |
---
## 🛠️ 工具中心开发记录
> 2026-04-10 开发完成
### 已实现工具列表
| 工具名称 | 路由 | 是否联网 | 说明 |
|---------|------|---------|------|
| ⏱️ 烹饪计时器 | `/tools/timer` | ❌ 离线 | 多步骤倒计时 |
| 📏 用量换算 | `/tools/converter` | ❌ 离线 | 常用单位换算 |
| 🧮 BMI 计算器 | `/tools/bmi` | ❌ 离线 | 含健康建议 |
| ⚖️ 份量缩放 | `/tools/scaler` | ❌ 离线 | 按比例调整食材用量 |
| 🥜 过敏原检查 | `/tools/allergen` | ✅ 联网 | 食材过敏原查询 |
| 🍽️ 用餐时段推荐 | `/tools/meal-time` | ✅ 联网 | 根据时间推荐菜谱 |
| 📅 每周菜单规划 | `/tools/planner` | ❌ 离线 | 一周三餐规划 |
| 🥕 食材详情查询 | `/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] 工具中心跳转无分裂感