Files
kitchen/CHANGELOG.md
2026-04-17 07:00:26 +08:00

22 KiB
Raw Blame History

Changelog

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

[0.97.36] - 2026-04-17

🔧 修复 — Web端 Platform._operatingSystem 崩溃

问题描述

  • 🐛 Web端崩溃Unsupported operation: Platform._operatingSystem
  • 🐛 根因crash_guard_service.dart 直接使用 dart:ioPlatform
  • 🐛 影响范围:错误报告生成(L137) + 错误对话框显示(L426)

修复方案

  • 🔄 移除直接导入:删除 import 'dart:io',改用项目已有的 PlatformUtils
  • 🛡️ 使用兼容层Platform.operatingSystemPlatformUtils().operatingSystemName
  • Web端安全PlatformUtils 使用条件导入Web端返回 'Web'

修改文件

  • lib/src/services/crash_guard_service.dart — 移除dart:io导入使用PlatformUtils

[0.97.35] - 2026-04-17

🔧 修复 — Web版API超时错误 (v2)

问题描述

  • 🐛 超时错误Web端显示"加载失败 - Exception: 加载超时,请检查网络连接"
  • 🐛 根因1connectTimeout: 2秒 太短Web端经过CORS代理链路长
  • 🐛 根因2:请求策略错误(先走代理再直连),代理不稳定导致延迟更高

修复方案

  • ⏱️ 增加超时时间Web端 connectTimeout 从 2s → 10s
  • 🔄 反转请求策略优先直连 → 失败后用CORS代理备用
  • 📡 增强错误检测:新增 _shouldTryProxy() 方法,检测 connectionTimeout/connectionError/statusCode=0/5xx 等情况触发代理回退
  • 🛡️ 全方法覆盖GET/POST/PUT/DELETE 四种请求方法均支持新策略

请求流程变更

旧流程 (v1): 浏览器 → CORS代理(2s超时) → API服务器 ❌ 超时
新流程 (v2): 浏览器 → 直连API(10s超时) ✅ → 失败时 → CORS代理备用

修改文件

  • lib/src/services/api/api_service.dart — Web端10s超时、优先直连、_buildProxyUrl备用、_shouldTryProxy检测

[0.97.34] - 2026-04-17

🔧 修复 — Web版API连接错误

问题描述

  • 🐛 CORS代理失败Web端使用 corsproxy.io 代理服务不稳定,导致 API 请求失败
  • 错误信息:ApiException(unknown). The connection errored. The XMLHttpRequest onerror callback was called.

修复方案

  • 🔄 直接请求回退机制CORS代理失败时自动尝试直连原始URL
  • 📡 智能错误检测:新增 _isCorsProxyError() 方法识别 CORS 代理相关错误
  • 🛡️ 全方法覆盖GET/POST/PUT/DELETE 四种请求方法均支持回退逻辑
  • 📝 详细日志:添加调试日志便于追踪请求路径(代理/直连)

技术实现

// 核心流程:
// 1. 尝试通过 CORS 代理请求 (corsproxy.io/?url=...)
// 2. 失败时检测是否为代理错误 (_isCorsProxyError)
// 3. 自动切换为直接请求原始 URL
// 4. 直连失败则抛出原始错误

修改文件

  • lib/src/services/api/api_service.dart — 新增 _buildDirectUrl、_isCorsProxyError 方法;修改 get/post/put/delete 和 _executeWithOfflineCheck 支持回退

[0.97.33] - 2026-04-17

新增 — 隐私政策与用户协议页面 + 首次引导页

新增功能

  • 🔒 隐私政策页面:新增隐私政策与用户协议页面,支持分段切换和左右滑动浏览
  • 📋 公开组件PrivacyPolicyContentUserAgreementContent 为公开类,可供其他页面调用
  • 🔗 关于页面跳转:关于页面"软件协议"入口点击后跳转至新页面
  • 🎬 首次引导页:新增引导页,首次启动展示欢迎信息和协议,用户同意后方可使用
  • 协议拦截:启动时检查协议同意状态,未同意则跳转引导页,不同意则退出应用

