Files
kitchen/CHANGELOG.md
2026-04-22 10:09:18 +08:00

10 KiB
Raw Blame History

Changelog

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

[0.99.29] - 2026-04-22

增强 — 扫码识别菜谱 + 相机权限管理完善

变更描述

扫码功能增强识别CP/ID后通过API转换为APP内部菜品ID跳转详情页相机权限管理完善

实现内容

  • 🔍 扫码结果智能识别截取URL中的CP编码和ID参数通过 WhatToEatRepository API查询转换为APP内部菜品ID
    • 支持 https://eat.wktyl.com/api/kitchen/recipe_share.php?code=CP037130 格式
    • 支持 https://eat.wktyl.com/?id=28087 格式
    • 支持纯文本 CP037130 格式
    • 查询成功显示菜谱识别对话框,跳转菜品详情页
    • 查询失败降级为普通扫码结果显示
  • 📷 相机权限弹窗引导:扫码前弹出相机用途说明,拒绝后显示各平台开启指引
  • 🔒 权限管理页面增强
    • 新增相机权限项(📷),状态动态显示(已开启/已拒绝)
    • 相机权限拒绝时显示红色标识,点击可跳转系统设置
    • 权限说明弹窗更新:区分动态权限和基础权限
  • 📄 隐私政策更新:设备权限调用新增相机权限说明

修改文件

  • lib/src/pages/home/scanner_page.dart — CP/ID通过API转换权限弹窗引导
  • lib/src/pages/profile/tools/permission_page.dart — 新增相机权限,动态状态显示
  • lib/src/pages/profile/info/privacy_policy_page.dart — 新增相机权限说明

[0.99.28] - 2026-04-22

🔄 升级 — mobile_scanner 本地包升级至官方 v7.2.0 + 鸿蒙适配合并

变更描述

将本地 packages/mobile_scanner 从鸿蒙适配版 v7.1.4 升级为官方 v7.2.0,并保留鸿蒙端支持

合并内容

  • 📦 基础:官方 mobile_scanner v7.2.0(新增 camera_lens_type、switch_camera_option、barcode_bytes 等)
  • 🔧 鸿蒙适配合并:
    • ohos/ 目录完整保留(鸿蒙原生 ets 实现)
    • lib/src/method_channel/ohos_surface_producer_delegate.dart — 鸿蒙 Surface 代理
    • lib/src/method_channel/surface_producer_delegate.dart — Surface 代理接口
    • lib/src/method_channel/mobile_scanner_method_channel.dart — 添加 TargetPlatform.ohos 支持
    • lib/src/method_channel/rotated_preview.dart — 鸿蒙旋转方向修复
    • pubspec.yaml — 添加 ohos 平台声明

修改文件

  • packages/mobile_scanner/ — 整体替换为官方 v7.2.0 + 鸿蒙适配合并版
  • packages/本地已适配鸿蒙的库.md — 添加 mobile_scanner 适配记录

[0.99.27] - 2026-04-22

新功能 — 首页扫码功能mobile_scanner

功能描述

首页 AppBar 右侧新增扫码按钮,点击打开相机扫描二维码/条形码页面

实现内容

  • 🔍 集成 mobile_scanner 鸿蒙适配版(本地包 packages/mobile_scanner
  • 📱 支持平台Android / iOS / macOS / 鸿蒙 / Web
  • 🖥️ Windows/Linux 降级提示:显示"当前平台暂不支持相机扫码"
  • 🎯 扫码结果自动识别类型(链接/EAN-13/EAN-8/UPC-A/文本)
  • 📋 支持复制扫码结果到剪贴板
  • 🔦 支持闪光灯开关、前后摄像头切换
  • 📐 扫描框四角装饰 + 提示文字

权限配置

  • Android: AndroidManifest.xml 添加 CAMERA 权限
  • iOS: Info.plist 添加 NSCameraUsageDescription
  • macOS: Info.plist 添加 NSCameraUsageDescription
  • 鸿蒙: module.json5 添加 ohos.permission.CAMERAstring.json 权限说明改中文

修改文件

  • pubspec.yamlfluttertpc_mobile_scanner git依赖改为 mobile_scanner 本地包
  • lib/src/pages/home/scanner_page.dart — 新建扫码页面
  • lib/src/widgets/glass/nav/home_app_bar.dart — AppBar 添加扫码按钮
  • lib/src/pages/home/home_page.dart — 连接扫码按钮回调
  • lib/src/config/app_routes.dart — 注册 /scanner 路由
  • android/app/src/main/AndroidManifest.xml — 添加 CAMERA 权限
  • ios/Runner/Info.plist — 添加 NSCameraUsageDescription
  • macos/Runner/Info.plist — 添加 NSCameraUsageDescription
  • ohos/entry/src/main/module.json5 — 添加 CAMERA 权限
  • ohos/entry/src/main/resources/base/element/string.json — 权限说明改中文

[0.99.26] - 2026-04-22

🐛 修复 — Windows端返回导航快捷键改用Escape键

问题描述

Windows桌面端在搜索页面等输入框中按 Backspace/Delete 删除文字时,会误触发全局返回导航逻辑,导致返回上一页

根因分析

  • main.dartKeyboardListener 全局监听 Backspace 键执行 Get.back() 返回上一页
  • Backspace 是文本编辑常用键,与返回导航功能冲突,无法通过焦点检测完全避免

修复内容

  • 🔧 将 Backspace 键绑定改为 Escape
  • Escape 是桌面端常用的"返回/关闭"快捷键,不会与文本编辑冲突
  • 返回导航快捷键变更为:Alt+← / Escape / BrowserBack鼠标侧键

修改文件

  • lib/main.dartKeyboardListener.onKeyEventLogicalKeyboardKey.backspace 改为 LogicalKeyboardKey.escape

🐛 修复 — 工具中心多个页面列表溢出及路由未注册

问题描述

  1. 用餐时段推荐、份量缩放、食材详情、每周菜单规划等页面内容被 AppBar 遮住
  2. RenderFlex 溢出 3.0 pixelsmeal_time_recommend_page.dart:253
  3. 路由 /tools/dish-ranking 未注册到 PageRegistry导致页面验证警告

根因分析

  • 内容被 AppBar 遮住3个页面使用了 SafeArea(top: false),而 CupertinoPageScaffold 的半透明导航栏alpha: 0.9)不会自动偏移内容,需要 SafeArea 提供顶部间距
  • RenderFlex 溢出:时段选择器 SizedBox(height: 50) 容器高度不足,内部 Column 内容超出 3px
  • 路由未注册dish-ranking 等路由在 GetPage 中已定义但 PageRegistry.registerAll 中缺少对应 PageInfo

