22 KiB
22 KiB
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:io的Platform类 - 🐛 影响范围:错误报告生成(L137) + 错误对话框显示(L426)
修复方案
- 🔄 移除直接导入:删除
import 'dart:io',改用项目已有的PlatformUtils - 🛡️ 使用兼容层:
Platform.operatingSystem→PlatformUtils().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: 加载超时,请检查网络连接"
- 🐛 根因1:
connectTimeout: 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
✨ 新增 — 隐私政策与用户协议页面 + 首次引导页
新增功能
- 🔒 隐私政策页面:新增隐私政策与用户协议页面,支持分段切换和左右滑动浏览
- 📋 公开组件:
PrivacyPolicyContent和UserAgreementContent为公开类,可供其他页面调用 - 🔗 关于页面跳转:关于页面"软件协议"入口点击后跳转至新页面
- 🎬 首次引导页:新增引导页,首次启动展示欢迎信息和协议,用户同意后方可使用
- ✅ 协议拦截:启动时检查协议同意状态,未同意则跳转引导页,不同意则退出应用
修改文件
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=$idlib/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.php,QR/barcode URL同步修正lib/src/models/tools/order_model.dart— qrUrl 修正为 /kitchen/kitchen.phpweb_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后端API:kitchen.php 完整CRUD接口,JSON文件存储,文件锁保证并发安全
- 📡 SSE实时推送:kitchen_sse.php Server-Sent Events端点,App更新后网页端实时刷新
- 🗑️ 数据清理:App端支持7天/30天过期清理、本地+服务器联合清理、清空全部历史
- ☁️ 远程同步:OrderApiService 对接真实API,创建/更新/删除操作同步到服务器
- 🌐 网页端SSE:web_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后端API(CRUD + JSON存储 + 过期清理)docs/api/kitchen_sse.php— SSE实时推送端点(监听订单变化,推送更新)
修改文件
lib/src/services/tools/order_api_service.dart— Mock→真实API,新增 deleteOrder/cleanupExpired/getStatslib/src/controllers/tools/order_assistant_controller.dart— 新增 cleanupExpiredLocal/cleanupExpiredRemote/cleanupAllExpiredlib/src/pages/tools/cooking/order_assistant_page.dart— 新增🗑️数据清理按钮和清理弹窗lib/src/models/tools/order_model.dart— qrUrl 更新为 kitchen.php?act=get&id=xxxweb_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 均声明 waterfallSlotlib/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,使用 ClampingScrollPhysicslib/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及之前),功能已归档至软件特性清单。