修改文件

  • lib/src/pages/profile/privacy_policy_page.dart — 新增隐私政策与用户协议页面
  • lib/src/pages/profile/guide_page.dart — 新增首次引导页(欢迎+协议同意)
  • lib/src/pages/profile/about_page.dart — 软件协议入口跳转新页面
  • lib/src/config/app_routes.dart — 注册 /privacy-policy/guide 路由
  • lib/main.dart — 启动时检查协议同意状态

[0.97.32] - 2026-04-17

新增 — 点餐助手分享功能 + UI布局优化 + 权限页面

新增功能

  • 📝 生成文本分享:列表区域新增"生成文本"按钮,调用系统分享接口分享格式化订单文本
  • 🖼️ 生成图片分享:列表区域新增"生成图片"按钮弹出预览卡片完整渲染所有菜品确认后截图生成PNG图片并调用系统分享
  • 📤 分享区域:独立的"分享订单"卡片组件,与底部栏"关闭订单/生成账单"按钮分离
  • 🗑️ 关闭订单:底部栏左侧新增"关闭订单"按钮,确认后标记取消并从服务器删除
  • 👥 用餐人数桌号下方新增人数选择器支持1/2/3/4/5/6/8/10常量快速选择和自定义输入
  • 🪑 添加菜品按钮移至单号下方:布局调整,添加菜品按钮紧跟订单头部
  • 🔒 软件权限页面:新增权限管理页面,展示应用所需权限说明和沙盒运行说明

修改文件

  • lib/src/pages/tools/cooking/order_assistant_page.dart — 重构底部栏(仅保留关闭+账单),新增分享卡片、人数选择器、分享方法
  • lib/src/models/tools/order_model.dart — peopleCount字段此前已添加
  • lib/src/controllers/tools/order_assistant_controller.dart — setPeopleCount/clearAllData方法此前已添加
  • lib/src/pages/profile/permission_page.dart — 新增权限页面
  • lib/src/pages/profile/about_page.dart — 新增软件权限入口

[0.97.31] - 2026-04-17

🔧 修复 — 二维码扫码显示网页而非JSON

修复内容

  • 🐛 QR URL修正:二维码/条形码URL从 kitchen.php?act=get&id=xxx返回JSON改为 ?id=xxx加载index.html网页
  • 扫码后现在正确显示点单网页,包含菜品列表、金额、备注、桌号等信息
  • 网页端通过 ?id=xxx 参数自动调用API获取订单数据并渲染

修改文件

  • lib/src/models/tools/order_model.dart — qrUrl 改为 https://eat.wktyl.com/api/kitchen/?id=$id
  • lib/src/services/tools/order_api_service.dart — getQrUrls 同步修正

[0.97.30] - 2026-04-17

🔧 修复 — API路径修正 + 接口测试脚本完善

修复内容

  • 🐛 API路径修正/kitchen.php/kitchen/kitchen.php,所有端统一指向正确服务器路径
  • 🐛 测试脚本runInShell修复:移除 runInShell: true避免shell将URL中 & 解释为后台运行符导致参数丢失
  • 🐛 SSE测试修复:改用 Process.run + 临时文件方式读取SSE流替代 Process.start + stdout.fold
  • 🐛 UTF-8编码修复curl添加 --compressed 参数正确处理gzip压缩响应

接口验证结果(全部通过)

# 测试项 结果
1 接口首页 (index)
2 CORS预检 (OPTIONS)
3 创建点单 (POST create)
4 获取点单 (GET get)
5 更新点单 (POST update)
6 点单列表 (GET list)
7 统计信息 (GET stats)
8 SSE实时推送
9 清理过期 (GET cleanup)
10 删除点单 (GET delete)
11 确认删除 (404)

