Files
kitchen/CHANGELOG.md
2026-04-21 10:14:37 +08:00

19 KiB
Raw Blame History

Changelog

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

[0.99.24] - 2026-04-21

新功能 — 意见反馈系统重构5轮对话+双发邮件+本地存储

功能概述

将原有的简单聊天式意见反馈页面重构为完整的状态机驱动反馈系统支持5轮结构化对话、邮件双发管理员+用户自动回复)、设备信息收集、本地持久化存储和防滥用限制。

核心特性

  • 🎯 状态机架构采用有限状态机管理反馈流程idle → selecting → chatting_1~4 → completed → sending → success/failed
  • 💬 5轮完整对话:选择反馈类型(1轮) + 用户输入4条详细描述 = 共5轮交互
  • 📧 双发邮件机制
    • 第一封:发送到管理员(ad@avefs.com),包含完整对话记录+设备信息(UUID/IP/版本号)+系统日志
    • 第二封如果用户填写了邮箱自动发送iOS风格确认邮件含反馈编号、处理流程、联系方式
  • 📱 设备信息自动收集UUID、IP地址、应用版本、平台信息、操作系统版本、运行日志
  • 💾 本地持久化存储使用shared_preferences保存所有反馈会话历史最多50条
  • 🚫 防滥用机制
    • 每日限制3次提交
    • 冷却时间30分钟
    • 跨天自动重置计数器
  • 🎨 iOS 26风格UI
    • 对话进度指示器第X/4轮剩余X轮
    • 完成后显示提交面板(摘要卡片+邮箱输入+发送按钮)
    • 发送中状态指示器
    • 成功/失败对话框(支持返回修改或重试或提交新反馈)

新增文件

  • lib/src/models/feedback_model.dart — 数据模型定义
    • FeedbackState 枚举9种状态
    • FeedbackSessionStatus 枚举draft/sent/failed
    • DeviceInfo 模型uuid/ip/version/platform/logs
    • FeedbackMessage 模型text/isUser/type/timestamp
    • FeedbackSession 模型(完整会话,支持不可变操作)
  • lib/src/services/local/feedback_storage_service.dart — 本地存储服务
    • CRUD操作save/getAll/get/delete/clearAll
    • 限制检查canSubmitFeedback/recordSubmission/resetDailyCount
    • 自动跨天重置逻辑
    • 最大50条历史记录限制

修改文件

  • lib/src/pages/profile/social/chat_page.dart — 完全重构为状态机驱动的反馈页面
    • 状态转换逻辑_advanceToNextRound/_completeConversation
    • 设备信息收集_createSession
    • 邮件发送流程_submitFeedback + 成功/失败对话框)
    • 动态底部UI切换类型选择→输入栏→提交面板→发送中指示器
    • 进度显示(当前轮次/剩余轮次)
    • 错误处理与重试机制
  • lib/src/services/data/business/email_service.dart — 扩展邮件服务
    • 新增 sendFeedbackEmails() 方法(双发入口)
    • 新增 _sendFeedbackToAdmin() 发送给管理员iOS风格HTML模板
    • 新增 _sendAutoReplyToUser() 自动回复给用户绿色成功主题HTML
    • 新增 _buildFeedbackAdminHtml() (管理员邮件模板:用户信息卡片+对话记录+系统日志)
    • 新增 _buildFeedbackAutoReplyHtml() (用户回复模板:感谢语+摘要+后续步骤+联系方式)
    • 新增 _getBaseEmailStyles() / _buildInfoRow() / _escapeHtml() 辅助方法
    • 新增 FeedbackSendResult 结果类success/adminSent/userSent/errorMessage

