Files
digital-pilates/components/model/food
2025-08-29 16:01:13 +08:00
..
2025-08-29 16:01:13 +08:00
2025-08-29 09:41:05 +08:00
2025-08-29 16:01:13 +08:00
2025-08-29 09:41:05 +08:00
2025-08-28 19:24:22 +08:00

食物库页面实现说明

概述

已成功将食物库从弹窗模式改造为页面模式解决了React Native中Modal嵌套的问题。

实现内容

1. 创建食物库页面

  • 文件位置: app/food-library.tsx
  • 功能: 完整的食物库界面,包含搜索、分类导航、食物列表等功能
  • 特点:
    • 支持URL参数传递餐次类型 (mealType)
    • 使用Expo Router进行页面导航
    • 在页面中可以正常使用FoodDetailModal弹窗

2. 修改营养卡片组件

  • 文件: components/NutritionRadarCard.tsx
  • 修改内容:
    • 移除了FoodLibraryModal的导入和使用
    • 将加号按钮的点击事件改为页面导航
    • 使用 router.push('/food-library?mealType=${currentMealType}') 进行导航

3. 更新路由配置

  • 文件: constants/Routes.ts
  • 新增: FOOD_LIBRARY: '/food-library' 路由常量

4. 清理旧文件

  • 删除了 components/model/food/FoodLibraryModal.tsx
  • 更新了 components/model/food/index.ts 导出文件

使用方式

  1. 在statistics页面的营养卡片中点击右上角的加号按钮
  2. 会导航到食物库页面 (/food-library)
  3. 在食物库页面中点击食物项的加号按钮
  4. 会弹出食物详情弹窗 (FoodDetailModal)
  5. 在详情弹窗中可以选择单位和数量点击保存后返回statistics页面

技术优势

  1. 解决Modal嵌套问题: 避免了React Native中Modal嵌套的兼容性问题
  2. 更好的用户体验: 页面导航比弹窗更符合移动端的交互习惯
  3. 键盘适配: FoodDetailModal中的键盘适配功能可以正常工作
  4. 代码结构清晰: 页面和弹窗职责分离,代码更易维护

页面功能

食物库页面功能

  • 搜索食物
  • 分类导航(常见、自定义、收藏等)
  • 食物列表展示
  • 餐次显示
  • 返回导航

食物详情弹窗功能

  • 食物信息展示
  • 营养成分显示
  • 单位选择(克、小份、中份、大份)
  • 数量输入
  • 键盘适配
  • 保存功能

注意事项

  1. 食物库页面使用URL参数传递餐次类型确保从不同餐次点击加号时能正确显示对应的餐次
  2. FoodDetailModal仍然是弹窗形式但现在是在页面中使用避免了嵌套问题
  3. 所有原有的UI样式和交互逻辑都得到了保留