修改文件

  • lib/src/services/tools/order_api_service.dart — _basePath 修正为 /kitchen/kitchen.phpQR/barcode URL同步修正
  • lib/src/models/tools/order_model.dart — qrUrl 修正为 /kitchen/kitchen.php
  • web_order/index.html — API_BASE 和 SSE_URL 修正为 /kitchen/ 子路径
  • scripts/test_kitchen_api.dart — 修复 runInShell、SSE测试、UTF-8编码问题

[0.97.29] - 2026-04-17

新增 — 点餐助手PHP后端 + SSE实时推送 + 数据清理

功能描述

  • 🖥️ PHP后端APIkitchen.php 完整CRUD接口JSON文件存储文件锁保证并发安全
  • 📡 SSE实时推送kitchen_sse.php Server-Sent Events端点App更新后网页端实时刷新
  • 🗑️ 数据清理App端支持7天/30天过期清理、本地+服务器联合清理、清空全部历史
  • ☁️ 远程同步OrderApiService 对接真实API创建/更新/删除操作同步到服务器
  • 🌐 网页端SSEweb_order/index.html 接入SSE实时显示连接状态自动重连+轮询降级

API接口

操作 方法 URL
创建点单 POST kitchen.php?act=create
获取点单 GET kitchen.php?act=get&id=xxx
更新点单 POST kitchen.php?act=update
点单列表 GET kitchen.php?act=list&page=1&limit=20
删除点单 GET kitchen.php?act=delete&id=xxx
清理过期 GET kitchen.php?act=cleanup&days=30
统计信息 GET kitchen.php?act=stats
SSE推送 GET kitchen_sse.php?order_id=xxx

新增文件

  • docs/api/kitchen.php — 点餐助手PHP后端APICRUD + JSON存储 + 过期清理)
  • docs/api/kitchen_sse.php — SSE实时推送端点监听订单变化推送更新

修改文件

  • lib/src/services/tools/order_api_service.dart — Mock→真实API新增 deleteOrder/cleanupExpired/getStats
  • lib/src/controllers/tools/order_assistant_controller.dart — 新增 cleanupExpiredLocal/cleanupExpiredRemote/cleanupAllExpired
  • lib/src/pages/tools/cooking/order_assistant_page.dart — 新增🗑️数据清理按钮和清理弹窗
  • lib/src/models/tools/order_model.dart — qrUrl 更新为 kitchen.php?act=get&id=xxx
  • web_order/index.html — 接入SSE实时推送新增连接状态指示器轮询降级

[0.97.28] - 2026-04-17

新增 — 点餐助手工具

功能描述

  • 🍽️ 用户点餐:支持从浏览记录、搜索、手动填写、商家推荐四种方式添加菜品
  • 🏪 商家推单:一键切换商家推单模式,支持商家推荐菜品
  • 📋 账单生成:自动计算菜品数量和金额,生成唯一单号和时间戳
  • 📱 二维码/条形码生成点单二维码和条形码URL指向 eat.wktyl.com/api/kitchen
  • 💾 本地持久化SharedPreferences 存储历史记录和记录条数统计
  • 🌐 网页端web_order/index.html 支持扫码查看点单信息自动15秒刷新
  • 🎨 iOS风格UI:毛玻璃效果、圆角卡片、动态主题适配

新增文件

  • lib/src/models/tools/order_model.dart — 点单数据模型Order、OrderItem、OrderType、OrderStatus、OrderItemSource
  • lib/src/services/tools/order_api_service.dart — 点单API服务Mock实现后端就绪后切换
  • lib/src/controllers/tools/order_assistant_controller.dart — 点餐助手控制器,管理状态和持久化
  • lib/src/pages/tools/cooking/order_assistant_page.dart — 点餐助手主页面
  • lib/src/pages/tools/cooking/widgets/order_item_card.dart — 菜品卡片组件
  • lib/src/pages/tools/cooking/widgets/add_item_sheet.dart — 添加菜品弹窗入口
  • lib/src/pages/tools/cooking/widgets/browse_history_picker.dart — 浏览记录选择器
  • lib/src/pages/tools/cooking/widgets/manual_input_sheet.dart — 手动填写菜品弹窗
  • lib/src/pages/tools/cooking/widgets/qr_barcode_dialog.dart — 二维码/条形码弹窗
  • web_order/index.html — 网页端点单展示页