技术亮点

  • 不可变数据设计FeedbackSession使用不可变操作addMessage/markAsCompleted等每次返回新实例便于状态追踪和调试
  • 优雅降级设备信息获取失败不影响主流程try-catch包裹每个采集点
  • 用户体验优化
    • Bot引导语提示剩余轮次数
    • 邮箱选填并明确提示用途
    • 发送失败可返回修改或直接重试
    • 成功后可选择返回或立即开始新反馈
  • 邮件模板
    • 采用Apple SF Pro字体栈
    • 响应式设计(移动端适配@media查询
    • 渐变色头部(紫色主题/绿色成功主题)
    • 信息网格布局2列自适应
    • 对话消息区分样式(用户/Bot不同背景色
    • 系统日志深色代码块样式

使用示例

// 导航到反馈页面
Navigator.push(context, CupertinoPageRoute(builder: (_) => FeedbackPage()));

// 用户流程:
// 1. 选择类型Bug/功能建议/体验优化/其他)
// 2. 输入4条详细描述带轮次提示
// 3. 查看摘要,可选填邮箱
// 4. 点击"📤 发送反馈"
// 5. 收到成功提示(如填了邮箱还会收到确认邮件)

后续扩展方向

  • 🔮 反馈历史列表页面(查看已提交的反馈)
  • 🔮 管理后台集成API对接替代SMTP直发
  • 🔮 图片/截图附件支持
  • 🔮 反馈分类统计图表
  • 🔮 用户回复追踪(多轮客服对话)

[0.99.23] - 2026-04-21

🎨 UI优化 — 发送菜谱对话框线路选择样式重构

修改内容

  • 🎨 线路1官方线路1URL脱敏显示
    • SMTP服务器地址中间部分用代替(如 freeing.com
    • 保护服务器信息安全避免完整URL暴露
  • 线路2升级为VIP专属邮箱
    • 名称改为「 VIP 专属邮箱」添加VIP标签和👑皇冠图标
    • 采用紫色主题(#9B59B6深浅模式均有专属背景色
    • 锁定无法选择,右侧显示🔒锁定图标
    • 隐藏详细配置信息(不显示用户名和服务器地址)
    • 副标题提示「高级会员专属线路,更稳定快速」
  • 🔧 新增URL脱敏方法_maskUrl() 对长URL进行中间部分遮蔽处理
  • 📐 布局优化:收件人邮箱输入框移至发送线路选择上方,符合用户操作流程(先填写收件人,再选择线路)

修改文件

  • lib/src/widgets/recipe_detail/interaction/recipe_email_button.dart — 线路选择UI重构+VIP样式+URL脱敏

[0.99.22] - 2026-04-21

新功能 — 美食年轮:可视化美食旅程档案

修复

  • 🐛 修复美食年轮页面数据不实时更新的问题:用 Obx 包裹内容区域,通过迭代 RxList 和访问 RxMap.values 注册响应式依赖(.length/.count 不会触发 GetX 响应式通知)
  • 🐛 修复浏览记录/笔记/分享记录数据丢失的竞态条件:控制器使用 lazyPut 延迟初始化onInit 中异步加载历史数据未完成时 addHistory/addNote/addRecord 已执行,导致空列表保存覆盖旧数据。添加 Completer 确保初始化完成后才执行写操作
  • 🐛 修复 RecipeDetailController._recordBrowseHistory 未 await addHistory 的问题
  • 🐛 修复月度足迹收藏数显示0的问题FeedItemModel.fromJson 反序列化时缺少 'createdAt' key 匹配(保存用 'createdAt',读取只查 'created_at'/'post_time'),导致从 Hive 加载后 createdAt 为 null

修改内容

  • 美食年轮页面
    • 新增「美食年轮」页面,聚合浏览/收藏/笔记/评分数据,生成可视化美食旅程档案
    • 🎯 Hero总览区:圆形年轮动画展示使用天数,外圈随浏览量动态增长
    • 📊 数据总览4格统计卡片浏览菜谱数/收藏数/笔记数/评分数)
    • 🧬 味觉DNA6维雷达图辣/甜/咸/酸/鲜/香),基于口味偏好设置和浏览数据推断,显示味觉人格类型
    • 🏆 美食里程碑9项成就时间线初识美食/探索者/资深食客/百科/心动时刻/收藏家/记录者/品鉴师/全能美食家)
    • 📅 月度足迹最近3个月活动摘要含浏览/收藏/笔记/评分数量和热门分类
    • 🍜 菜系探索度:环形图展示已探索菜系种类和占比
    • 入口位于设置页「🚀 功能」区域,图标 CupertinoIcons.circle_grid_3x3

修改文件

  • lib/src/pages/profile/data/food_timeline_page.dart — 新建,美食年轮页面
  • lib/src/config/app_routes.dart — 新增 foodTimeline 路由定义和页面注册
  • lib/src/pages/profile/profile_settings.dart — 功能区域新增美食年轮入口

[0.99.21] - 2026-04-21

🖥️ Windows 桌面端修复 — 图标清晰度/窗口宽度/中文乱码

修改内容

  • 🎨 图标清晰度修复
    • icon_1024x1024.png 重新生成 ICO包含 17 种尺寸16~256px
    • 窗口类注册改用 WNDCLASSEX + RegisterClassEx,分别设置 hIconhIconSm
    • LoadImage 显式加载 256×256 大图标 + 48×48 小图标,替代 LoadIcon(仅 32×32
    • 窗口创建后通过 WM_SETICON 设置 ICON_BIGICON_SMALL
    • DPI 变化时(WM_DPICHANGED)重新加载图标
    • 安装脚本添加 ie4uinit.exe -show 自动刷新图标缓存
  • 📐 窗口加宽
    • 默认宽度从 420px 调整为 520px
    • 最小宽度从 360px 调整为 480px
  • 🔤 中文乱码修复
    • CMakeLists.txt 添加 /utf-8 编译选项,解决 MSVC 默认 GBK 编码导致中文标题乱码
  • 📦 打包配置修复
    • Inno Setup 压缩格式改为 lzma2/max(兼容 6.7.1
    • 权限改为 PrivilegesRequired=lowest(兼容 6.7.1
    • 下载并安装 ChineseSimplified.isl 中文语言包

修改文件

  • windows/runner/win32_window.cpp — 图标加载改用 LoadImage 256px + WM_SETICON + DPI 重载
  • windows/runner/main.cpp — 窗口宽度 420→520
  • windows/CMakeLists.txt — 添加 /utf-8 编译选项
  • windows/runner/resources/app_icon.ico — 重新生成 17 尺寸 ICO
  • installer.iss — 修复兼容性问题 + 添加图标缓存刷新代码

[0.99.20] - 2026-04-21

🖥️ Windows 桌面端适配 — 窗口尺寸/图标/名称/交互/打包

修改内容

  • 🖥️ 窗口尺寸改为竖屏
    • 默认窗口从 1280×720横屏改为 420×800手机比例竖屏
    • 窗口启动自动居中显示
    • 添加最小窗口尺寸限制360×600防止窗口过小导致布局异常
  • 🎨 应用图标和名称
    • assets/icons/icon_1024x1024.png 转换为 ICO 替换 Windows 默认图标
    • 窗口标题从 mom_kitchen 改为 小妈厨房
    • EXE 元数据更新ProductName=小妈厨房CompanyName=微风暴工作室
  • 🖱️ 鼠标拖动滚动
    • 添加 DesktopScrollBehavior,支持鼠标拖拽滚动列表
    • 同时支持触控板和触控笔拖拽
  • ⌨️ 桌面端返回导航
    • 支持 Alt+← 键返回上一页
    • 支持 Backspace 键返回上一页
    • 支持 BrowserBack 键返回(鼠标侧键 XButton1
    • 支持 BrowserForward 键前进(鼠标侧键 XButton2
    • C++ 层处理 WM_XBUTTONUP 消息,将鼠标侧键转换为浏览器导航键
  • 📦 打包配置
    • 创建 Inno Setup 安装脚本 installer.iss,生成单个安装程序 EXE
    • 配置 distribute_options.yaml 支持 flutter_distributor 打包
    • 安装程序支持中文界面、桌面快捷方式、安装后自动启动

修改文件

  • windows/runner/main.cpp — 窗口尺寸改为 420×800标题改为「小妈厨房」
  • windows/runner/win32_window.cpp — 窗口居中 + 最小尺寸限制WM_GETMINMAXINFO
  • windows/runner/flutter_window.cpp — 鼠标侧键支持WM_XBUTTONUP
  • windows/runner/Runner.rc — EXE 元数据更新
  • windows/runner/resources/app_icon.ico — 替换为应用图标
  • lib/main.dart — 添加 DesktopScrollBehavior + KeyboardListener快捷键返回
  • installer.iss — 新建Inno Setup 安装脚本
  • distribute_options.yaml — 新建flutter_distributor 配置

[0.99.19] - 2026-04-21

新功能 — 个人中心:用户卡片改为开发计划卡片

修改内容

  • 开发计划卡片
    • 用户信息卡片替换为「开发计划」卡片,点击弹出 Cupertino Sheet
    • Sheet 展示 12 项开发路线图,含状态标签(即将上线/开发中/规划中)
    • 路线图内容:多端适配、用户中心、工具中心、导出功能、菜品投稿、社区互动、智能推荐、食材管理、营养分析、多语言支持、云同步、消息通知
    • 移除旧的登录/编辑/个性化按钮(登录功能暂不开发)
    • 移除 ProfileController 和 PersonalizationPage 依赖

修改文件

  • lib/src/pages/profile/profile_home.dart — 用户卡片改为开发计划卡片 + Sheet 弹窗

[0.99.18] - 2026-04-20

新功能 — 今天吃什么:动态筛选(选项越多,匹配越少)

修改内容

  • 动态筛选核心功能
    • 分类从 api_filter.php 加载(大类+子类),标签和匹配数从 filter_steps 动态更新
    • 选择分类/标签后实时刷新匹配数和可用标签,选项越多匹配越少
    • 标签显示对应菜谱数量0匹配标签自动禁用+删除线
    • 过敏原排除功能(客户端过滤)
    • 300ms 防抖避免频繁请求
  • 🔧 API 扩展
    • api_what_to_eat.phpfilter_steps 新增 available_tags 返回标签+数量
    • 分类选择自动展开子分类支持3级递归
    • filter_apply 同步支持分类展开逻辑
  • 📁 文件拆分
    • what_to_eat_page.dart1053行拆分为3个文件
      • what_to_eat_page.dart — 主页面骨架(~168行
      • widgets/what_to_eat_result_card.dart — 结果卡片+操作按钮(~280行
      • widgets/what_to_eat_filters.dart — 分类/标签/过敏原筛选+公共组件(~470行
  • 🧪 接口验证脚本scripts/test_filter_steps.dart 验证动态筛选效果

修改文件

  • lib/src/pages/discover/what_to_eat_page.dart — 重写为精简主页面
  • lib/src/pages/discover/widgets/what_to_eat_result_card.dart — 新建,结果卡片组件
  • lib/src/pages/discover/widgets/what_to_eat_filters.dart — 新建,筛选组件集合
  • lib/src/controllers/tools/what_to_eat_controller.dart — 重写,动态筛选+防抖
  • lib/src/repositories/what_to_eat_repository.dart — 新增 fetchFilterSteps 方法
  • docs/api/api_what_to_eat.php — filter_steps 新增 available_tags
  • scripts/test_filter_steps.dart — 新建,接口验证脚本

[0.99.17] - 2026-04-20

🐛 Bug 修复 — 收藏页搜索框高度不足比例不协调

修改内容

  • 🐛 修复收藏页搜索框高度不足
    • GlassContainer 增加 vertical: DesignTokens.space2 垂直内边距
    • CupertinoTextFieldpaddingEdgeInsets.zero 改为 EdgeInsets.symmetric(vertical: DesignTokens.space2)
    • 搜索框整体高度增加,与页面其他元素比例更协调

修改文件

  • lib/src/pages/profile/social/favorites_page.dart — 搜索框高度修复

新功能 — 数据管理中心:菜谱分类+食材分类,均显示大类+小类层级结构

修改内容

  • 新增食材分类卡片
    • 使用 fetchIngredientMainCategories() + fetchIngredientSubCategories() 接口
    • 标签卡显示「X大类 · Y小类」teal 主题色
    • 详情弹窗展示层级结构:大类可展开/折叠显示小类
    • 大类显示食材数量和小类数量,小类显示食材数量
  • 🔧 菜谱分类数据修正
    • 数据源从 fetchCategories() 改为 fetchMainCategories() + fetchRecipeSubCategories()
    • 标签卡显示从「X类」改为「X大类 · Y小类」
    • 详情弹窗从平铺列表改为层级结构:大类可展开/折叠显示小类
  • LocalDataService 新增 getRecipeCategories()/syncRecipeCategories()getIngredientCategories()/syncIngredientCategories() 及缓存管理
  • syncAll() 同步流程新增菜谱分类和食材分类同步步骤

修改文件

  • lib/src/pages/profile/data/data_center_page.dart — 新增食材分类卡片和弹窗,菜谱分类层级展示
  • lib/src/services/data/storage/local_data_service.dart — 新增菜谱分类和食材分类方法及缓存

[0.99.16] - 2026-04-20

🐛 Bug 修复 — 运营数据大屏 + 依赖替换 + Release模式布局溢出过滤

修改内容

  • 📝 Release 模式过滤布局溢出错误

    • main.dartFlutterError.onError 在 release 模式下跳过布局溢出类错误overflowed/renderflex/hasSize等
    • crash_guard_service.dartCupertinoDialogReportMode 在 release 模式下自动拒绝布局溢出报告,不弹对话框
    • debug 模式不受影响,仍会正常展示所有错误
  • 📝 运营数据大屏修复

    • 修复 StatsRepository 使用 ApiResponse.fromJson(null) 导致 data 永远为 null 的 bug
    • 新增「🗄️ 数据库概览」「🔌 接口调用分布」「🏆 热门排行 TOP5」板块
  • 📝 依赖替换 receive_sharing_intentfile_picker_ohos

    • 删除 pubspec.yamlreceive_sharing_intent 依赖
    • data_export_page.dart 改用 FilePicker.platform.pickFiles() 选择 JSON 文件导入

修改文件

  • lib/main.dart — release 模式过滤布局溢出错误
  • lib/src/services/system/crash_guard_service.dart — release 模式跳过布局溢出报告
  • lib/src/repositories/online_repository.dart — 修复数据解析bug新增fetchBasicStats()
  • lib/src/pages/profile/data/stats_dashboard_page.dart — 重写页面,热门排行替代月度趋势
  • lib/src/pages/profile/tools/data_export_page.dart — 移除receive_sharing_intent改用file_picker_ohos
  • pubspec.yaml — 删除receive_sharing_intent依赖

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

  • 0.99.15: 公告页面(列表+下拉刷新+四种状态)
  • 0.99.14: 外卖备注工具(口味/配送/整活分类+一键生成)
  • 0.99.13: 菜谱外部搜索按钮+搜索后缀选择
  • 0.99.12: 邮件发送SSL握手失败+VPN代理检测+连接容错
  • 0.99.11: 邮件发送全链路修复(fallback配置/allowInsecure/限额计数/超时)
  • 0.99.10: 邮件发送HandshakeException深度修复
  • 0.99.9: 邮件发送HandshakeException+备选端口
  • 0.99.8: 移除flutter_dotenv依赖
  • 0.99.7: 邮件分享系统升级(HTML模板+限额+记录管理)
  • 0.99.6: 帮我做决定转盘指针指向分界线修复
  • 0.99.5: 发现页面Dismissible组件错误修复
  • 0.99.4: 分享记录管理页面(模型+控制器+页面+路由)
  • 0.99.3: 评分记录管理页面 + RatingRecordModel + RatingRecordsController + HiveService扩展
  • 0.99.2: 帮我做决定转盘工具 + 工具中心内容扩展
  • 0.99.1: 版本号同步 + Android应用名修正 + R8 Play Core警告修复
  • 0.99.0: Android Release包缓存失效/图片加载不出/浏览记录丢失修复
  • 0.98.10: 删除接口RESTful规范化
  • 0.98.9: 菜谱分享本地存储 + 3天自动过期清理
  • 0.98.8: 二维码分享URL生成 + PHP分享页面
  • 0.98.7: 口味偏好持久化 + 菜品详情页偏好标注
  • 0.98.6: 软件信息页面图标/参考文献扩充/偏好设置重写/路由修复
  • 0.98.5: 软件信息页面 + 了解我们页面
  • 0.98.4: 小妈菜园交互优化 + 商店布局修复