修复内容

  • 🔧 移除 SafeArea(top: false)meal_time_recommend_page、serving_scaler_page、ingredient_detail_page
  • 🔧 修复时段选择器高度SizedBox 50→56消除 RenderFlex 溢出
  • 🔧 每周菜单规划页面 _buildDayDetailViewColumn 改为 SingleChildScrollView防止内容溢出
  • 🔧 补充 PageRegistry 注册dish-ranking、toolsStats、toolsOrderAssistant、toolsDecisionMaker、toolsTakeoutNote、dataExport、ratingRecords、foodTimeline 共8个路由

修改文件

  • lib/src/pages/tools/health/meal_time_recommend_page.dart — 移除 top: false,修复 SizedBox 高度
  • lib/src/pages/tools/cooking/calculator/serving_scaler_page.dart — 移除 top: false
  • lib/src/pages/tools/ingredient_detail/ingredient_detail_page.dart — 移除 top: false
  • lib/src/pages/tools/planning/weekly_menu_planner_page.dart_buildDayDetailView 改用 SingleChildScrollView
  • lib/src/config/app_routes.dart — 补充8个缺失的 PageInfo 注册项

举一反三

  • 全局搜索确认已无其他 SafeArea(top: false) 残留
  • 排查所有工具页面路由,确保 GetPage 与 PageRegistry 一一对应

[0.99.25] - 2026-04-22

🔄 调整 — 个人中心首页与设置页按钮位置互换

变更内容

  • 🌟 美食年轮入口移至首页:将「🌟 美食年轮 - 查看你的美食旅程」从设置页移至个人中心首页顶部卡片位置,方便用户快速访问美食旅程
  • 🚀 开发计划入口移至设置页:将「开发计划 - 查看即将推出的功能与路线图」从首页移至设置页底部 section含完整路线图 Sheet 弹窗

修改文件

  • lib/src/pages/profile/profile_home.dart — 移除开发计划卡片及 Sheet 相关代码,新增美食年轮入口卡片
  • lib/src/pages/profile/profile_settings.dart — 移除美食年轮 section新增开发计划 section_showDevPlanSheet_buildDevPlanItem_DevPlanItem_PlanStatus

🔤 字体 — NotoSansSC 子集化并启用全局中文字体

变更内容

  • 🔧 修复假字体文件:原 NotoSansSC-Regular.otfNotoSansSC-Bold.otf 实际是 GitHub HTML 页面302KB替换为真正的 OTF 字体文件
  • ✂️ 字体子集化:使用 fontTools pyftsubset 对完整版 NotoSansCJKsc 进行 GB2312 子集化6763 常用汉字 + 常用符号),体积从 31.9MB → 6.5MB(缩减 80%
  • 🎨 启用全局中文字体:在 theme_service.dart 的 Material 和 Cupertino 主题中启用 NotoSansSC 作为全局字体,确保中文渲染统一美观

体积对比

文件 子集化前 子集化后 缩减
NotoSansSC-Regular.otf 15.7 MB 3.2 MB 80%
NotoSansSC-Bold.otf 16.2 MB 3.3 MB 80%
合计 31.9 MB 6.5 MB 80%

修改文件

  • assets/fonts/NotoSansSC-Regular.otf — 替换为 GB2312 子集化版本
  • assets/fonts/NotoSansSC-Bold-new.otf — 新增 GB2312 子集化 Bold 版本(原 Bold.otf 被 IDE 锁定,使用新文件名)
  • pubspec.yaml — 更新字体配置注释和 Bold 文件路径
  • lib/src/services/ui/theme_service.dart — 在 getThemeData()cupertinoThemeData 中启用 fontFamily: 'NotoSansSC'

⚙️ 设置 — 字体风格可切换(系统默认 / NotoSansSC

变更内容

  • 🔤 新增字体风格设置:用户可在「个性化设置 → 🔤 字体风格」中选择「系统默认」或「NotoSansSC」
  • 💾 持久化存储:字体选择保存到 SharedPreferences重启后保持
  • 🔄 动态切换:选择后立即生效,无需重启应用
  • 🎨 CupertinoSegmentedControl:使用 iOS 风格分段控件,附带说明文字

修改文件

  • lib/src/services/ui/theme_service.dart — 新增 FontFamilyStyle 枚举、fontFamilyStyle 状态、setFontFamilyStyle() 方法,主题根据选择动态切换字体
  • lib/src/controllers/user/personalization_controller.dart — 新增 setFontFamilyStyle() 方法
  • lib/src/pages/profile/settings/personalization_page.dart — 新增「🔤 字体风格」section含分段控件和说明