修改文件

  • lib/src/models/tool_item_model.dart — 新增 order_assistant 工具注册
  • lib/src/config/app_routes.dart — 新增 toolsOrderAssistant 路由

[0.97.27] - 2026-04-17

新增 — 瀑布流工具卡片插槽系统

功能描述

  • 🧩 统一插槽系统WaterfallSlotRegistry 统一管理瀑布流中插入的各类卡片miniCard、toolCard
  • 🔀 交替插入策略miniCard 和 toolCard 每20个卡片交替插入位20插miniCard位40插toolCard
  • 🃏 工具卡片:毛玻璃中等卡片样式,展示工具 icon、名称、描述、分类标签
  • 详情入口:卡片右上角 info 图标,点击进入独立工具详情页
  • 🚀 一键打开:卡片整体点击直接跳转对应工具页面
  • 📋 强制声明ToolItem 新增 waterfallSlot 必填字段,不声明编译报错
  • 🔮 未来扩展:新增工具只需在 defaultTools 中声明 waterfallSlot: WaterfallSlotConfig(show: true) 即可自动出现在首页瀑布流

新增文件

  • lib/src/models/waterfall_slot.dart — 瀑布流插槽模型WaterfallSlotType、WaterfallSlot、WaterfallSlotConfig、WaterfallSlotRegistry
  • lib/src/widgets/discover/tool_card_discover_card.dart — 瀑布流工具卡片组件(毛玻璃风格)
  • lib/src/pages/tools/tool_detail_page.dart — 工具详情页(独立页面,展示工具信息和打开按钮)

修改文件

  • lib/src/models/tool_item_model.dart — ToolItem 新增 waterfallSlot 必填字段ToolRegistry 新增 homeCardTools getter所有 defaultTools 均声明 waterfallSlot
  • lib/src/models/discover_model.dart — DiscoverItemType 新增 toolCard 枚举值DiscoverItem 新增 toolItemRef 字段和 toolCard 工厂构造;新增 ToolItemRef 类
  • lib/src/widgets/discover/discover_waterfall.dart — 接入 WaterfallSlotRegistry 统一插槽系统;新增 toolCards 参数_buildItem 新增 toolCard 分支
  • lib/src/pages/home/home_page.dart — 传递 toolCards: ToolRegistry.homeCardTools 参数
  • lib/src/config/app_routes.dart — 新增 toolDetail 路由常量和 GetPage 注册

[0.97.26] - 2026-04-16

新增 — 用料管理工具

功能描述

  • 🧴 瓶子管理:网格布局展示厨房用料瓶子,类似小瓶子视觉效果
  • 📊 分类筛选:支持比例、调味料、食材三种类型筛选
  • 增减容量点击瓶子可快速增加或减少容量每次10%
  • ✏️ 自定义瓶子:支持自定义瓶子名称、容量、类型
  • 💾 本地持久化:数据通过 SharedPreferences 本地存储
  • 🎬 入场动画:网格交错入场动画,流畅的视觉体验
  • 🎨 iOS风格UI:毛玻璃效果、圆角卡片、渐变色设计

新增文件

  • lib/src/models/bottle_model.dart — 用料瓶子数据模型,包含类型、容量、填充量等
  • lib/src/controllers/ingredient_manage_controller.dart — 用料管理控制器,管理瓶子增删改查
  • lib/src/pages/tools/ingredient_manage_page.dart — 用料管理主页面,网格布局展示瓶子

修改文件

  • lib/src/models/tool_item_model.dart — 注册「用料管理」工具项id: ingredient_manage, route: /tools/ingredient-manage
  • lib/src/config/app_routes.dart — 注册路由 /tools/ingredient-manage

[0.97.25] - 2026-04-16

新增 — 菜品排名Tier List工具

