Files
kitchen/CHANGELOG.md
2026-04-15 07:11:28 +08:00

17 KiB
Raw Blame History

Changelog

All notable changes to this project will be documented in this file.

[0.96.1] - 2026-04-15

🐛 修复 — Flutter调试安装APK卡住 / Release构建找不到APK

Bug修复

  • 🐛 修复 flutter run 调试时 APK 安装一直卡在 "Installing build\app\outputs\flutter-apk\app-debug.apk..." 的问题
    • 原因:local.properties 中残留 flutter.buildMode=release/flutter.versionName/flutter.versionCode 等自动生成属性,干扰 Flutter 工具的构建模式判断和 APK 路径查找
    • 修复:清理 local.properties 中的自动生成属性(这些属性由 Flutter 构建时自动写入,不应持久化)
    • 修复:卸载设备上旧版本应用 + flutter clean 清理构建缓存
  • 🐛 修复 flutter build apk --release 构建后报 "Gradle build failed to produce an .apk file" 的问题
    • 原因:android/build.gradle.kts 中的构建目录重定向(newBuildDir../../build)是 Flutter 新版模板的正确设计,误删后导致 APK 路径不匹配
    • 修复:恢复 build.gradle.kts 中的 newBuildDir 重定向逻辑,确保 APK 输出到 <项目根>/build/app/outputs/flutter-apk/

[0.96.0] - 2026-04-15

📧 菜谱邮件分享功能 — 发送菜谱详情到邮箱

新增功能

  • 🆕 邮件分享按钮 — 菜谱详情页底部新增"📧 发送菜谱到邮箱"按钮
    • 点击弹出底部对话框支持3种发送线路选择
    • 🚀 官方线路1 (gg@0gg.cc via free.mboxhosting.com)
    • ✉️ 官方线路2 (2821981550@qq.com via smtp.qq.com)
    • 🔧 自定义SMTP用户填写服务器/账号/密码/端口)
    • 支持纯文本+HTML双格式邮件包含菜谱标题、简介、食材、步骤、营养信息
    • HTML邮件采用iOS风格设计渐变头部、圆角卡片、营养网格布局
    • 邮件标题格式:🍳 {菜谱名称} — 小妈厨房菜谱分享
    • 输入校验:邮箱格式、必填项检查
    • 发送状态反馈发送中显示loading、成功/失败Toast提示
  • 🆕 EmailService — 基于 mailer 库的SMTP邮件发送服务
    • 多线路支持官方线路1/线路2/自定义SMTP
    • 支持异常捕获MailerException/SocketException/通用异常
    • Logger日志记录发送结果
    • 发送成功/失败自动记录到 EmailHistoryController
  • 🆕 发件记录页面 — 足迹页统计栏新增📧发件记录入口
    • 记录列表展示:菜谱标题、收件人、线路、状态、时间
    • 左滑删除单条记录
    • 清空全部记录
    • 点击查看详情弹窗(收件人/发件人/服务器/线路/主题/状态/错误信息)
    • 点击"查看菜谱"跳转菜谱详情
    • 统计头部:总记录数 + 成功/失败数量标签
  • 🆕 EmailRecordModel — 邮件发送记录模型SharedPreferences JSON持久化
  • 🆕 EmailHistoryController — 邮件记录控制器最多200条记录

Dependencies

  • 新增: mailer ^7.1.0

影响文件

  • pubspec.yaml — 添加 mailer 依赖
  • lib/src/services/data/email_service.dart — 新建邮件发送服务(多线路+历史记录)
  • lib/src/widgets/recipe_detail/interaction/recipe_email_button.dart — 新建邮件按钮组件
  • lib/src/models/data/email_record_model.dart — 新建邮件记录模型
  • lib/src/controllers/data/email_history_controller.dart — 新建邮件记录控制器
  • lib/src/pages/profile/social/email_history_page.dart — 新建发件记录页面
  • lib/src/pages/profile/social/footprints_page.dart — 统计栏增加发件记录入口
  • lib/src/pages/home/recipe_detail_page.dart — 底部添加邮件按钮
  • lib/src/config/app_routes.dart — 注册 /email-history 路由

[0.95.0] - 2026-04-14

🔄 MiniCardPage 滑动引擎重构 — 引入 flutter_card_swiper

重构

  • 🔄 自定义手势系统移除 — 移除 GestureDetector + 3个AnimationControllerexit/enter/bounce+ 手动拖拽追踪(_dragX/_dragY) 的自实现滑动系统
  • 🔄 引入 flutter_card_swiper ^7.2.0 — 使用专业 Tinder 风格卡片滑动库替代自实现
    • CardSwiper 内置:滑动动画、回弹效果、堆叠缩放、旋转角度
    • CardSwiperController 支持程序化控制swipe(direction)、undo()、moveTo(index)
    • onSwipe/onUndo 回调统一处理 like/dislike/撤销逻辑
    • 配置threshold=80, maxAngle=20, scale=0.92, duration=300ms, numberOfCardsDisplayed=2

