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

9.0 KiB
Raw Blame History

五、开发阶段

阶段一基础设施P1 已完成

目标:搭建 Hive 本地数据库 + 数据模型 + 持久化收藏

序号 任务 产出文件 状态
1.1 引入 hive_ce 依赖 pubspec.yaml
1.2 实现 HiveService初始化/注册适配器/打开Box lib/src/services/data/hive_service.dart
1.3 创建 MealRecordModel + 手写 TypeAdapter lib/src/models/meal_record_model.dart
1.4 创建 ShoppingItemModel + 手写 TypeAdapter lib/src/models/shopping_item_model.dart
1.5 创建 UserGoalModel + 手写 TypeAdapter lib/src/models/user_goal_model.dart
1.6 创建 CookingNoteModel + 手写 TypeAdapter lib/src/models/cooking_note_model.dart
1.7 手写 TypeAdapter替代 build_runner 代码生成) 各模型文件内嵌
1.8 FavoritesController 持久化改造(迁移到 Hive Box lib/src/controllers/favorites_controller.dart
1.9 AppService 初始化 HiveService lib/src/services/core/app_service.dart

阶段二饮食日记P1

目标:记录每日饮食 + 自动计算营养

序号 任务 产出文件
2.1 MealRecordController lib/src/controllers/meal_record_controller.dart
2.2 饮食日记页面(日历+列表) lib/src/pages/nutrition/meal_diary_page.dart
2.3 添加饮食记录弹窗 lib/src/pages/nutrition/add_meal_sheet.dart
2.4 餐次选择器(早/午/晚/加餐) lib/src/widgets/meal_type_selector.dart
2.5 营养自动计算(从 RecipeModel.nutrition 读取) MealRecordController 内逻辑
2.6 发现页增加「营养中心」入口 discover_page.dart 修改

阶段三:热量追踪 + 营养分析P1

目标:可视化每日营养摄入 + 目标对比

序号 任务 产出文件
3.1 引入 fl_chart 依赖 pubspec.yaml
3.2 NutritionController lib/src/controllers/nutrition_controller.dart
3.3 热量追踪页面(环形进度+三大营养素) lib/src/pages/nutrition/calorie_tracker_page.dart
3.4 营养分析报告页面(周/月趋势图) lib/src/pages/nutrition/nutrition_report_page.dart
3.5 用户目标设置页面 lib/src/pages/nutrition/goal_setting_page.dart
3.6 环形进度组件 lib/src/widgets/charts/calorie_ring.dart
3.7 折线趋势图组件 lib/src/widgets/charts/nutrition_line_chart.dart

阶段四购物清单P2

目标:从菜谱食材自动生成购物清单

序号 任务 产出文件
4.1 ShoppingListController lib/src/controllers/shopping_list_controller.dart
4.2 购物清单页面 lib/src/pages/shopping/shopping_list_page.dart
4.3 从菜谱添加食材到购物清单 首页卡片/菜谱详情页增加入口
4.4 食材分类展示 lib/src/widgets/shopping_category_group.dart
4.5 我的页面增加「购物清单」入口 profile_home.dart 修改

阶段五增强功能P2/P3

目标:烹饪计时器 + 用量换算 + 过敏原检测 + 烹饪笔记

序号 任务 产出文件
5.1 烹饪计时器页面 lib/src/pages/tools/cooking_timer_page.dart
5.2 用量换算工具页面 lib/src/pages/tools/unit_converter_page.dart
5.3 过敏原检测逻辑 lib/src/services/allergen_checker.dart
5.4 烹饪笔记功能 lib/src/controllers/cooking_note_controller.dart
5.5 用餐提醒(需 flutter_local_notifications lib/src/services/notification_service.dart
5.6 BMI 计算器 lib/src/pages/tools/bmi_calculator_page.dart
5.7 份量缩放工具 lib/src/pages/tools/serving_scaler_page.dart

六、页面导航规划

发现页
  └── 📊 营养中心
        ├── 🍽️ 饮食日记(日历视图 + 每日记录列表)
        │     └──  添加记录(底部弹窗:选餐次 + 选菜谱/手动输入)
        ├── 🔥 热量追踪(环形进度 + 三大营养素比例 + 目标线)
        └── 📊 分析报告(周/月趋势折线图 + 营养素饼图)

我的页面
  ├── 📋 购物清单(分类展示 + 勾选已购)
  ├── ⏱️ 烹饪计时器(多步骤倒计时)
  ├── 🔄 用量换算
  ├── 🎯 BMI 计算器
  └── ⚙️ 设置
        ├── 🎯 每日营养目标
        ├── 🔔 用餐提醒
        └── ⚠️ 过敏原管理

七、文件结构规划

lib/src/
├── models/
│   ├── meal_record_model.dart      # 饮食记录 + @HiveType
│   ├── shopping_item_model.dart    # 购物清单项 + @HiveType
│   ├── user_goal_model.dart        # 用户营养目标 + @HiveType
│   └── cooking_note_model.dart     # 烹饪笔记 + @HiveType
├── controllers/
│   ├── meal_record_controller.dart # 饮食记录控制器
│   ├── nutrition_controller.dart   # 营养分析控制器
│   ├── shopping_list_controller.dart # 购物清单控制器
│   └── cooking_note_controller.dart  # 烹饪笔记控制器
├── services/
│   └── data/
│       └── hive_service.dart       # Hive 初始化/Box 管理
├── pages/
│   ├── nutrition/
│   │   ├── nutrition_center_page.dart  # 营养中心主页
│   │   ├── meal_diary_page.dart        # 饮食日记
│   │   ├── add_meal_sheet.dart         # 添加记录弹窗
│   │   ├── calorie_tracker_page.dart   # 热量追踪
│   │   ├── nutrition_report_page.dart  # 营养报告
│   │   └── goal_setting_page.dart      # 目标设置
│   ├── shopping/
│   │   └── shopping_list_page.dart     # 购物清单
│   └── tools/
│       ├── cooking_timer_page.dart     # 烹饪计时器
│       ├── unit_converter_page.dart    # 用量换算
│       ├── bmi_calculator_page.dart    # BMI 计算器
│       └── serving_scaler_page.dart    # 份量缩放
└── widgets/
    ├── charts/
    │   ├── calorie_ring.dart           # 热量环形进度
    │   └── nutrition_line_chart.dart   # 营养趋势折线图
    ├── meal_type_selector.dart         # 餐次选择器
    └── shopping_category_group.dart    # 购物清单分类组

八、开发优先级矩阵

功能 用户价值 技术难度 依赖关系 优先级
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

九、验收标准

阶段一

  • App 重启后收藏数据不丢失
  • Hive Box 初始化成功,无报错
  • TypeAdapter 注册正确,对象可序列化/反序列化
  • HiveService 支持增删改查

阶段二

  • 可按日期查看饮食记录
  • 可添加/删除饮食记录
  • 选择菜谱后自动填充营养数据
  • 日历视图正确标记有记录的日期

阶段三

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

阶段四

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

十、技术决策记录

日期 决策 理由 替代方案
2026-04-09 选择 Hive CE 而非 sqflite 纯 Dart 零原生依赖鸿蒙零风险API 简单开发快;数据量小无需 SQL sqflite原生依赖鸿蒙兼容风险
2026-04-09 选择 hive_ce 而非原版 hive 社区版持续维护,支持 WASM性能优于 v4 hive v2.2.33年未更新
2026-04-09 选择 fl_chart 而非 charts_flutter 纯 Dart 无平台依赖,社区活跃 charts_flutter已停维
2026-04-09 营养数据冗余存储到 MealRecordModel 避免菜谱修改影响历史记录 联表查询(数据不一致风险)
2026-04-09 使用 ISO8601 日期格式 跨时区安全,排序方便 时间戳(可读性差)
2026-04-09 聚合查询用 Dart 代码实现 数据量极小(~2000条/年Dart 过滤性能足够 SQL 聚合(需 sqflite过度设计