This commit is contained in:
Developer
2026-04-11 06:05:12 +08:00
parent 855c801fca
commit 346fc795f7
50 changed files with 7697 additions and 1448 deletions

View File

@@ -20,7 +20,8 @@
| 十五:后端接口增强 | 6 | 0 | 6 | 0% 🔴 |
| 十六:用户体验优化+Bug 修复 | 7 | 7 | 0 | 100% ✅ |
| 十七紧急Bug修复 | 14 | 14 | 0 | 100% ✅ |
| **合计** | **124** | **95** | **29** | **77%** |
| 十九综合Bug修复+功能增强 | 18 | 16 | 2 | 89% 🔄 |
| **合计** | **142** | **111** | **31** | **78%** |
---
@@ -35,25 +36,6 @@
```
发现页
└── 📊 营养中心
├── 🍽️ 饮食日记(日历视图 + 每日记录列表)
│ └── 添加记录(底部弹窗:选餐次 + 选菜谱/手动输入)
├── 🔥 热量追踪(环形进度 + 三大营养素比例 + 目标线)
└── 📊 分析报告(周/月趋势折线图 + 营养素饼图)
我的页面
├── 📋 购物清单(分类展示 + 勾选已购)
├── ⏱️ 烹饪计时器(多步骤倒计时)
├── 🔄 用量换算
├── 🎯 BMI 计算器
└── ⚙️ 设置
├── 🎯 每日营养目标
├── 🔔 用餐提醒
└── ⚠️ 过敏原管理
```
---
## 八、开发优先级矩阵
@@ -91,7 +73,6 @@
**目标**:迁移到 API v2.0.0 合并接口修复用户反馈的8个严重Bug
---
## 🔴 阶段九:架构修复+核心BugP0/P1
@@ -100,29 +81,8 @@
**发现时间**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
@@ -140,9 +100,9 @@
| 序号 | 任务 | 产出文件 | 优先级 | 状态 | 说明 |
|------|------|---------|--------|------|------|
| 12.1 | 📱 分享菜谱 | `lib/src/pages/recipe/recipe_detail_page.dart` | P2 | ❌ 未实现 | 生成菜谱卡片图片,支持系统分享 |
| 12.1 | 📱 分享菜谱 | `lib/src/pages/home/recipe_detail_page.dart` | P2 | ✅ 已完成 | 分享按钮+生成菜谱文本+调用share_plus |
| 12.2 | 🔔 烹饪提醒通知 | `lib/src/services/notification_service.dart` | P2 | ❌ 未实现 | 定时提醒烹饪步骤,与计时器联动 |
| 12.3 | 🔍 搜索建议/热词 | `lib/src/pages/search/search_page.dart` | P2 | ❌ 未实现 | 搜索页展示热门搜索词,输入时自动补全 |
| 12.3 | 🔍 搜索建议/热词 | `lib/src/controllers/search_controller.dart` | P2 | ✅ 已完成 | 从API获取热门标签替代硬编码热词保留fallback |
| 12.4 | 📸 拍照记录 | `lib/src/pages/tools/cooking_note_page.dart` | P3 | ❌ 未实现 | 烹饪笔记支持拍照上传,记录成品 |
### 功能详情
@@ -205,7 +165,7 @@
|------|------|---------|--------|------|------|
| 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.3 | 🧮 食材用量换算增强 | `lib/src/pages/tools/serving_scaler_page.dart` | P3 | ✅ 已完成 | 添加单位换算Tab(重量/容量/计数)+常用换算表 |
| 13.4 | 🌙 就寝提醒 | `lib/src/pages/settings/health_reminder_page.dart` | P3 | ❌ 未实现 | 根据饮食时间推荐健康作息 |
### 功能详情
@@ -291,7 +251,7 @@
| 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.6 | ❤️ 收藏页面UI重构 | `lib/src/pages/profile/favorites_page.dart` | P2 | ✅ 已完成 | iOS 26 Liquid Glass风格(BackdropFilter+半透明)+优化按钮尺寸 |
| 16.7 | 🔥 热门排行数据修复 | `lib/src/repositories/hot_repository.dart` | P1 | ✅ 已完成 | 检查API返回+添加错误提示+调试日志 |
### 问题详情
@@ -396,84 +356,6 @@
### 技术要点
#### 骨架屏组件
```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点
@@ -715,17 +597,18 @@ Future<List<RecipeModel>> fetchFeedRecipes() async {
## 📎 软件特性功能汇总
> 以下功能已开发完成或开发中,从历史版本号归档而来
> 2026-04-11 重新审核:修正不实标记,区分"已完成""部分完成""未完成"
| 功能 | 状态 | 首次版本 | 说明 |
|------|------|---------|------|
| 热量追踪+营养分析 | ✅ 已完成 | v0.3x | 环形图+饼图+折线图+目标设置 |
| 购物清单 | ✅ 已完成 | v0.4x | 添加/删除/勾选/分类/从菜谱添加 |
| 热量追踪+营养分析 | ⚠️ 部分完成 | v0.3x | 环形图+柱状图+目标设置 ✅;饼图+折线图 ❌ |
| 购物清单 | ⚠️ 部分完成 | v0.4x | 添加/删除/勾选/分类 ✅;从菜谱添加 ❌(页面无入口) |
| 烹饪计时器 | ✅ 已完成 | v0.5x | 多步骤倒计时 |
| 用量换算 | ✅ 已完成 | v0.5x | 常用单位换算 |
| 过敏原检测 | ✅ 已完成 | v0.5x | 标记含过敏原菜谱 |
| 烹饪笔记 | ✅ 已完成 | v0.5x | 按菜谱关联笔记 |
| 过敏原检测 | ❌ 未完成 | v0.5x | 标记含过敏原菜谱 — 空壳实现checkAllergens永远返回空列表 |
| 烹饪笔记 | ❌ 未完成 | v0.5x | 按菜谱关联笔记 — 仅有Controller+Model无页面 |
| BMI 计算器 | ✅ 已完成 | v0.5x | 含健康建议 |
| 份量缩放 | ✅ 已完成 | v0.5x | 按比例调整食材用量 |
| 份量缩放 | ⚠️ 部分完成 | v0.5x | 按比例调整食材列表硬编码5项不支持从菜谱导入 ❌ |
| 主页体验优化 | ✅ 已完成 | v0.6x | 骨架屏+动画+搜索+详情页 |
| 今天吃什么增强 | ✅ 已完成 | v0.7x | 分类/标签/过敏原三维筛选 |
| API v2.0.0 迁移 | ✅ 已完成 | v0.8x | 合并接口+8个Bug修复 |
@@ -734,10 +617,11 @@ Future<List<RecipeModel>> fetchFeedRecipes() async {
| 收藏管理 | ✅ 已完成 | v0.8x | 编辑/排序/分类/跳转详情 |
| 静态分析清理 | ✅ 已完成 | v0.52 | 107→1 个 info0 error/warning |
| 工具中心 | ✅ 已完成 | v0.9x | 工具入口Bar+分类筛选+使用频率统计 |
| 过敏原检查工具 | ✅ 已完成 | v0.9x | 食材过敏原查询与分类浏览 |
| 过敏原检查工具 | ✅ 已完成 | v0.9x | 食材过敏原查询与分类浏览API数据源 |
| 用餐时段推荐 | ✅ 已完成 | v0.9x | 根据时间推荐早中晚餐菜谱 |
| 每周菜单规划 | ✅ 已完成 | v0.9x | 一周三餐规划与进度追踪 |
| 食材详情查询 | ✅ 已完成 | v0.9x | 食材营养信息与选购指南 |
| 每周菜单规划 | ⚠️ 部分完成 | v0.9x | 一周三餐UI ✅;数据不持久化 ❌;从收藏添加 ❌仅snackbar提示 |
| 食材详情查询 | ⚠️ 部分完成 | v0.9x | 食材列表+搜索 ✅;营养信息与选购指南 ❌(仅显示名称和分类) |
| 统一Controller Binding | ✅ 已完成 | v0.63 | AppBinding全局管理+移除重复注册 |
---
@@ -747,18 +631,18 @@ Future<List<RecipeModel>> fetchFeedRecipes() async {
### 已实现工具列表
| 工具名称 | 路由 | 是否联网 | 说明 |
|---------|------|---------|------|
| ⏱️ 烹饪计时器 | `/tools/timer` | ❌ 离线 | 多步骤倒计时 |
| 📏 用量换算 | `/tools/converter` | ❌ 离线 | 常用单位换算 |
| 🧮 BMI 计算器 | `/tools/bmi` | ❌ 离线 | 含健康建议 |
| ⚖️ 份量缩放 | `/tools/scaler` | ❌ 离线 | 按比例调整食材用量 |
| 🥜 过敏原检查 | `/tools/allergen` | ✅ 联网 | 食材过敏原查询 |
| 🍽️ 用餐时段推荐 | `/tools/meal-time` | ✅ 联网 | 根据时间推荐菜谱 |
| 📅 每周菜单规划 | `/tools/planner` | ❌ 离线 | 一周三餐规划 |
| 🥕 食材详情查询 | `/tools/ingredient` | ✅ 联网 | 食材营养信息 |
| 📊 营养中心 | `/tools/nutrition` | ✅ 联网 | 营养追踪仪表盘 |
| 📈 热门统计 | `/tools/stats` | ✅ 联网 | 热门菜谱排行 |
| 工具名称 | 路由 | 是否联网 | 完成度 | 说明 |
|---------|------|---------|--------|------|
| ⏱️ 烹饪计时器 | `/tools/timer` | ❌ 离线 | ✅ 完整 | 多步骤倒计时 |
| 📏 用量换算 | `/tools/converter` | ❌ 离线 | ✅ 完整 | 常用单位换算 |
| 🧮 BMI 计算器 | `/tools/bmi` | ❌ 离线 | ✅ 完整 | 含健康建议 |
| ⚖️ 份量缩放 | `/tools/scaler` | ❌ 离线 | ⚠️ 部分 | 按比例调整 ✅;食材硬编码,不支持从菜谱导入 ❌ |
| 🥜 过敏原检查 | `/tools/allergen` | ✅ 联网 | ✅ 完整 | 食材过敏原查询 |
| 🍽️ 用餐时段推荐 | `/tools/meal-time` | ✅ 联网 | ✅ 完整 | 根据时间推荐菜谱 |
| 📅 每周菜单规划 | `/tools/planner` | ❌ 离线 | ⚠️ 部分 | UI ✅;数据不持久化 ❌;从收藏添加 ❌ |
| 🥕 食材详情查询 | `/tools/ingredient` | ✅ 联网 | ⚠️ 部分 | 列表+搜索 ✅;营养详情+选购指南 ❌ |
| 📊 营养中心 | `/tools/nutrition` | ✅ 联网 | ⚠️ 部分 | 环形图+目标 ✅;饼图+折线图 ❌ |
| 📈 热门统计 | `/tools/stats` | ✅ 联网 | ✅ 完整 | 热门菜谱排行 |
### 技术实现
@@ -907,3 +791,143 @@ lib/src/
- [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