删除代码(-158行

  • _exitAnimController / _enterAnimController / _bounceAnimController — 3个AnimationController
  • /_dragX / _dragY / _isDragging / _isAnimatingExit / _exitDirection / _exitStartX / _exitStartY — 手势状态变量
  • /_swipeRight() / _swipeLeft() / _startExitAnimation() / _onExitComplete() / _goPrev() / _bounceBack() / _buildSwipeLabel() — 7个手势方法

新增代码(+30行

  • CardSwiperController _swiperController — 程序化控制器
  • _handleSwipe(previousIndex, currentIndex, direction) — 统一滑动回调
  • _handleUndo(previousIndex, currentIndex, direction) — 撤销回调
  • CardSwiper widget 替代原 GestureDetector + Transform 嵌套

保留功能100%不变)

  • 分类筛选 / 搜索 / 网格视图切换
  • 收藏 / 分享 / 详情跳转 / 全屏查看器
  • 图片预加载 / 本地缓存 / SharedPreferences持久化
  • MiniCardImageView 组件(液态玻璃效果)
  • MiniCardViewer 全屏查看器

Dependencies

  • 新增: flutter_card_swiper ^7.2.0

影响文件

  • pubspec.yaml — 添加 flutter_card_swiper 依赖
  • lib/src/pages/discover/mini_card/mini_card_page.dart — 核心重构1262行→1104行减少12.5%
  • lib/src/pages/discover/mini_card/mini_card_image_view.dart — 分类描述提升为独立显眼行fontSm + 85%透明度 + 2行显示

补充修复v0.95.0-hotfix

  • 🐛 卡片右侧空白 — CardSwiper padding 从 horizontal:16 改为 EdgeInsets.zero,内部 width 从 maxW-32 改为 constraints.maxWidth
  • 🎨 底部层叠效果 — 布局从 Column 重构为 Stack底部操作栏使用 Positioned(bottom:0) + BackdropFilter(sigma:20) + 渐变遮罩(0→0.95),卡片视觉延伸至按钮下方
  • 🏷️ 分类栏_buildCategoryChips 已正确遍历 _meta.categories.entries显示全部11个分类全部 🥬素菜 🥩荤菜 🦞水产 🌅早餐 🍚主食 🍲汤与粥 🧃饮品 🍰甜品 📦半成品加工 🪙酱料)
  • 📝 分类描述 — MiniCardImageView 已通过 _meta.descriptions[recipe.category] 获取对应分类描述,独立行显示

[0.94.0] - 2026-04-14

🎬 迷你卡片动画系统重构 — 滑出飞走+入场弹性+回弹弹簧+图片预加载+缓存

优化

  • 🎬 滑出飞走动画 — 拖拽超过阈值后,卡片带旋转+位移飞出屏幕easeIn加速不再瞬间跳变
  • 🎬 入场弹性动画 — 新卡片从 scale 0.88→1.0 + opacity 0→1 弹性进入easeOutBack回弹曲线
  • 🎬 回弹弹簧动画 — 拖拽未达阈值时卡片平滑弹回原位easeOut减速不再硬切
  • 🎬 下一张卡片联动 — 滑出过程中,下一张卡片从 scale 0.92→1.0 + opacity 0.6→1.0 逐渐浮现
  • 🖼️ 图片预加载 — 切换卡片时 precacheImage 预加载后续3张图片消除转圈等待
  • 🖼️ CachedNetworkImage 替换 — MiniCardImageView/MiniCardViewer/MiniCardPage 全部替换 Image.network → CachedNetworkImage
    • 磁盘缓存 maxWidthDiskCache/maxHeightDiskCache: 800/1200
    • 内存缓存 memCacheWidth/memCacheHeight: 800
    • fadeIn 300ms easeOut 渐入效果
  • 🎬 滑出动画期间禁止拖拽 — 防止动画中重复触发滑动手势

Bug修复

  • 🐛 动画控制器未绑定 — 原 _likeAnimController/_nopeAnimController 创建后从未驱动任何动画,卡片切换全靠 setState 硬切
  • 🐛 图片无缓存 — Image.network 每次切换都重新请求网络,导致转圈加载

影响文件

  • lib/src/pages/discover/mini_card/mini_card_page.dart — 动画系统重构+CachedNetworkImage+预加载
  • lib/src/pages/discover/mini_card/mini_card_image_view.dart — CachedNetworkImage替换
  • lib/src/pages/discover/mini_card/mini_card_viewer.dart — CachedNetworkImage替换

[0.93.0] - 2026-04-14

🎨 视觉拉满 + 滚动卡顿修复 + 布局Bug修复