功能描述

  • 🏆 五级排行体系:夯(红) → 顶级(橙金) → 人上人(黄) → NPC(米白) → 拉完了(灰白)
  • 📖 浏览记录导入:从浏览历史中选择菜品加入排名
  • ❤️ 收藏导入:从收藏列表中选择菜品加入排名
  • ✏️ 手动输入:自定义菜品名称 + 选择 emoji 图标
  • 🔍 搜索过滤:选择面板内支持实时搜索
  • 🔄 跨层级移动:点击菜品可移动到其他层级
  • 🗑️ 删除/清空:支持单条删除和一键清空
  • 💾 本地持久化:数据通过 SharedPreferences 本地存储
  • 🎬 交错入场动画:每行依次 slide + fade 进入

新增文件

  • lib/src/models/dish_rank_model.dart — 菜品排名数据模型 + 层级定义常量
  • lib/src/pages/tools/ranking/dish_ranking_controller.dart — 排名控制器(数据管理、持久化)
  • lib/src/pages/tools/ranking/dish_ranking_page.dart — Tier List 主页面
  • lib/src/pages/tools/ranking/dish_pick_sheet.dart — 底部选择面板组件

修改文件

  • lib/src/models/tool_item_model.dart — 注册「菜品排名」工具项id: dish_ranking, route: /tools/dish-ranking
  • lib/src/config/app_routes.dart — 注册路由 /tools/dish-ranking

[0.97.24] - 2026-04-16

♻️ 重构 — 发现页列表下拉手势完全劫持

