23 KiB
23 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.98.2] - 2026-04-18
🐛 修复 — 小妈菜园性能优化 + GetX报错修复
变更
- ⏱️ 生长计时器间隔优化:从10秒调整为30秒,减少不必要的性能开销,配置项移入
FarmConfig - 🔄 应用生命周期管理:添加
WidgetsBindingObserver,应用进入后台时暂停定时器,恢复前台时立即更新生长状态并重启定时器 - 🐛 修复GetX improper use报错:重构
_buildGardenGrid中Obx与LayoutBuilder的嵌套顺序,确保可观察变量在Obx直接作用域内被访问 - 🌾 空数据状态处理:菜园数据为空时显示加载提示,避免 Obx 无响应式变量注册
修改文件
lib/src/controllers/farm/farm_game_controller.dart— 计时器间隔配置化、添加生命周期管理lib/src/pages/tools/farm/farm_game_page.dart— 修复 Obx 嵌套顺序、添加空数据状态lib/src/config/farm_config.dart— 新增growthCheckIntervalSeconds配置项
[0.98.1] - 2026-04-18
🐛 修复 — 收藏页面排序功能恢复 + 编辑模式侧栏悬浮
变更
- 🔀 恢复排序功能:将排序按钮集成到类型标签栏右侧,显示当前排序方式标签(最新/最早/A-Z/Z-A)
- 🎯 排序弹窗优化:当前选中排序方式显示 ✓ 标识,每个选项增加 Emoji 图标
- 📌 编辑模式改为侧栏悬浮:底部操作栏改为右侧悬浮按钮组(取消/删除/全选),不再被底部 tab 栏遮挡
- 🧹 清理冗余代码:移除未使用的
_buildToolbar和_buildToolbarButton方法
修改文件
lib/src/pages/profile/social/favorites_page.dart— 恢复排序入口、编辑模式改为悬浮侧栏
[0.98.0] - 2026-04-18
🌾 新增 — 小妈菜园游戏系统
核心游戏功能
- 🌱 种植系统:12 块土地,支持播种、浇水、收获、清理枯萎作物
- ⏰ 实时生长计时:4 阶段生长过程(种子→幼苗→生长中→成熟),10秒自动刷新
- 💧 浇水机制:浇水提升生长速度,2小时未浇水作物枯萎
- 🎉 收获奖励:获得金币和经验值,果实自动存入背包
- 🔓 土地扩建:消耗 200 金币解锁新土地
玩家系统
- ⭐ 等级经验系统:升级奖励金币+钻石,自动解锁新作物
- 🎒 背包系统:种子/果实分类管理,购买/收获自动更新
- 🏪 种子商店:12种作物,不同生长时间和价格,按等级解锁
- 🏆 成就系统:6个初始成就(初次收获、丰收达人、等级达成等)
作物配置
- 🥕 12种作物:萝卜、土豆、卷心菜、西红柿、玉米、辣椒、茄子、草莓、南瓜、西瓜、葡萄
- 📊 生长阶段:每个作物 4 个生长阶段,不同 Emoji 显示
- 💰 经济系统:金币购买种子,收获获得更高回报
- 🔒 等级解锁:从 Lv.1 到 Lv.10 逐步解锁所有作物
技术实现
- 💾 Hive 本地存储:3个 Box(玩家/土地/背包),手动编写适配器
- 🎨 iOS 26 Liquid Glass 风格:Cupertino 组件 + DesignTokens 统一主题
- 🌗 深色/浅色模式:完美适配双主题
- 🐛 调试功能:加金币、加速作物、解锁全部、重置数据
- 📱 响应式布局:3-4列自适应网格,支持平板和桌面
修改文件
lib/src/models/farm/farm_player.dart+.g.dart— 玩家数据模型lib/src/models/farm/farm_land.dart+.g.dart— 土地数据模型lib/src/models/farm/inventory_item.dart+.g.dart— 背包物品模型lib/src/models/farm/crop_config.dart— 作物配置lib/src/models/farm/achievement_config.dart— 成就配置lib/src/models/farm/crop_registry.dart— 12种作物注册表lib/src/models/farm/achievement_registry.dart— 6个成就注册表lib/src/config/farm_config.dart— 游戏全局配置lib/src/controllers/farm/farm_game_controller.dart— 核心游戏控制器lib/src/controllers/farm/farm_shop_controller.dart— 商店控制器lib/src/controllers/farm/farm_inventory_controller.dart— 背包控制器lib/src/controllers/farm/farm_achievement_controller.dart— 成就控制器lib/src/pages/tools/farm/farm_game_page.dart— 主游戏页面lib/src/pages/tools/farm/farm_shop_page.dart— 种子商店页面lib/src/pages/tools/farm/farm_inventory_page.dart— 背包页面lib/src/pages/tools/farm/farm_achievement_page.dart— 成就中心页面lib/src/services/data/hive_service.dart— 扩展农场数据 Boxlib/src/config/app_routes.dart— 新增 4 个农场路由lib/src/models/tool_item_model.dart— 注册工具中心入口lib/src/app_binding.dart— 注册游戏控制器
[0.97.38] - 2026-04-18
🐛 修复 — 7个UI/功能Bug
Bug修复
- 🐛 收藏页面:移除"全部菜品"下方多余的"全部菜谱"栏
- 🐛 收藏页面:修复编辑按钮报错
Incorrect use of ParentDataWidget(Positioned放在Column中) - 🐛 收藏页面:修复编辑模式底部操作栏被底部Tab遮住的问题
- 🐛 缓存管理:修复点击已缓存菜谱跳转显示加载失败(路由参数格式错误)
- 🐛 数据导出:修复弹出系统分享后未操作就显示导出成功(Toast时机修正)
- 🐛 笔记页面:添加右上角缺失的添加笔记按钮
- 🐛 缓存管理:优化已缓存菜品和食材列表,改为可折叠展示
✨ 新增 — 数据导入功能
数据导入
- 📥 DataExportService 导入服务:支持 JSON 格式导入,与导出格式一致
previewImport()方法:预览导入数据,显示各数据源条数importFromJson()方法:执行导入,支持选择数据源ImportPreview类:导入预览数据模型
- 📥 DataExportPage 导入UI:新增"数据导入"区域
- 选择 JSON 文件导入入口
- 从其他应用分享导入入口
- 导入预览(显示文件名、各数据源条数)
- 确认导入对话框
- 🔌 receive_sharing_intent 集成:支持从其他应用分享 JSON 文件到本应用
- 监听分享流(getMediaStream)和初始分享(getInitialMedia)
- 自动识别 JSON 文件并预览
- 🔌 各 Controller importFromJson 方法:
FavoritesController: addFavoriteFromJsonShoppingListController: importFromJsonMealRecordController: importFromJsonCookingNoteController: importFromJsonWeeklyMenuController: importFromJsonBrowseHistoryController: importFromJson
平台配置
- 🤖 Android:AndroidManifest.xml 添加 SEND/SEND_MULTIPLE/VIEW intent-filter(application/json)
- 🍎 iOS:Info.plist 添加 CFBundleDocumentTypes + UTImportedTypeDeclarations(public.json)
- 📱 鸿蒙:module.json5 添加 ohos.want.action.sendData skill + general.entity/general.object utd + READ_MEDIA 权限
修改文件
lib/src/pages/profile/social/favorites_page.dart— 修复布局Buglib/src/pages/profile/data/cache_manage_page.dart— 可折叠列表优化lib/src/pages/profile/data_export_page.dart— 新增导入UI + receive_sharing_intent集成lib/src/pages/tools/cooking/cooking_note_page.dart— 添加笔记按钮lib/src/config/app_routes.dart— 修复路由参数lib/src/services/data/data_export_service.dart— 新增导入功能lib/src/controllers/data/favorites_controller.dart— 新增 addFavoriteFromJsonlib/src/controllers/data/shopping_list_controller.dart— 新增 importFromJsonlib/src/controllers/data/meal_record_controller.dart— 新增 importFromJsonlib/src/controllers/data/cooking_note_controller.dart— 新增 importFromJsonlib/src/controllers/data/weekly_menu_controller.dart— 新增 importFromJsonlib/src/controllers/data/browse_history_controller.dart— 新增 importFromJsonlib/src/models/data/weekly_menu_model.dart— DayMenu 添加 copyWithandroid/app/src/main/AndroidManifest.xml— 添加分享intent-filterios/Runner/Info.plist— 添加JSON文件类型声明ohos/entry/src/main/module.json5— 添加分享skill和权限ohos/entry/src/main/resources/base/element/string.json— 添加权限说明ohos/entry/src/main/resources/zh_CN/element/string.json— 添加中文权限说明ohos/entry/src/main/resources/en_US/element/string.json— 添加英文权限说明
[0.97.37] - 2026-04-18
✨ 新增 — 离线模式增强 + 数据导出功能
离线模式增强
- 📡 OfflineService 离线服务核心:统一管理离线状态、操作守卫、功能可用性列表
guard()方法:离线时拦截操作,支持排队等待网络恢复后自动执行- 可用/不可用功能列表:离线时明确告知用户哪些功能可用
- 离线持续时间追踪:显示已离线时长
- 排队操作计数:显示待执行操作数量
- 🔔 增强离线指示器 OfflineIndicator:显示离线状态+持续时间+排队数,点击查看详情
- 🔄 ConnectivityService 生命周期感知:监听 App 生命周期,
resumed时重新检查网络状态 - 🛡️ DNS 预检重置机制:后台恢复时自动重置 DNS 预检状态,避免假离线
数据导出功能
- 📦 DataExportService 统一导出服务:支持 6 种数据源、3 种格式(JSON/CSV/Markdown)
- 数据源:收藏、购物清单、饮食记录、烹饪笔记、每周菜单、浏览记录
- 格式:JSON(数据备份)、CSV(Excel 编辑)、Markdown(阅读分享)
- 支持单源导出和一键全量导出
- 导出后支持系统分享
- 📄 DataExportPage 数据导出页面:iOS 风格 UI,选择格式+数据源+导出/分享
- 🔌 各 Controller 导出方法:
FavoritesController: exportToJson/exportToCsv/exportToMarkdownShoppingListController: exportToJson/exportToCsv/exportToMarkdownMealRecordController: exportToJson/exportToCsv/exportToMarkdownCookingNoteController: exportToJson/exportToCsv/exportToMarkdownWeeklyMenuController: exportToJson/exportToCsv/exportToMarkdownBrowseHistoryController: exportToJson/exportToCsv
🐛 修复 — 后台恢复假离线
- 问题:返回桌面后,后台会断网,再打开一直显示无网络,过一会被系统清理后台
- 根因:应用从后台恢复时,DNS 预检结果过期(
_dnsChecked=true但_dnsReachable=false),5 分钟内不重新检查,导致所有请求走缓存或失败 - 修复:
ConnectivityService添加WidgetsBindingObserver,resumed时主动检查网络- 网络恢复时触发 DNS 预检重置(
ApiService.resetDnsCheck()) - 新增异步恢复回调机制
addOnNetworkRestoredAsync()
修改文件
lib/src/services/data/offline_service.dart— 新建:离线服务核心lib/src/services/data/data_export_service.dart— 新建:数据导出服务lib/src/widgets/states/offline_indicator.dart— 新建:增强版离线指示器lib/src/pages/profile/data_export_page.dart— 新建:数据导出页面lib/src/services/connectivity_service.dart— 生命周期感知+DNS重检+异步恢复回调lib/src/services/api/api_service.dart— 新增 resetDnsCheck() 方法lib/src/services/data/hive_service.dart— 新增 getAllMealRecords() 方法lib/src/widgets/states/offline_banner.dart— 优先使用 OfflineService 数据源lib/src/app_binding.dart— 注册 OfflineService 和 DataExportServicelib/src/services/core/app_service.dart— 注册 DNS 重检回调lib/src/config/app_routes.dart— 新增 dataExport 路由lib/src/pages/profile/profile_settings.dart— 新增数据导出入口lib/src/controllers/data/favorites_controller.dart— 新增 exportToMarkdownlib/src/controllers/data/shopping_list_controller.dart— 新增 exportToJson/exportToCsv/exportToMarkdownlib/src/controllers/data/meal_record_controller.dart— 新增 exportToJson/exportToCsv/exportToMarkdownlib/src/controllers/data/cooking_note_controller.dart— 新增 exportToJson/exportToCsv/exportToMarkdownlib/src/controllers/data/weekly_menu_controller.dart— 新增 exportToJson/exportToCsv/exportToMarkdownlib/src/controllers/data/browse_history_controller.dart— 新增 exportToJson/exportToCsv
[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.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.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.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及之前),功能已归档至软件特性清单。