迷你卡片

This commit is contained in:
Developer
2026-04-14 05:35:30 +08:00
parent 5ce8759a18
commit c26ff354ee
195 changed files with 38057 additions and 1842 deletions

View File

@@ -2,355 +2,190 @@
All notable changes to this project will be documented in this file.
## [0.92.4] - 2026-04-13
### 📋 关于页面 + 文档更新
## [0.92.9] - 2026-04-14
#### 新增功能
- 📋 **关于页面** — 新增AboutPage展示应用信息、版本号、用户反馈入口
- 💬 **用户反馈入口** — 关于页面新增"用户反馈"选项,点击跳转意见反馈页
### 🃏 迷你卡片优化 — 液态玻璃效果+详情跳转+Bug修复
#### 页面结构
- 📱 应用信息:版本号、更新日期、构建版本
- 📞 联系我们:用户反馈、评价应用、联系邮箱
- 📜 法律信息:用户协议、隐私政策
#### 路由更新
- 新增 `/about` 路由指向AboutPage
- profile_settings.dart"关于"按钮跳转改为 `/about`
#### 文档更新
- 📄 **UNFINISHED_FEATURES.md** — 新增阶段三十七/三十八记录更新总体进度96%
- 📄 **PAGE_STRUCTURE_ANALYSIS.md** — 新增收藏页面和关于页面结构描述,更新工具中心布局说明
## [0.92.3] - 2026-04-13
### 📚 文档更新 + UI布局优化
#### 文档更新
- 📄 **PAGE_STRUCTURE_ANALYSIS.md** — 更新全局功能缺失汇总状态(相关推荐/过敏原警示/营养可视化标记为✅v0.92.0
- 📄 **PAGE_STRUCTURE_ANALYSIS.md** — 更新API能力分析部分已使用/未使用接口状态同步)
- 📄 **UNFINISHED_FEATURES.md** — 更新API接口使用状态一览新增api_check_duplicate.php、静态数据使用状态
#### UI布局优化
- ❤️ **收藏页面** — 布局改为每行2个卡片GridView.builder替代ListView.separated
- 🛠️ **工具中心页面** — 新增"使用工具"按钮,点击直接跳转工具使用页面(非详情页)
#### 代码改进
- 🎨 收藏卡片改为垂直布局,图标居中显示
- 🎨 工具卡片新增"使用工具"按钮(次要样式,边框风格)
## [0.92.2] - 2026-04-13
### 📚 烹饪技巧模块 — HowToCook开源项目集成
#### 新增功能
- 📖 **烹饪技巧列表页** — 分类展示18篇烹饪技巧文章基础/进阶技巧/学习烹饪)
- 📝 **Markdown渲染页面** — 使用flutter_markdown_plus渲染支持标题/列表/代码块/表格等
- 🔍 **搜索功能** — 支持按名称和分类搜索烹饪技巧
- 🏠 **本地Assets存储** — 18个MD文件打包到应用内无需网络请求
#### 数据来源
- 数据来源于 [HowToCook](https://github.com/Anduin2017/HowToCook) 开源项目
- 包含厨房准备、食材相克、油温判断、学习烹饪等实用技巧
#### 文件结构
- `assets/md/tips/` — 基础技巧MD文件
- `assets/md/tips/advanced/` — 进阶技巧MD文件
- `assets/md/tips/learn/` — 学习烹饪MD文件
- `assets/json/cooking_tips.json` — 技巧元数据索引
#### 依赖更新
- 新增 `flutter_markdown_plus: ^1.0.7` 依赖
#### 优化
- 🎨 **液态玻璃效果重设计** — 底部信息区改为"装水玻璃杯"效果
- 使用 ClipRect + BackdropFilter(sigmaX/Y: 30) 实现高斯模糊
- 顶部白色半透明边框(0.25 alpha)模拟光线折射
- 渐变背景(0.05→0.12 alpha)模拟水杯透明度
- 文字添加 Shadow(black54/black38) 增强可读性
- 按钮使用渐变玻璃效果(0.25→0.1 alpha)替代纯色
- 🆕 **categoryName 显示** — 迷你卡片底部信息区显示分类名称标签(液态玻璃胶囊样式)
- 🆕 **详情按钮API搜索** — 点击详情按钮通过 RecipeRepository.search() 搜索菜名获取API真实ID再跳转菜谱详情页
- 🆕 **全屏查看器详情按钮** — 全屏查看器中详情按钮也通过API搜索跳转
#### Bug修复
- 🐛 修复QR码绘制使用qr 3.0 APIisDark方法移至QrImage类
- 🐛 修复recipe_detail_page.dart中steps字段不存在问题
- 🐛 修复cooking_mode_page.dart和daily_menu_page.dart缺少material导入
- 🐛 修复ToastService调用方式
- 🐛 **setState after dispose** — _goNext()/_goPrev() 添加 mounted 检查,防止动画回调在页面销毁后调用 setState
- 🐛 **MediaQuery initState 报错** — 图片预加载从 initState 移至 didChangeDependencies
- 🐛 **分享功能改为图片分享** — 使用 RepaintBoundary 截取卡片组件为PNG图片通过 ShareXFiles 分享
- 🐛 **PaginatedData 缺少 totalPages** — 补充必需参数
## [0.92.1] - 2026-04-13
#### 影响文件
- `lib/src/pages/discover/mini_card_page.dart` — 液态玻璃重设计+详情跳转+Bug修复
### 📁 目录结构重构 — 所有文件夹不超过8个文件
## [0.92.8] - 2026-04-14
#### controllers/ (14→1+4子文件夹)
- `controllers/recipe/` — recipe_detail_controller, search_controller
- `controllers/home/` — home_controller, main_navigation_controller
- `controllers/tools/` — tools_controller, what_to_eat_controller, bedtime_reminder_controller
- `controllers/data/` — favorites, browse_history, cooking_note, shopping_list, meal_record, weekly_menu
#### models/ (11→4+2子文件夹)
- `models/user/` — user_goal_model, user_preference_model
- `models/data/` — browse_history, cooking_note, meal_record, shopping_item, weekly_menu
#### widgets/根目录 (11→4+2子文件夹)
- `widgets/common/` — adaptive_widgets, loading_indicator, responsive_grid, skeleton_widgets
- `widgets/recipe/` — recipe_card, recipe_image, nutrition_dashboard_card
#### pages/profile/ (11→5+2子文件夹)
- `pages/profile/data/` — cache_manage, data_center, stats_dashboard
- `pages/profile/social/` — chat, favorites, footprints
#### pages/tools/ (14→3+3子文件夹)
- `pages/tools/health/` — allergen_checker, allergen_report, bmi_calculator, meal_time_recommend
- `pages/tools/cooking/` — cooking_note, cooking_timer, serving_scaler, unit_converter
- `pages/tools/planning/` — meal_planner, weekly_menu_planner, eating_times
#### widgets/glass/ (10→7+1子文件夹)
- `widgets/glass/nav/` — glass_nav_bar, liquid_glass_nav_bar, home_app_bar
#### widgets/recipe_detail/ (20→1+4子文件夹)
- `widgets/recipe_detail/header/` — cover_image, title_section, author_card, meta_info_card, time_info
- `widgets/recipe_detail/content/` — ingredients_section, ingredient_details, steps_section, indices_card, picid_card
- `widgets/recipe_detail/interaction/` — action_bar, rating_dialog, statistics_bar, tags_section
- `widgets/recipe_detail/info/` — nutrition_section, ring_chart, allergen_warning, category_breadcrumb, similar_section
#### 代码质量
- ✅ flutter analyze 零错误通过
- 🔧 修复所有相对路径import3个文件
## [0.92.0] - 2026-04-13
### 🚀 21项功能批量实现 — 评分排行榜/过敏原报告/营养可视化/查重检测/运营大屏等
### 🃏 迷你卡片页面 — Tinder风格滑动浏览菜品 + 首页瀑布流插入
#### 新增功能
- 🏆 **评分排行榜**HotPage新增sort=rate排序HotRepository/HotController/HotPage三层联动
- 📋 **过敏原报告页面** — AllergenReportPage选择过敏原→生成报告→安全/风险菜谱分类→替代建议
- 📊 **营养可视化环形图** — NutritionRingChart组件蛋白质/脂肪/碳水/纤维占比环形图+热量达标进度条
- 🎯 **筛选步骤引导** — WhatToEatPage新增3步引导指示器选分类→选口味→开转!
- 🔄 **食材替代建议** — IngredientDetailPage新增30+食材替代映射,点击可跳转查看替代食材
- 🍽️ **相似菜品推荐** — RecipeSimilarSection组件菜品详情页底部推荐同分类菜品
- 🍽️ **食材相关菜谱** — IngredientDetailPage底部显示含该食材的菜谱列表
- 💪 **健身餐推荐**NutritionCenterPage新增减脂餐/增肌餐/生酮餐/碳水补充快捷入口
- **营养中心快捷功能**营养目标/营养报告/购物清单快捷入口
- 🔍 **查重检测页面**DuplicateCheckPage输入菜谱名称→搜索相似→计算相似度→分级显示
- 📈 **运营数据大屏**StatsDashboardPage今日/本月/历史排行+浏览/点赞汇总统计
- 📈 **数据管理中心增强** — DataCenterPage新增运营数据大屏入口
- 🆕 **迷你卡片页面**交友软件风格左右滑动浏览菜品
- 数据源:`/assets/recipes.json`341道菜11个分类
- 图片URL`https://eat.wktyl.com/api/assets/mpic/{id}.jpeg`
- 左右拖拽滑动切换菜品卡片,拖拽距离>80触发滑动
- 滑动时显示"❤️ 喜欢"或"👎 下一道"标签
- 底部4个操作按钮下一道/收藏/喜欢/上一道
- 进度条显示浏览进度
- 🆕 **分类筛选**顶部横向滚动分类标签(全部/素菜/荤菜/水产等11类
- 🆕 **搜索功能**搜索菜品名称,点击结果跳转到对应卡片
- 🆕 **网格视图**卡片/网格双视图切换响应式布局2/3/4列
- 🆕 **收藏集成**卡片右上角收藏按钮,与全局收藏系统联动
- 🆕 **本地缓存** — SharedPreferences存储5-10条记录不含图片离线fallback
- 🆕 **喜欢/不喜欢记录** — 持久化到SharedPreferences重启保留
- 🆕 **缓存管理** — 缓存管理页面新增迷你卡片缓存清理入口
- 🆕 **图片独立组件** — _MiniCardImageView 独立组件,文本在图片内底部展示
- 🆕 **液态玻璃效果** — 卡片顶部操作栏和底部信息区使用 GlassContainer 毛玻璃
- 🆕 **全屏图片查看器** — 点击卡片打开全屏 PageView左右滑动切换异步预加载5张相邻图片
- 🆕 **分享按钮** — 使用 share_plus 分享菜品信息+图片URL
- 🆕 **缓存优先加载** — 查看过的卡片存入缓存,下次进入先显示缓存再内部加载
- 🆕 **首页瀑布流插入** — 迷你卡片以全宽横幅插入首页瀑布流1:20比例
- 每20个瀑布流item后插入1个迷你卡片横幅
- 点击横幅跳转迷你卡片页面支持指定卡片ID
- MiniCardDiscoverCard 组件:液态玻璃+全宽图片+分类标签
- 🆕 **MiniCardService** — 独立数据服务,支持缓存优先,供多页面复用
- 🆕 **路由参数支持** — 迷你卡片页面支持 initialRecipeId 参数,从首页跳转到指定卡片
#### 工具中心新增
- 📋 过敏原报告 — 工具中心健康分类新增入口
- 🔍 查重检测 — 工具中心数据分类新增入口
- 📊 运营数据大屏 — 工具中心数据分类新增入口
#### 入口
- 个人中心 → 迷你卡片原null路由已连接
- 首页瀑布流 → 迷你卡片横幅每20个item后出现
#### 路由注册
- `/allergen-report` — 过敏原报告页面
- `/duplicate-check` — 查重检测页面
- `/stats-dashboard` — 运营数据大屏页面
#### 影响文件
- `lib/src/models/mini_card_model.dart` — 新建数据模型
- `lib/src/pages/discover/mini_card_page.dart` — 重构:图片独立组件+全屏查看器+分享+缓存优先
- `lib/src/config/app_routes.dart` — 路由支持 initialRecipeId 参数
- `lib/src/pages/profile/profile_home.dart` — 连接入口
- `lib/src/pages/profile/data/cache_manage_page.dart` — 新增迷你卡片缓存管理
- `lib/src/widgets/discover/mini_card_discover_card.dart` — 新建瀑布流迷你卡片横幅组件
- `lib/src/widgets/discover/discover_waterfall.dart` — 支持迷你卡片插入SliverMainAxisGroup
- `lib/src/models/discover_model.dart` — 新增 miniCard 类型和 MiniCardRecipeRef
- `lib/src/services/data/mini_card_service.dart` — 新建迷你卡片数据服务
- `lib/src/pages/home/home_page.dart` — 加载迷你卡片数据,传递给瀑布流
#### 代码质量
- ✅ flutter analyze 零错误通过
- 🔧 修复nutrition_ring_chart num→double类型转换
- 🔧 修复stats_dashboard_page HotItem属性引用(recipeId→id, title→name)
- 🔧 移除allergen_report_page未使用的_isGenerating字段
## [0.92.7] - 2026-04-14
## [0.91.21] - 2026-04-13
### 🧬 营养成分交互增强 + 食材详情页修复
### 🐛 食材详情页闪退修复 + API能力分析文档更新
#### 新增功能
- 🆕 **营养成分展开更多** — 菜品详情页详细营养成分标题右侧新增"更多"按钮
- 点击弹出底部对话框CupertinoModalPopup从下到上弹出
- 每个营养成分显示emoji图标+名称+数值+跳转提示
- 点击营养成分跳转到含该成分的菜品列表页
- 营养成分emoji映射表31种营养成分对应emoji
- 🆕 **营养成分菜品列表页** — 新增 NutritionRecipeListPage
- 使用 `api_filter.php?act=filter_recipes&nutrition_name=` 接口查询
- 支持分页加载,显示菜品卡片+图片
- 路由: `/nutrition-recipe-list`
#### Bug修复
- 🐛 **setState() after dispose() 闪退** — 食材详情页异步操作完成后页面已销毁仍调用setState
- `_loadIngredientFromArgs()` 添加 `mounted` 检查
- `_loadIngredientByName()` 添加 `mounted` 检查
- `_loadIngredients()` 3处 `setState` 全部添加 `mounted` 检查
- 举一反三扫描15个页面的 `await→setState` 模式,确认其他页面已有保护
#### 修复内容
- 🐛 **食材详情菜谱数量显示0** — 修复 `recipeCount` 始终为0的问题
- 根因API `ingredient_detail` 不返回 `statistics` 字段,但返回 `related_recipes` 数组
- 修复:IngredientModel 新增 `relatedRecipes` 字段和 `effectiveRecipeCount` getter
- `statistics.recipeCount` 为0时fallback 到 `related_recipes.length`
- 同时支持 `recipe_count``view_count` 顶层字段
- 🔧 **食材详情卡片位置调整** — 将"食材详情"卡片移到"储存方法"下面
#### 文档更新
- 📊 **API能力分析全面更新** — PAGE_STRUCTURE_ANALYSIS.md
- 新增"已使用API接口一览"表8个接口文件+9个Repository
- 新增"未使用API接口一览"表18个未调用接口/参数/静态资源)
- 🟢 已有API可直接开发12项新增筛选步骤引导、编码/模糊查询、食谱子分类)
- 🟡 需组合API开发10项新增食材营养详情、食材替代建议、营养目标追踪、统一格式输出
- 🔴 需后端新开发API13项新增烹饪笔记同步、购物清单同步、每周菜单存储
- 新增"推荐开发路线图"三阶段规划
#### 影响文件
- `lib/src/widgets/recipe_detail/info/recipe_nutrition_section.dart` — 新增展开更多+弹窗+跳转
- `lib/src/pages/discover/nutrition_recipe_list_page.dart` — 新建
- `lib/src/config/app_routes.dart` — 新增路由
- `lib/src/models/recipe/ingredient_model.dart` — 新增relatedRecipes+effectiveRecipeCount
- `lib/src/pages/tools/ingredient_detail_page.dart` — 修复count+调整卡片顺序
#### 代码修复
- 🍃 **CupertinoIcons.leaf不存在** — 替换为 `Icons.eco`Material添加 `material.dart` import
- 🧹 **移除不必要的 painting.dart import** — 替换为 `material.dart`
## [0.92.6] - 2026-04-14
## [0.91.20] - 2026-04-13
### 🖼️ 图片加载修复 + 收藏页交互增强 + 详情页AI提示
### 🥬 食材详情本地缓存 + 缓存管理增强
#### 修复内容
- 🐛 **菜品卡片图片不显示** — 修复HTTP→HTTPS协议问题+Fallback链机制
- RecipeImage 改为 StatefulWidget支持URL链自动fallbackcoverUrl→picId a→picId b
- HTTP→HTTPS 自动转换解决iOS阻止HTTP请求问题
- DiscoverRecipe 模型新增 `picId` 字段和 `resolvedCoverUrl` getter
- 从cover URL中自动提取picId正则匹配 `/pic/(\d+)`
- RecipeDiscoverCard 简化图片加载逻辑,使用模型字段替代本地计算
- RecipePicIdCard 修复HTTP→HTTPS显示问题
#### 食材缓存
- 🥬 **IngredientModel.toJson** — 新增序列化方法,支持缓存存储
- 💾 **RecipeRepository.fetchIngredientDetail** — 添加缓存逻辑优先读取本地缓存7天有效期
- 🗑️ **缓存管理页面** — 新增食材详情缓存管理
- 概览卡片:显示食材缓存数量
- 操作按钮:清理食材详情缓存
- 食材列表:显示已缓存食材,支持左滑删除、点击查看
- 单项清理:`_clearSpecificIngredientCache`
#### 新增功能
- 🆕 **收藏页跳转详情** — 点击收藏菜品卡片跳转菜品详情页
- 🆕 **收藏页下拉工具中心** — 类似微信小程序下拉面板,下拉显示工具中心
- 支持手势拖拽和动画过渡
- 工具中心内嵌模式(隐藏导航栏)
- 🆕 **工具中心响应式布局** — 一行2列横屏自动多列
- 🆕 **首页回顶部** — AppBar右上角第二个图标改为回顶部功能不刷新内容
- 🆕 **菜品详情页AI图片提示** — 封面图顶部显示"图片可能为AI生成"横幅可点击X关闭
## [0.91.19] - 2026-04-13
#### 影响文件
- `lib/src/widgets/recipe/recipe_image.dart` — 重构为StatefulWidget添加Fallback链+HTTPS转换
- `lib/src/models/discover_model.dart` — 新增picId字段+resolvedCoverUrl getter
- `lib/src/widgets/discover/recipe_discover_card.dart` — 简化图片加载逻辑
- `lib/src/widgets/recipe_detail/content/recipe_picid_card.dart` — HTTPS修复
- `lib/src/widgets/recipe_detail/header/recipe_cover_image.dart` — 新增AI横幅
- `lib/src/pages/profile/social/favorites_page.dart` — 跳转详情+下拉工具中心
- `lib/src/pages/tools/tools_center_page.dart` — 响应式2列布局+内嵌模式
- `lib/src/pages/home/home_page.dart` — 回顶部功能
- `lib/src/widgets/glass/nav/home_app_bar.dart` — 图标更换
### 🎨 全局UI统一圆角/颜色/毛玻璃/空状态/加载状态
## [0.92.5] - 2026-04-14
#### 统一圆角
- 📐 **替换89处硬编码圆角**`BorderRadius.circular(N)``DesignTokens.borderRadiusSm/Md/Lg/Xl/Full`
- 映射规则2-8→Sm, 10-16→Md, 18-20→Lg, 22-28→Xl, 25+→Full
- 9个文件缺少 `design_tokens.dart` import已自动添加
### 🎠 轮播组件优化 — 问候语集成与刷新问题修复
#### 统一颜色
- 🎨 **替换20处硬编码颜色**`Color(0xFFFF3B30)` 等 → `DesignTokens.red/green/orange/purple/blue/teal/text2/text3`
- 映射规则FF3B30/F44336→red, 34C759/4CAF50→green, FFB800→gold, 9C27B0→purple, 3498DB→blue, 1ABC9C→teal, 8E8E93→text2
- 修复 `const DesignTokens.red``DesignTokens.red`(静态字段不是构造函数
- 修复 `Colors.transparent``const Color(0x00000000)`(避免缺少 import
#### 优化内容
- 🔧 **问候语集成** — 将问候语从 HomeAppBar 移至轮播组件顶部固定显示
- 左侧显示时间问候(如"夜深了"、"早上好"等)
- 右侧显示日期MM/DD格式
- 固定在轮播组件顶部,不随轮播切换
- 点击问候语可切换显示提示语(如"深夜了,注意身体"
- 🔧 **液态玻璃效果** — 问候语组件使用真正的 iOS 风格液态玻璃
- `BackdropFilter` 模糊背景sigmaX/Y = glassBlur * 1.2
- 半透明白色背景(深色模式 8% 透明度,浅色模式 25% 透明度)
- 细边框纹路(深色模式 15% 透明度,浅色模式 30% 透明度)
- 🔧 **滚动事件隔离** — 使用 `NotificationListener` 阻止轮播滚动事件冒泡
- 修复轮播滚动导致搜索框消失的问题
- 修复轮播滚动触发底部卡片刷新的问题
- 🔧 **状态隔离优化** — 彻底隔离营养数据监听
- PageView 提取为独立的 `_CarouselPageView` StatelessWidget
- 营养数据监听提取为独立的 `_NutritionDataBuilder` 组件
- 页面指示器使用 `ValueNotifier` + `ValueListenableBuilder`
- 🔧 **搜索栏修复** — 修复 HomeAppBar 副栏高度问题,确保搜索栏正常显示
#### 增强EmptyState
- 💎 **毛玻璃卡片包裹** — 新增 `useGlassCard` 参数默认true
- 🎯 **图标圆形背景** — 使用 `DesignTokens.dynamicPrimary` 主题色圆形背景
- 📏 **行高优化** — message 文本 `height: 1.5` 提升可读性
#### 影响文件
- `lib/src/widgets/carousel/feature_carousel_card.dart` — 集成问候语,液态玻璃效果,滚动事件隔离
- `lib/src/widgets/glass/nav/home_app_bar.dart` — 移除问候语,简化副栏
#### 增强LoadingIndicator
- 💎 **毛玻璃卡片包裹** — 新增 `useGlassCard` 参数
- 🎯 **主题色指示器** — 使用 `DesignTokens.dynamicPrimary` 替代 ThemeService 直接引用
- 📐 **centered参数** — 支持非居中场景(如列表底部加载更多)
## [0.92.4] - 2026-04-14
## [0.91.18] - 2026-04-13
### 🎠 功能轮播组件 — 首页全新交互体验
### 🎨 修复主题色切换全局不生效 + 统一动态主题色引用
#### 新增功能
- 🆕 **FeatureCarouselCard** — 替换原有营养卡片,提供六个功能入口
- 📊 **今日营养** — 展示营养数据环形图(热量、蛋白质、脂肪、碳水)
- 🌟 **应用推荐** — 弹窗确认后跳转浏览器访问推荐页面
- 👨‍🍳 **厨艺技巧** — 跳转烹饪技巧页面
- 📈 **运营数据** — 跳转数据大屏页面
- 🎲 **今天吃什么** — 随机推荐菜谱
- 🎁 **敬请期待** — 占位项
#### 核心Bug修复
- 🎨 **主题色切换全局不生效** — 根因UI组件使用 `DesignTokens.primary`(静态常量)而非 `DesignTokens.dynamicPrimary`动态读取ThemeService
- 批量替换 `isDark ? DarkDesignTokens.primary : DesignTokens.primary``DesignTokens.dynamicPrimary`34个文件
- 批量替换 `DesignTokens.primary``DesignTokens.dynamicPrimary`33个文件排除design_tokens.dart定义和theme_service.dart默认值
- 修复 `DarkDesignTokens.dynamicPrimary` 误替换为 `DesignTokens.dynamicPrimary`5个文件
- 修复 `const` 上下文错误:移除包含 `dynamicPrimary``const` 构造函数关键字
- 修复默认参数值错误:`AppProgressBar.color``NutritionLineChart.lineColor` 改为可空+初始化列表
#### 交互特性
- ⏱️ **自动轮播** — 3秒间隔自动切换
- 👆 **手动滑动** — 支持左右滑动切换
- 🔘 **进度指示器** — 底部小圆点显示当前位置
- 🎨 **渐变背景** — 每个卡片独特的渐变色设计
- 🌙 **深色模式** — 完美适配深色主题
#### 影响范围
- 全部59个dart文件中的439处 `DesignTokens.primary` / `DarkDesignTokens.primary` 引用
- 主题色切换现在能即时生效于所有页面
#### 影响文件
- `lib/src/widgets/carousel/feature_carousel_card.dart` — 新建
- `lib/src/pages/home/home_page.dart` — 更新引用
## [0.91.17] - 2026-04-13
### 📝 文档更新:页面结构分析 + 视图文件引用
#### 核心变更
- 📊 **新增页面结构分析文档**`docs/dev/PAGE_STRUCTURE_ANALYSIS.md`(新建)
- 全局导航图MainTabView → 首页/发现/工具/我的 四大Tab
- 12个页面详细结构图文本符号可视化
- 每个页面跳转关系表(触发元素/跳转方式/目标页面/路由/传参)
- 美观问题分析(严重度分级:🟡高/🟡中/🟢低)
- 功能缺失清单优先级P1-P3
- 全局美观/功能问题汇总
- 📄 **页面视图文件引用**`docs/dev/PAGE_STRUCTURE_ANALYSIS.md`
- 为每个页面添加"📄 页面视图文件"章节
- 仅展示前2个关联视图文件主页面+核心组件/控制器)
- 涵盖:首页/发现/搜索/高级搜索/菜品详情/工具中心/我的/食材详情/分类浏览/标签列表/热门排行/今天吃什么
- 📋 **压缩未完成功能清单**`docs/dev/UNFINISHED_FEATURES.md`
- 从~600行压缩至~130行
- 聚焦未完成任务,已完成阶段仅保留汇总
## [0.91.16] - 2026-04-13
### ✨ 搜索功能修复 + 高级搜索 + 食材详情返回首页
#### 核心变更
- 🔍 **修复搜索功能**`lib/src/controllers/search_controller.dart`
- 切换到 `api_filter.php?act=global_search` 接口,解决搜索无结果问题
- 新增4类搜索结果recipeResults/ingredientResults/tasteTagResults/cookingTagResults
- 新增 SearchIngredientResult 模型解析食材搜索结果
- 新增 `totalResultCount`/`hasAnyResult`/`_autoSelectTab` 便捷方法
- 新增 `searchByFilter()` 支持高级筛选搜索
- 📑 **搜索结果分Tab展示**`lib/src/pages/home/search_page.dart`
- 搜索结果动态Tab📖 菜谱 / 🥬 食材 / 👅 口味 / 🍳 工艺
- 每个Tab显示结果数量徽章
- 自动选择有结果的Tab
- 导航栏增加高级搜索入口(⚙️ slider_horizontal_3图标
- 食材结果卡片显示分类名和菜谱数量
- 口味/工艺标签结果使用2列网格布局
- ⚙️ **新增高级搜索页面**`lib/src/pages/home/advanced_search_page.dart`(新建)
- 4个筛选维度📂 菜谱分类 / 👅 口味标签 / 🍳 工艺标签 / 🕐 用餐时段
- 支持多条件组合筛选
- 支持重置筛选条件
- 底部搜索按钮调用 searchByFilter() 执行筛选
- 🔌 **Repository新增接口**`lib/src/repositories/recipe_repository.dart`
- `fetchMainCategories()`: 获取菜谱大类列表(调用 recipe_main_categories 接口)
- 🛤️ **新增路由**`lib/src/config/app_routes.dart`
- 新增 `advancedSearch` 路由(/advanced-search
- 🏠 **食材详情返回首页**`lib/src/pages/tools/ingredient_detail_page.dart`
- 底部按钮从"返回列表"改为"返回首页"
- 使用 `Get.until((route) => route.isFirst)` 返回根路由
- 📦 **CategoryModel增强**`lib/src/models/recipe/category_model.dart`
- fromJson 支持 `recipe_count` 字段映射到 count
## [0.91.15] - 2026-04-13
### ✨ 发现页推荐Tab新增口味/工艺筛选 + 分类导航修复
#### 核心变更
- 👅 **推荐Tab新增口味筛选**`lib/src/pages/discover/discover_page.dart`
- GlassSegmentedControl 从2段扩展为4段📖 菜谱 / 🥬 食材 / 👅 口味 / 🍳 工艺
- 口味Tab显示口味标签网格3列点击跳转 TagRecipeListPage
- 工艺Tab显示工艺标签网格3列点击跳转 TagRecipeListPage
- 🏷️ **标签网格UI**`lib/src/pages/discover/discover_page.dart`
- 新增 `_buildTagGrid` 方法3列紧凑布局圆角卡片+边框
- 空状态显示🏷️图标+"暂无标签数据"
- 点击标签传递 tagName/tagId/tagType 到 TagRecipeListPage
- 📂 **分类网格重构**`lib/src/pages/discover/discover_page.dart`
- 提取 `_buildCategoryGrid` 方法,与标签网格分离
- 提取 `_buildRecommendContent` 方法根据tab索引切换内容
- 🔌 **Repository新增筛选接口**`lib/src/repositories/recipe_repository.dart`
- `fetchTasteTags()`: 获取口味标签列表
- `fetchCookingTags()`: 获取工艺标签列表
- `filterRecipesByTag()`: 按口味/工艺/分类筛选菜谱
- 🐛 **分类导航修复**`lib/src/pages/discover/category_browse_page.dart`
- 修复点击菜谱/食材分类闪退问题BOTTOM OVERFLOWED
- 使用 CustomScrollView + SliverList 替代 Column + Expanded
## [0.91.14] - 2026-04-13
### ✨ 菜品详情页功能完善 — 评分显示 + 交互跳转
#### 核心变更
-**新增 RecipeRating 模型**`lib/src/models/recipe/recipe_model.dart`
- 对齐 API v2.8.0 rating 字段score/nums/display/status/level/star
- 支持评分状态判断none/few/normal/sufficient/abnormal
- 支持评分等级判断(优秀/推荐/一般/较差/不推荐)
- 提供 `displayText`/`hasRating` 等便捷属性
- 📊 **更新 RecipeStatistics 模型**`lib/src/models/recipe/recipe_model.dart`
- 新增 `rateNums`/`rateScore` 字段,替代旧的 `recommends`/`recommendScore`
- 新增 `rating` (RecipeRating?) 字段
- 旧字段标记为 `@Deprecated`,保持向后兼容
- fromJson 兼容 `rate_nums`/`recommends`/`recommend_count` 多种API字段名
- 📈 **重构 RecipeStatisticsBar**`lib/src/widgets/recipe_detail/recipe_statistics_bar.dart`
- 评分列从"⭐推荐"改为星级+评分文本+等级标签
- 5星评级显示CupertinoIcons.star_fill/star
- 评分等级彩色标签(🌟金色优秀/⭐蓝色推荐/✨灰色一般/⚠️红色较差)
- 无评分时显示灰色星星+"暂无评分"
- 🖼️ **更新 RecipeCoverImage**`lib/src/widgets/recipe_detail/recipe_cover_image.dart`
- 封面图叠加层新增评分徽章(⭐ 4.5
- 有评分时显示评分徽章,无评分时显示热度标签
- 评分等级对应不同徽章颜色
- 🏷️ **标签点击跳转**`lib/src/widgets/recipe_detail/recipe_tags_section.dart`
- 点击标签跳转到 TagRecipeListPage
- 标签添加 chevron_right 图标提示可点击
- 📂 **分类面包屑点击跳转**`lib/src/widgets/recipe_detail/recipe_category_breadcrumb.dart`
- 非末级分类可点击跳转到 CategoryBrowsePage
- 末级分类高亮不可点击
- 面包屑项添加 chevron_right 图标提示可点击
- 🔄 **RecipeDetailPage 传递 rating**`lib/src/pages/home/recipe_detail_page.dart`
- RecipeCoverImage 和 RecipeStatisticsBar 接收 rating 参数
#### 文档更新
- 📋 更新 `docs/dev/UNFINISHED_FEATURES.md` 新增阶段二十九:菜品详情页功能完善
> 📌 已移除更早版本记录(0.91.13及之前),功能已归档至软件特性清单。
> 📌 已移除较早版本记录(0.92.3及之前),功能已归档至软件特性清单。