优化

  • 🎨 液态玻璃效果拉满 — 迷你卡片3层BackdropFilter+光感折射+荤素标签玻璃效果
  • 🎨 底部栏恢复毛玻璃 — 瀑布流底部状态栏恢复BackdropFilter(sigmaX/Y:20)+渐变+边框
  • 🖼️ CachedNetworkImage — 迷你卡片图片改用CachedNetworkImage避免滚动时重复网络请求
  • 🏗️ ValueNotifier隔离 — 副栏显隐状态改用ValueNotifier不再触发全局setState重建瀑布流
  • 🏗️ merge保留缓存 — DiscoverData.merge()保留已有flattenedItems缓存并追加新项避免重新shuffle导致滚动跳动
  • 🏗️ RepaintBoundary — 迷你卡片添加RepaintBoundary隔离渲染不影响其他卡片绘制

Bug修复

  • 🐛 滚动卡顿 — 移除_applyPendingDiscoverIfAny中的clearCache()调用避免滚动中列表重新shuffle
  • 🐛 Column溢出 — 错误页和空数据页改用SingleChildScrollView包裹防止溢出
  • 🐛 SliverMasonryGrid null check — 空chunk不再创建SliverMasonryGrid防止null check错误
  • 🐛 tag_discover_card溢出 — 标签类型和数量文字添加Flexible包裹防止Row溢出
  • 🐛 image_viewer_page — _extractImageUrl改为imageUrlExtractor回调参数修复未定义方法错误
  • 🐛 discover_waterfall Colors — 添加material导入修复Colors未定义错误
  • 🐛 主页缓存恢复 — _loadDiscover已有数据时使用merge而非替换保持列表顺序稳定

影响文件

  • lib/src/pages/home/home_page.dart — ValueNotifier隔离+merge策略+布局修复
  • lib/src/widgets/discover/mini_card_discover_card.dart — 液态玻璃拉满+CachedNetworkImage+RepaintBoundary
  • lib/src/widgets/discover/discover_waterfall.dart — 底部栏毛玻璃+空chunk保护+material导入
  • lib/src/widgets/discover/tag_discover_card.dart — Row溢出修复
  • lib/src/models/discover_model.dart — merge保留flattenedItems缓存
  • lib/src/widgets/image_viewer/image_viewer_page.dart — imageUrlExtractor回调

[0.92.9] - 2026-04-14

🃏 迷你卡片优化 — 液态玻璃效果+详情跳转+Bug修复

优化

  • 🎨 液态玻璃效果重设计 — 底部信息区改为"装水玻璃杯"效果
    • 使用 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修复

  • 🐛 setState after dispose — _goNext()/_goPrev() 添加 mounted 检查,防止动画回调在页面销毁后调用 setState
  • 🐛 MediaQuery initState 报错 — 图片预加载从 initState 移至 didChangeDependencies
  • 🐛 分享功能改为图片分享 — 使用 RepaintBoundary 截取卡片组件为PNG图片通过 ShareXFiles 分享
  • 🐛 PaginatedData 缺少 totalPages — 补充必需参数

影响文件

  • lib/src/pages/discover/mini_card_page.dart — 液态玻璃重设计+详情跳转+Bug修复

[0.92.8] - 2026-04-14

🃏 迷你卡片页面 — Tinder风格滑动浏览菜品 + 首页瀑布流插入

新增功能

  • 🆕 迷你卡片页面 — 交友软件风格左右滑动浏览菜品
    • 数据源:/assets/recipes.json341道菜11个分类
    • 图片URLhttps://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后出现

影响文件

  • 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 — 加载迷你卡片数据,传递给瀑布流

[0.92.7] - 2026-04-14

🧬 营养成分交互增强 + 食材详情页修复

新增功能

  • 🆕 营养成分展开更多 — 菜品详情页详细营养成分标题右侧新增"更多"按钮
    • 点击弹出底部对话框CupertinoModalPopup从下到上弹出
    • 每个营养成分显示emoji图标+名称+数值+跳转提示
    • 点击营养成分跳转到含该成分的菜品列表页
    • 营养成分emoji映射表31种营养成分对应emoji
  • 🆕 营养成分菜品列表页 — 新增 NutritionRecipeListPage
    • 使用 api_filter.php?act=filter_recipes&nutrition_name= 接口查询
    • 支持分页加载,显示菜品卡片+图片
    • 路由: /nutrition-recipe-list

修复内容

  • 🐛 食材详情菜谱数量显示0 — 修复 recipeCount 始终为0的问题
    • 根因API ingredient_detail 不返回 statistics 字段,但返回 related_recipes 数组
    • 修复IngredientModel 新增 relatedRecipes 字段和 effectiveRecipeCount getter
    • statistics.recipeCount 为0时fallback 到 related_recipes.length
    • 同时支持 recipe_countview_count 顶层字段
  • 🔧 食材详情卡片位置调整 — 将"食材详情"卡片移到"储存方法"下面

影响文件

  • 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+调整卡片顺序

📌 已移除较早版本记录(0.92.6及之前),功能已归档至软件特性清单。