问题

  • 子列表(热门排行 ListView、标签列表、分类网格拥有独立滚动控制器
  • 在子列表顶部下拉时,手势被子列表消费,外层无法劫持为打开工具中心

变更

  • 🔽 禁用子列表独立滚动:热门排行改为 Column + map,标签列表改为 Column + map,分类网格改为 GridView + shrinkWrap + NeverScrollableScrollPhysics
  • 🎯 统一滚动管理:所有内容由外层 CustomScrollView 统一滚动,下拉手势不再被子列表拦截
  • 🧹 移除 GestureDetector 冲突:移除外层 GestureDetector(会和列表滚动竞争),改用纯 NotificationListener<ScrollNotification> + ClampingScrollPhysics 捕获 OverscrollNotification
  • 🔧 修复 PageRoute 构造异常:自定义 _SlideFromTopPageRoute 改为 PageRouteBuilder,修复 NoSuchMethodError: No constructor '' declared in class 'null'

修改文件

  • lib/src/pages/discover/discover_page.dart — 移除 GestureDetector修复 PageRoute使用 ClampingScrollPhysics
  • lib/src/pages/discover/components/discover_sections_widget.dart — 所有子列表改为无独立滚动布局

[0.97.23] - 2026-04-16

♻️ 重构 — 发现页下拉手势拦截 & 工具中心页面化

变更

  • 🔽 全局下拉拦截:发现页拦截所有下拉手势,任意位置下拉均可唤出工具中心
  • 📄 页面化导航:工具中心从 Overlay 弹窗改为 PageRoute 页面导航,天然支持系统返回键
  • 🎬 从顶部滑入:自定义 _SlideFromTopPageRoute,工具中心从顶部滑入(类 iOS 通知中心/搜索面板)
  • ⏸️ 动画可打断:页面转场动画支持手势打断(系统默认支持)
  • 👆 下拉关闭:工具中心页面内下拉手势可关闭返回,带拖拽指示条
  • 📳 震动反馈:下拉达到阈值触发中等+强烈震动
  • 📱 系统返回键:工具中心页面支持 Android 系统返回键、iOS 滑动返回
  • 🎨 保留原有 UI:工具中心面板 UI 不变(常用工具、分类工具、浏览记录、底部操作栏)

移除

  • OverlayEntry 方案(不支持系统返回键)
  • AnimationController 面板动画(改用系统 PageRoute 动画)

修改文件

  • lib/src/pages/discover/discover_page.dart — 移除 Overlay 方案,改为 GestureDetector + PageRoute 导航
  • lib/src/pages/discover/components/tools_panel_widget.dart — 重构为独立页面模式,支持下拉关闭手势和系统返回键

[0.97.22] - 2026-04-16

🐛 修复 — 发现页工具中心交互优化

变更

  • 🔽 从底部滑入:工具中心改为从底部滑入(类微信小程序交互),取代原顶部滑入
  • 📐 覆盖底部tab栏:使用 Overlay 确保工具面板层级最高,覆盖底部导航栏
  • 🔘 固定按钮可见:底部功能按钮(首页/收藏/设置/关于)随面板一起显示
  • 📳 震动反馈:下拉触发工具中心时添加触觉反馈(中等+强烈震动)
  • 🔍 响应式搜索:搜索框从只读改为可输入,实时搜索匹配工具并显示结果
  • 触发灵敏度下拉阈值从80px降至50px阻尼系数从0.5提升至0.8
  • 👆 下滑关闭:面板内下滑手势关闭面板,提示文案更新为"下滑关闭"

修改文件

  • lib/src/pages/discover/discover_page.dart — 搜索框响应式搜索、Overlay显示面板、震动反馈、灵敏度调整
  • lib/src/pages/discover/components/tools_panel_widget.dart — 从底部滑入动画、下滑关闭手势、遮罩层分离

[0.97.21] - 2026-04-16

♻️ 重构 — 发现页代码拆分与工具中心完善

变更

  • 📁 代码拆分:将 discover_page.dart (原1834行) 拆分为多个文件每个文件不超过800行
  • 📦 新建文件夹lib/src/pages/discover/components/ 存放拆分后的组件
  • 🔧 工具面板组件tools_panel_widget.dart (792行) — 包含下拉工具中心面板所有UI
  • 📊 分区内容组件discover_sections_widget.dart (685行) — 包含热门/今天吃什么/推荐三个分区
  • 📄 主文件精简discover_page.dart (499行) — 保留页面骨架和状态管理
  • 💾 备份文件discover_page.dart.bak 保留原始代码

工具中心完善

  • 上滑关闭:支持手势上滑关闭工具中心面板
  • 🔍 搜索框:基础信息区新增工具搜索功能
  • 📝 工具详情:长按工具显示详情弹窗,包含使用次数、联网状态等信息
  • 📂 分类展示:所有工具按分类分组显示(烹饪助手/健康营养/数据查询/规划管理)
  • 🕐 浏览记录:显示最近浏览的菜谱,横向滚动卡片列表
  • 🔘 底部按钮:固定功能按钮栏(首页/收藏/设置/关于)
  • 📏 层级修复工具中心面板覆盖在底部tab栏之上

修改文件

  • lib/src/pages/discover/discover_page.dart — 主文件精简,引用新组件
  • lib/src/pages/discover/components/tools_panel_widget.dart — 工具面板组件
  • lib/src/pages/discover/components/discover_sections_widget.dart — 分区内容组件
  • lib/src/pages/discover/components/tool_detail_sheet.dart — 工具详情弹窗
  • lib/src/pages/discover/components/browse_history_section.dart — 浏览记录组件
  • lib/src/pages/discover/discover_page.dart.bak — 备份

[0.97.20] - 2026-04-16

♻️ 重构 — 发现页新增动态工具栏

变更

  • 🔄 发现页面:新增动态工具栏,显示常用工具快捷入口(按使用次数排序)
  • 📊 智能排序:工具按 usageCount 降序排列,常用工具优先显示
  • 🔧 工具功能:点击工具记录使用次数并跳转;"更多"按钮打开完整工具中心面板
  • 💎 视觉风格:毛玻璃卡片效果,与 iOS 26 Liquid Glass 风格一致
  • 📍 位置调整:工具栏位于搜索框与分段控制之间

修改文件

  • lib/src/pages/discover/discover_page.dart — 新增 _buildToolsBar、_buildToolShortcut、_buildMoreToolsCard、_navigateToTool 方法

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