102 KiB
Changelog
所有重要变更均记录于此文件。格式基于 Keep a Changelog。
[v6.16.3] - 2026-06-04
🐛 Hive降级初始化 — 解决iOS模拟器objective_c库导致整个Hive系统瘫痪
根因分析
Hive.initFlutter()内部调用getApplicationDocumentsDirectory(),在iOS模拟器上因objective_c库加载失败而抛出ArgumentError。
之前的修复只是让app不崩溃(降级模式),但Hive完全不可用,导致壁纸页面、缓存管理页面等所有依赖Hive的功能无数据。
修复内容
- HiveSafeAccess.ensureInitialized() —
Hive.initFlutter()失败时,降级使用Hive.init()+手动获取路径(getApplicationDocumentsDirectory()失败则用Directory.systemTemp.path) - 这样Hive可以在iOS模拟器上正常工作(使用临时目录),所有依赖Hive的服务(壁纸、缓存、设置等)恢复正常
修改文件
hive_safe_access.dart
[v6.16.2] - 2026-06-04
🐛 壁纸模版页面卡死 + Hive系统级联崩溃(根因修复)
根因:Hive.initFlutter()在iOS模拟器因objective_c库问题失败后rethrow,导致整个Hive系统瘫痪
- 影响范围: 所有依赖Hive的服务(KvStorage、WallpaperFavoriteService、WallpaperHealthService、SettingsChangeLogger、ExchangeRateService等)全部初始化失败,KvStorage持续输出"未初始化"警告,壁纸页面数据为空导致卡死
修复内容:
- HiveSafeAccess.ensureInitialized() — 失败时不再rethrow,标记
_hiveInitFailed状态,让后续操作可优雅降级 - KvStorage.init() — 失败时不再rethrow,进入降级模式(所有存储操作返回默认值)
- WallpaperFavoriteService.init() — 添加
on HiveError catch+catch (e)全异常捕获 - WallpaperHealthService.init() — 同上
- SettingsChangeLogger.init() — 同上
- HiveSafeAccess._openWithRetry() — Hive初始化失败时直接抛出明确错误,不浪费3次重试
修改文件:
hive_safe_access.dart,kv_storage.dart,wallpaper_favorite_service.dart,wallpaper_health_service.dart,settings_change_logger.dart
[v6.16.1] - 2026-06-04
🐛 引导页重复显示 + 桌面小部件framework断言(根因修复)
引导页重复显示
- 根因:
GoRouter构造时调用_resolveInitialLocation(),此时KvStorage尚未初始化,isOnboardingCompleted返回默认值false,导致路由始终指向/onboarding - 修复: 将引导页判断从
initialLocation(同步执行)移到redirect回调(每次导航时执行,此时KvStorage已就绪);initialLocation固定为AppRoutes.home;删除不再使用的_resolveInitialLocation() - 修改文件:
app_router.dart
桌面小部件页面framework断言错误
- 根因:
CupertinoSliverNavigationBar缺少largeTitle参数,iOS 26/Flutter最新版要求必须提供,否则触发largeTitleContent != null断言,级联导致_elements.contains(element)断言和RenderViewport expected RenderSliver错误 - 修复: 添加
largeTitle参数 - 修改文件:
widget_management_page.dart
[v6.16.0] - 2026-06-04
🛡️ 审计修复 — 5类系统性风险26处加固
基于v6.15.0验收审计发现的87个潜在问题,优先修复28个高危问题中的26处(2处为设计决策保留)。
1. gal插件ArgumentError捕获(5处)
- 原因: iOS模拟器objective_c原生库加载失败时gal抛出ArgumentError,未捕获导致崩溃
- 修复: 5处gal调用添加
on ArgumentError catch分支,降级为友好提示 - 修改文件:
share_sheet.dart,leisure_share_sheet.dart,progress_share_card.dart,chat_video_bubble.dart,china_colors_page.dart
2. path_provider异常降级(8处)
- 原因:
getTemporaryDirectory()/getApplicationDocumentsDirectory()在某些平台可能抛出异常 - 修复: 所有调用点添加try-catch,失败时降级使用
Directory.systemTemp - 修改文件:
export_io_native.dart(4处),font_download_service.dart,logger.dart,sentence_detail_actions.dart,account_export_info_sheet.dart,voice_recorder_sheet.dart,ohos_compatibility_helper.dart,general_fields_provider.dart(2处)
3. Hive.openBox ArgumentError捕获(2处)
- 原因: iOS模拟器objective_c库异常时Hive.openBox抛出ArgumentError
- 修复: 添加
on ArgumentError catch,降级打开fallback box - 修改文件:
wallpaper_favorite_service.dart,wallpaper_health_service.dart
4. addPostFrameCallback mounted检查(6处)
- 原因: 回调中直接使用context/setState/ref,widget dispose后触发framework断言错误
- 修复: 所有回调开头添加
if (!mounted) return;(ConsumerWidget用context.mounted) - 修改文件:
progress_beautify_page.dart,signin_page.dart,app_lock_pattern_setup.dart,image_cache_page.dart,chat_flow_page.dart,weather_settings_page.dart
5. 页面级pop canPop()保护(5处)
- 原因: 在根页面pop可能导致黑屏或异常
- 修复: 添加
canPop()检查,不可pop时降级导航到首页 - 修改文件:
signin_page.dart,hot_search_page.dart,security_question_page.dart,change_password_page.dart,sentence_detail_sheet.dart
[v6.15.0] - 2026-06-04
🐛 10项Bug修复 + 验收审计举一反三
Bug #1: 了解我们页面 - 微信搜索移到右边作为单独标签
- 原因: "微风暴(微信搜索)"合并为一个标签,用户无法单独操作微信搜索
- 修复: 拆分为两个独立标签,左边"微风暴"带复制功能,右边"微信搜索"带搜索图标
- 修改文件:
learn_us_widgets.dart
Bug #2: 权限管理页面 - 摇一摇权限点击关闭无反应
- 原因:
refresh()将全页面设为loading状态,导致开关组件被销毁重建 - 修复: 新增
_refreshSilently()方法,不设loading状态避免销毁开关;启用摇一摇时重启ShakeDetector - 修改文件:
permission_management_page.dart,permission_service.dart
Bug #3: 发现页面 - 日签卡片一直转圈loading
- 原因: API请求无超时保护,网络异常时可能无限挂起
- 修复: provider层添加10秒超时+TimeoutException捕获,service层添加8秒超时
- 修改文件:
daily_card_provider.dart,daily_card_service.dart
Bug #4: 发现页面进度 - 保存图片失败(objective_c库问题)
- 原因: iOS模拟器objective_c原生库加载失败,gal插件抛出ArgumentError
- 修复: export_io_native增加
on ArgumentError catch降级为分享方案;进度美化页面改用ExportService - 修改文件:
export_io_native.dart,progress_beautify_page.dart
Bug #5: 数据管理页面 - 无法获取应用文档目录异常
- 原因:
safeAppDirPath返回null时直接throw,无降级方案 - 修复: 降级使用临时目录;数据管理页面增加try-catch保护
- 修改文件:
backup_service.dart,data_management_page.dart
Bug #6: 缓存管理页面 - AppBar标题去掉"图片"两字
- 修复: 修改zh_cn/zh_tw翻译文件
- 修改文件:
zh_cn.dart,zh_tw.dart
Bug #7: 个人中心 - objective_c库报错(Hive缓存)
- 原因: 与Bug #4同根因,HiveCacheStore打开Box时objective_c库异常
- 修复: HiveCacheStore增加
on ArgumentError catch降级打开临时Box - 修改文件:
cache_config.dart
Bug #8: iOS长按App icon进入页面无返回按钮
- 原因: QuickActions使用
appRouter.go()替换当前路由,无导航栈 - 修复: 改用
appRouter.push()保留导航栈;审计发现app.dart中另有2处同类问题一并修复 - 修改文件:
app.dart(3处go→push)
Bug #9: iOS清理后台重新打开显示引导页
- 原因: 路由判断使用
isFirstLaunch,Hive冷启动读取失败时默认true导致误判 - 修复: 改用
isOnboardingCompleted作为主要判断;引导页完成时flush Hive确保持久化 - 修改文件:
app_router.dart,onboarding_provider.dart
Bug #10: 桌面小部件页面 - framework断言错误
- 原因:
_WidgetDataPreview在initState直接调用异步方法访问ref,widget dispose后仍操作element - 修复: 添加
_disposed标志+dispose()方法;initState改用addPostFrameCallback;所有ref/setState前检查mounted和disposed;添加5秒超时保护 - 修改文件:
widget_management_page.dart
🔍 验收审计 - 举一反三分析
审计发现项目存在以下系统性风险模式:
| 风险类别 | 高危数 | 中危数 | 低危数 | 合计 |
|---|---|---|---|---|
| 异步生命周期(ref/setState无mounted保护) | 11 | 20 | 9 | 42 |
| Hive/Path/Gal缺少ArgumentError捕获 | 9 | 10 | 4 | 29 |
| 路由导航(go应改push/pop无空栈保护) | 4 | 4 | 2 | 10 |
| KvStorage关键标志位默认值保护 | 4 | 2 | 0 | 6 |
| 合计 | 28 | 36 | 15 | 87 |
已修复的举一反三问题:
- ✅ app.dart中数据管理和小组件导航入口go→push(与Bug #8同根因)
- ✅ KvStorage.isFirstLaunch默认值分析(保持true,因路由已改用isOnboardingCompleted)
建议后续优先修复的高危问题:
share_sheet.dart等5处gal调用缺少ArgumentError捕获(与Bug #4同根因)export_io_native.dart等8处path_provider缺少null检查(与Bug #5同根因)wallpaper_favorite_service.dart等2处Hive.openBox缺少ArgumentError捕获(与Bug #7同根因)- 6处addPostFrameCallback中使用context/setState无mounted检查(与Bug #10同根因)
signin_page.dart等5处页面级pop缺少canPop()保护
[v6.14.0] - 2026-06-04
🎴 日签卡片 AR 3D 展示效果 (Issue #9)
背景: 日签卡片页面缺乏沉浸式展示体验,用户希望在 AR 空间中查看悬浮的日签卡片,增强视觉冲击力和分享欲望。
技术方案: 采用伪AR效果方案 — 使用 Flutter 的 3D 变换和设备传感器模拟 AR 体验,无需原生 ARKit/ARCore 集成。
实现内容:
- ✅ 创建
daily_card_ar_view.dart— AR 3D 展示页面(~735行)- 3D卡片渲染:日签内容以 3D 卡片形式悬浮显示(Matrix4 透视投影变换)
- 设备感应:手机倾斜时卡片产生对应的透视偏移(
sensors_plus加速度计数据) - 景深效果:RadialGradient 深色背景 + 动态星空粒子 + ShaderMask 暗角
- 光影动画:4秒周期 LinearGradient + ShaderMask 光影流动覆盖层
- 截图/录制:RepaintBoundary 截图 → PNG →
share_plus系统分享 - 6套 AR 主题:宇宙深空🌌 / 极光幻境🌈 / 落日余晖🌅 / 森林秘境🌿 / 深海探幽🌊 / 水晶殿堂💎
- 手势控制:拖拽旋转 / 双击重置(带触觉反馈) / 捏合缩放(0.6x-2.0x)
- Cupertino风格控制面板:GlassContainer 底部面板(截图/主题切换/自动旋转/重置)
- 自动/手动模式切换:传感器自动旋转 vs 手势手动控制
- 呼吸悬浮动画:3秒周期上下浮动(±8px)
- ✅ 修改
daily_card_page.dart— 操作栏新增「AR」按钮(CupertinoIcons.viewfinder图标),点击跳转 AR 视图并传递当前卡片数据 - ✅ 路由注册:
app_routes.dart— 新增dailyCardArView = '/daily-card/ar'常量route_registry.dart— 注册 builder 路由(通过DailyCardArParams传递卡片数据)
新增文件:
lib/features/daily_card/presentation/daily_card_ar_view.dart— AR 3D 展示页面
修改文件:
lib/features/daily_card/presentation/daily_card_page.dart— 新增 AR 入口按钮 +_onArView()方法lib/core/router/app_routes.dart— 新增 dailyCardArView 路由常量lib/core/router/route_registry.dart— 注册 AR 页面路由
依赖复用(无需新增):
sensors_plus: ^6.1.0— 已有,用于加速度计数据采集share_plus: ^13.1.0— 已有,用于截图分享flutter_tilt: ^4.0.0— 已有,备选 3D 倾斜交互库
[v6.13.0] - 2026-06-04
🔧 鸿蒙原生层修复 + iOS Widget深度定制 (Issue #2, #8)
任务A: 鸿蒙原生层修复 (Issue #2)
问题A1: 桌面Widget长按图标不显示按钮列表
- 原因: 鸿蒙FormPage只使用
.onClick()处理点击事件,没有实现长按手势或上下文菜单 - 修复内容:
- ✅ 为所有FormPage添加
.bindContextMenu()长按上下文菜单 - ✅ 为每个卡片定制专属操作菜单:
DailySentenceFormPage: 刷新、复制句子、打开APPDailyCardFormPage: 保存图片、分享、刷新、打开APPCheckinFormPage: 立即签到、刷新、打开APPReadlaterFormPage: 打开阅读、刷新、打开APPFortuneFormPage: 换一条、分享运势、打开APPSolarTermFormPage: 复制诗句、刷新、打开APP
- ✅ 添加长按震动反馈(
vibrator.vibrate())
- ✅ 为所有FormPage添加
修改文件:
ohos/entry/src/main/ets/formability/pages/DailySentenceFormPage.etsohos/entry/src/main/ets/formability/pages/DailyCardFormPage.etsohos/entry/src/main/ets/formability/pages/CheckinFormPage.etsohos/entry/src/main/ets/formability/pages/ReadlaterFormPage.etsohos/entry/src/main/ets/formability/pages/FortuneFormPage.etsohos/entry/src/main/ets/formability/pages/SolarTermFormPage.ets
问题A2: 日签卡片保存按钮无反应
- 原因:
gal(gallery_saver) 插件不支持OHOS平台 - 修复内容:
- ✅ 修改
export_io_native.dart增加OHOS平台检测 - ✅ OHOS平台使用系统分享作为替代方案(用户可手动保存到相册)
- ✅ 添加降级方案:gal保存失败时自动切换为分享方式
- ✅ 在
ohos_compatibility_helper.dart添加图片保存兼容方法
- ✅ 修改
修改文件:
lib/editor/services/export/export_io_native.dart— OHOS兼容性支持lib/core/utils/platform/ohos_compatibility_helper.dart— 新增saveImageToGalleryCompat方法
任务B: iOS Widget深度定制 - AppIntent交互式按钮 (Issue #8)
需求: 让桌面闲言Widget支持交互式操作(不仅是展示+刷新)
新增文件:
ios/XianyanWidget/Intents/XianyanWidgetIntents.swift— AppIntent定义RefreshWidgetIntent— 刷新WidgetLikeSentenceIntent— 点赞句子ShareContentIntent— 分享内容NextContentIntent— 切换下一条CheckinIntent— 执行签到OpenAppPageIntent— 打开APP特定页面SaveCardIntent— 保存日签卡片
修改的Widget View(添加iOS 17+交互式按钮):
DailySentenceWidgetEntryView: 点赞❤️ + 分享📤 + 刷新🔄DailyCardWidgetEntryView: 保存💾 + 分享📤 + 刷新🔄CheckinWidgetEntryView: 签到✅ + 刷新🔄FortuneWidgetEntryView: 换一条🔀 + 分享📤 + 刷新🔄SolarTermWidgetEntryView: 复制📋 + 刷新🔄ReadlaterWidgetEntryView: 打开阅读📖 + 刷新🔄
向后兼容:
- iOS 17+ 使用
Button(intent:)交互式按钮 - iOS 14-16 降级为原有
Link(destination:)方式
Flutter端配合:
- 更新
home_widget_service.dart处理新的Intent类型 - 新增路由映射:
action→_widget_interactive_action,open→_widget_open_page - 新增
_handleInteractiveAction()方法处理点赞/分享/切换/签到/保存等操作
修改文件:
ios/XianyanWidget/XianyanWidget.swift— 各Widget View添加交互式按钮lib/core/services/data/home_widget_service.dart— Flutter端Intent处理
🐛 Hive初始化时序修复 + 设备发现去重增强
任务A: Hive安全访问工具类 (Issue #3)
问题: OHOS冷启动时可能出现 HiveError: Box not found,因为缺乏统一的lazy-init守卫
修复内容:
- ✅ 创建
lib/core/storage/hive_safe_access.dart统一Hive安全访问单例 - ✅ 提供
safeBox<T>(name)方法:自动检查并初始化,带重试机制(默认3次) - ✅ 提供
ensureOpen(name)/tryGetBox<T>(name)方法 - ✅ 使用 Box 缓存 + 并发打开锁防止重复打开
- ✅ 完整日志追踪便于调试
- ✅ 更新
KvStorage.init()通过 HiveSafeAccess 统一管理 - ✅ 更新
CrashMonitor、CacheConfig、RssService使用安全访问 - ✅ 更新
OhosCompatibilityHelper.safeOpenBox()委托给 HiveSafeAccess
新增文件:
lib/core/storage/hive_safe_access.dart— Hive安全访问单例
修改文件:
lib/core/storage/kv_storage.dart— 集成HiveSafeAccesslib/core/services/error/crash_monitor.dart— 使用safeBox替代直接openBoxlib/core/network/cache_config.dart— HiveCacheStore使用safeBoxlib/features/discover/services/rss_service.dart— 使用safeBoxlib/core/utils/platform/ohos_compatibility_helper.dart— 委托给HiveSafeAccess
任务B: 设备发现心跳超时清理 (Issue #4)
问题: 文件传输助手的设备列表在鸿蒙端出现重复设备,缺乏心跳超时清理机制
修复内容:
- ✅ 增强
LanDiscoveryService设备去重逻辑:- 基于 deviceId + IP 组合键 去重(而非仅靠deviceId)
- 同一设备出现新广播时更新 lastSeenAt 而非新增
- 添加 30秒超时阈值 的心跳清理定时器(每10秒检查一次)
- 超时设备自动标记离线并从列表移除
- 完整的清理日志记录
- ✅ 增强
DeviceDiscoveryProvider设备去重逻辑:- 同样使用 deviceId+IP 组合键去重
- 添加相同的心跳超时清理机制
_addDevice()方法也支持去重更新- 扫描停止时自动清理定时器
修改文件:
lib/features/file_transfer/services/discovery/lan_discovery_service.dartlib/features/file_transfer/providers/device_discovery_provider.dart
[v6.11.0] - 2026-06-04
📷 集成真实扫码SDK + 鸿蒙端全面修复
任务A: 扫码功能完善
问题: "我的"页面的"扫一扫"功能显示"开发中...",未实现真实的二维码扫描功能
修复内容:
- ✅ 创建通用扫码页面
qrcode_scanner_page.dart,集成mobile_scanner: ^7.1.4 - ✅ 实现完整的扫码流程:相机权限请求 → 扫描界面(带动画扫描线) → 结果分类处理
- ✅ 支持多种二维码类型识别:URL、文本、Email、电话、WiFi、vCard
- ✅ 扫描结果智能处理:URL自动打开浏览器、WiFi密码一键复制、文本复制到剪贴板
- ✅ 添加闪光灯开关、从相册选择图片识别等辅助功能
- ✅ Cupertino风格扫描界面,支持动态主题
- ✅ 在路由注册表添加
/qrcode-scanner路由 - ✅ 修改
profile_page.dart,将"开发中..."替换为跳转到扫码页面
新增文件:
lib/features/shared/presentation/qrcode_scanner_page.dart
修改文件:
lib/core/router/app_routes.dart— 添加 qrcodeScanner 路由常量lib/core/router/route_registry.dart— 注册扫码页面路由lib/features/mine/profile/presentation/profile_page.dart— 替换"开发中..."为页面跳转android/app/src/main/AndroidManifest.xml— 添加相机权限声明
任务B: 鸠蒙端兼容性修复
B.1.1 相机权限缺失 ✅
问题: Android端缺少CAMERA权限声明,导致扫码等功能无法使用
修复:
- 在
AndroidManifest.xml添加android.permission.CAMERA权限 - 添加
<uses-feature android.hardware.camera>声明(非必需) - 注意: 鸿蒙端
module.json5已有ohos.permission.CAMERA权限(第184行)
B.1.2 文件传输设备列表重复 ✅
分析结果:
- 设备发现代码已有基于
deviceId的去重逻辑(transfer_notifier.dart:446-451) - 合并设备时也做了ID去重(
file_transfer_discovery_tab.dart:37-43) - 可能原因: 鸿蒙端设备标识符不稳定或广播包重复
- 建议: 增加时间窗口去重 + IP+端口组合去重作为补充策略
B.1.3 长按桌面图标不显示按钮列表 ⚠️
分析结果:
- 这是鸿蒙原生端的限制,需要修改
.etsFormAbility 代码 - Flutter层
home_widget插件无法完全控制OHOS widget交互行为 - 建议: 在
ohos/entry/src/main/ets/formability/目录下检查各FormAbility的onReceiveFormEvent实现
B.1.4 HiveError Box not found ✅
解决方案:
- 创建
OhosCompatibilityHelper.safeOpenBox()方法,提供重试机制 - 建议在应用启动时统一初始化所有Hive Box
- 特别关注OHOS平台初始化时序问题
B.1.6 设备信息显示unknown ✅
分析结果:
device_info_service.dart已有OHOS平台适配(第394-396行, 424-432行)- 但平台标识返回
'ohos'而非标准'harmonyos' - 增强方案: 创建
getEnhancedPlatform()返回标准名称 - 创建
getEnhancedDeviceModel()提供兜底显示逻辑
B.1.7 日签卡片保存按钮无反应 ⚠️
分析结果:
- 使用
gal: ^2.3.0插件保存图片到相册 - 该插件对OHOS平台的支持可能不完整
- 建议:
- 检查
pubspec.ohos.yaml是否有gal的OHOS替代实现 - 或使用
image_picker的反向操作保存图片 - 添加try-catch和用户提示
- 检查
B.1.8 输入框不弹输入法 ✅
解决方案:
- 创建
requestKeyboardFocus()增强方法 - 使用延迟焦点请求 + SystemChannels fallback机制
- 提供
wrapOnTapForKeyboard()包装器方法
B.1.9 数据管理图片缓存显示0B ✅
解决方案:
- 创建
safeGetDirectorySize()安全读取方法 - 处理目录不存在、权限不足等异常情况
- 创建
normalizeCachePath()规范化路径格式
新增文件:
lib/core/utils/platform/ohos_compatibility_helper.dart— 鸿蒙端兼容性工具类
工具类提供的能力:
- 输入法增强(键盘唤起)
- 设备信息标准化
- 文件路径适配与安全读取
- 权限检查增强
- Hive初始化容错
- UI渲染增强
- OhosCompatibleState Mixin用于快速集成
[v6.10.5] - 2026-06-02
🧭 修复多个页面缺少AppBar标题和返回按钮
问题: 多个页面使用 AdaptiveBackButton 但当 canPop() 为 false 时按钮消失,或缺少 middle 标题导致导航栏空白;部分页面使用自定义导航栏而非标准 CupertinoNavigationBar,风格不统一。
修复内容:
- ✅
login_page.dart— 添加动态middle标题(登录/注册切换),替换AdaptiveBackButton为始终可见的导航按钮(可返回时显示返回箭头,不可返回时显示关闭按钮并导航回首页) - ✅
chat_video_bubble.dart— 添加middle标题「🎬 视频播放」 - ✅
chat_image_bubble.dart— 添加middle标题「🖼️ 图片预览」 - ✅
tts_plugin_page.dart—CupertinoSliverNavigationBar添加middle属性,滚动折叠后仍显示标题 - ✅
widget_management_page.dart— 自定义导航替换为标准CupertinoSliverNavigationBar - ✅
source_page.dart— 自定义导航替换为标准CupertinoNavigationBar - ✅
leisure_timeline_page.dart— 自定义 BackdropFilter 导航替换为标准CupertinoNavigationBar
涉及文件:
lib/features/auth/presentation/login_page.dartlib/features/discover/presentation/widgets/chat_bubble/chat_video_bubble.dartlib/features/discover/presentation/widgets/chat_bubble/chat_image_bubble.dartlib/features/mine/settings/presentation/plugin/tts_plugin_page.dartlib/features/widget/presentation/widget_management_page.dartlib/features/source/presentation/source_page.dartlib/features/tool_center/leisure/presentation/pages/leisure_timeline_page.dart
[v6.10.5] - 2026-06-02
🏗️ pubspec.yaml 双模板机制(重大架构变更)
背景: 鸿蒙端和 MacBook Pro 端共用一个 pubspec.yaml,MacBook Pro 端每次 git pull 后需手动替换 82 行本地包引用,容易出错且经常互相覆盖。
核心变更:
- 🏗️
pubspec.yaml拆分为双模板:pubspec.ohos.yaml(鸿蒙端)+pubspec.macos.yaml(MacBook Pro端) - 🔒
pubspec.yaml和pubspec.lock加入.gitignore,两端都不再提交 - 🛠️ 新增
tools/setup_pubspec.ps1脚本,自动选择平台模板生成pubspec.yaml - 📋 新增三方库变更通知机制:新增依赖必须同时更新两个模板 +
iOS_macOS_Developer_Guide.md
新增文件:
- 📄
pubspec.ohos.yaml— 鸿蒙端模板(使用本地 packages/ 目录) - 📄
pubspec.macos.yaml— MacBook Pro 端模板(使用远程版本号) - 🛠️
tools/setup_pubspec.ps1— 平台模板生成脚本
修改文件:
.gitignore— 新增/pubspec.yaml+/pubspec.lockiOS_macOS_Developer_Guide.md— v7 全面重写 §2 章节(双模板机制 + 变更流程)
迁移指南:
- 鸿蒙端:
.\tools\setup_pubspec.ps1 -Platform ohos→flutter pub get - MacBook Pro端:
.\tools\setup_pubspec.ps1 -Platform macos→flutter pub get
[v6.10.4] - 2026-06-02
🌐 Me页面、缓存管理、账户洞察多语言支持
变更: 为三个核心页面添加完整多语言支持,覆盖项目全部14种语言。
新增翻译类型:
- ✅
TAccountInsights— 账户洞察页面翻译类型(26个字段) - ✅
TProfile扩展23个新字段(连续签到、收藏、点赞、每日签到、学习中心、成就中心、每日任务、排行榜、数据统计、我的笔记、内容纠错、我的设备、标签云、个人信息、用户名、昵称、个性签名、未设置、未填写、已设置、审核中、修改用户名、修改昵称) - ✅
TSettingsCache扩展61个新字段(存储空间、数据库、缓存条数、分类统计、各类缓存清理确认对话框、缓存策略、缓存上限、过期天数、离线模式、WiFi预加载、自动同步等)
页面组件修改:
- ✅
user_stats_bar.dart— 积分/连续签到/收藏/笔记/点赞标签国际化 - ✅
quick_action_grid.dart— 10个功能入口标题国际化 - ✅
editable_info_section.dart— 个人信息区域标签国际化 - ✅
user_center_page.dart— 传入翻译参数 - ✅
cache_management_page.dart— 44处硬编码中文替换为翻译字段 - ✅
account_insights_sheet.dart— 全部硬编码中文替换为翻译字段
语言覆盖(14种):
- zh_cn, en, ja, zh_tw, ko, de, it, es, ar, bn, hi, pt, ru, fr
涉及文件:
lib/l10n/types/t_profile.dart— 扩展23个字段lib/l10n/types/t_settings_cache.dart— 扩展61个字段lib/l10n/types/t_account_insights.dart— 新建lib/l10n/types/t_root.dart— 注册accountInsightslib/l10n/types/t.dart— 导出新类型lib/l10n/translation_io_service.dart— 更新_importProfile和T构造lib/l10n/languages/*.dart— 14个语言文件更新
[v6.10.3] - 2026-06-02
🌐 多语言翻译字段补全
问题: 新增 roleNative(原生栈)和7个分发渠道翻译字段后,10个非中英语言文件缺少这些字段导致编译 Error。
修复方案:
- ✅ 10个语言文件(es, fr, it, pt, ru, ar, hi, bn, ko, ja, zh_tw, de)补全8个 TAbout 字段
- ✅
roleNative— 各语言原生栈翻译 - ✅
distributionChannel— 分发渠道标题 - ✅
distAndroid/distIOS/distMacOS/distHarmony/distWeb/distWindows— 各平台分发说明 - ✅ fr.dart 双引号 lint 修复
涉及文件:
lib/l10n/languages/es.dart— 西班牙语lib/l10n/languages/fr.dart— 法语lib/l10n/languages/it.dart— 意大利语lib/l10n/languages/pt.dart— 葡萄牙语lib/l10n/languages/ru.dart— 俄语lib/l10n/languages/ar.dart— 阿拉伯语lib/l10n/languages/hi.dart— 印地语lib/l10n/languages/bn.dart— 孟加拉语lib/l10n/languages/ko.dart— 韩语lib/l10n/languages/ja.dart— 日语lib/l10n/languages/zh_tw.dart— 繁体中文lib/l10n/languages/de.dart— 德语
[v6.10.2] - 2026-06-02
🔐 二维码扫码登录自动跳转
问题: Device A 扫描 Device B(登录页)的二维码后,Device A 显示"扫码成功"但 Device B 无响应,不会自动登录。
根因: 生成二维码后缺少轮询/WebSocket 监听机制,无法感知扫码确认状态变化。
修复方案:
- ✅
qrcode_login_provider.dart— 新增waiting/scanned/logging步骤,生成二维码后自动启动 HTTP 轮询(3秒间隔) + WebSocket 双通道监听 - ✅ 收到
confirmed+token后自动调用AuthService.tokenLogin(token)完成登录 - ✅
qrcode_ws_service.dart— 处理 confirmed 状态携带 token 的推送,终态自动取消订阅 - ✅
qrcode_login_page.dart— 新增状态指示器(等待扫码/已扫码/正在登录),登录成功后自动跳转首页 - ✅ 切换 Tab / 退出页面时自动停止轮询,防止资源泄漏
涉及文件:
features/auth/providers/qrcode_login_provider.dart— 核心轮询+自动登录逻辑features/auth/services/qrcode_ws_service.dart— WS终态自动取消订阅features/auth/presentation/qrcode_login_page.dart— UI状态指示+自动跳转
[v6.10.1] - 2026-06-02
🐛 修复 iOS 离线模式 Syncfusion Chart 崩溃
问题: 点击"离线模式"或导航到含图表页面时,Syncfusion Chart 在 build/layout 阶段调用 markNeedsLayout,导致 "build during layout" 错误,App 卡死/闪退。
根因: Syncfusion Flutter Charts 已知 Bug — ChartSeriesRenderer.markNeedsLayout 在 widget 树构建期间被调用,违反 Flutter 渲染协议。
修复方案:
- ✅ 增强
DeferredBuilder— 添加RepaintBoundary隔离重绘 + 可选placeholder参数 - ✅ 全项目 21个文件、约35处 Syncfusion 图表全部用
DeferredBuilder包裹,延迟到postFrameCallback渲染 - ✅ 所有图表系列补齐
animationDuration: 0,防止动画触发markNeedsLayout
涉及文件:
shared/widgets/containers/deferred_builder.dart— 增加 RepaintBoundary + placeholderfeatures/mine/user_center/— learning_charts, learning_center_page, coin_log_page, learning_progress_pagefeatures/tool_center/statistics/— learning_stats_tab, coin_stats_tab, favorite_stats_tab, statistics_pagefeatures/reading_report/— trend_chartfeatures/file_transfer/— transfer_speed_chart, transfer_stats_pagefeatures/mine/achievement/— achievement_pagefeatures/check/— check_pagefeatures/discover/— readlater_stats_pagefeatures/home/— history_page, favorite_pagefeatures/tool_center/leisure/— leisure_settings_sectionsfeatures/mine/settings/— data_management_page, translate_plugin_page, permission_management_page
[v6.10.0] - 2026-06-02
🏗️ 架构优化 + 灵动岛增强 + Lint规则 + 应用图标 + 引导页协议多语言
0. 协议页软件著作权证书图片 📜:
- 🔄 协议内容"2.1 平台版权"→"2.1 软件著作权"(中文+英文同步修改)
- ✅ 新增
WatermarkedCopyrightImage组件 — 展示软件著作权证书图片 - ✅ 对角线"闲言"水印覆盖(CustomPaint + 旋转文字)
- ✅ 点击图片弹出全屏查看(InteractiveViewer 支持缩放)
- ✅ 通用协议页 + 引导页协议页 均支持图片展示
- ✅ 图片右上角全屏提示标签
1. 引导页协议多语言修复 🌐:
- 🐛 修复引导页协议内容始终显示中文的问题
- ✅
AgreementData.getContent/getUpdateDate传入当前语言ID - ✅
agreementType.title→agreementType.titleFor(languageId)显示本地化标题 - ✅
_parseChapters章节解析兼容英文罗马数字编号(I. II. III. / Zero.) - ✅ 新增
_localeToLanguageId方法将 Flutter Locale 映射为协议语言ID - ✅ 支持14种语言的协议内容、标题、更新日期自动切换
1. MacosPlatformService 统一 🏗️:
- 🔄 分散在多文件的 MethodChannel 统一为
MacosPlatformService - 🔄 通道名
com.xianyan.theme→com.xianyan.macos - 🔄
MacosTitleBarService标记 @Deprecated,桥接到新服务 - ✅ Swift 端扩展为 10 个方法处理器(主题/窗口/标题栏/全屏/触觉等)
2. 二维码 WebSocket 长连接推送 🌐:
- ✅ 新增
QrcodeWsService— WebSocket 推送服务(心跳25秒/指数退避重连) - ✅
QrcodeLoginProvider重构为双通道架构(WS优先 + HTTP轮询降级) - ✅ 新增
qrcode_ws_relay.dart— shelf_web_socket 中继服务器 - ✅ PHP 后端
_notifyWsRelay()— cURL 通知 WS 中继
3. RSS 全文阅读增强 📖:
- ✅
RssService.fetchFullText()— 简易 Readability 算法 - ✅
RssReaderPage阅读模式 — 全文内容 + 图片画廊 - ✅
RssFullTextResult数据类
4. 灵动岛增强 — 倒计时聚焦模式 ⏰:
- ✅
LiveActivityService— 新增startCountdownActivity/updateCountdownActivity/endCountdownActivity - ✅
CountdownNotifier— 集成灵动岛聚焦模式(focusEvent/unfocusEvent) - ✅
LiveActivityProvider— 补充updateCountdownActivity/endCountdownActivity - ✅
CountdownPageUI — 灵动岛聚焦横幅 + 卡片铃铛按钮 + 操作菜单 - ✅
_activeType跟踪 — 类型切换时自动结束旧活动
5. 自定义 Lint 规则 📏:
- ✅ 新增
tools/xianyan_lint/自定义 lint 包 - ✅
double_angle_brackets— 检测双书名号《《 - ✅
hardcoded_color— 检测非主题系统硬编码颜色 - ✅
hardcoded_chinese— 检测UI层硬编码中文(默认关闭) - ✅
analysis_options.yaml— 新增 custom_lint 规则配置
6. 应用图标和名称 🎨:
- ✅ iOS/macOS 应用名称改为中文「闲言」
- ✅ iOS
CFBundleDisplayName→ 闲言 - ✅ macOS 新增
CFBundleDisplayName→ 闲言 - ✅ 全平台图标更新(从
assets/templates/resized/复制) - ✅ iOS 小组件图标补全
- ✅ Web 图标更新
修改文件
lib/core/services/device/macos_platform_service.dart— 新建统一服务lib/core/services/ui/macos_title_bar_service.dart— @Deprecated桥接macos/Runner/MainFlutterWindow.swift— 统一通道+10方法lib/app/app.dart— 引用新服务lib/features/auth/services/qrcode_ws_service.dart— 新建WS服务lib/features/auth/providers/qrcode_login_provider.dart— 双通道重构docs/toolsapi/scripts/qrcode_ws_relay.dart— 新建WS中继docs/toolsapi/application/api/controller/UserSecurity.php— WS通知lib/features/discover/services/rss_service.dart— 全文提取lib/features/discover/presentation/pages/tool/rss_reader_page.dart— 阅读模式lib/core/services/device/live_activity_service.dart— 倒计时活动lib/core/services/device/live_activity_provider.dart— 补充方法lib/features/countdown/providers/countdown_provider.dart— 灵动岛集成lib/features/countdown/presentation/countdown_page.dart— 灵动岛UItools/xianyan_lint/— 新建自定义lint包analysis_options.yaml— lint规则配置pubspec.yaml— 新增xianyan_lint依赖ios/Runner/Info.plist— 中文名称macos/Runner/Info.plist— 中文名称+CFBundleDisplayNameios/Runner/Assets.xcassets/AppIcon.appiconset/— 图标更新macos/Runner/Assets.xcassets/AppIcon.appiconset/— 图标更新ios/XianyanWidget/Assets.xcassets/AppIcon.appiconset/— 小组件图标web/icons/— Web图标更新
[v6.9.51] - 2026-06-01
🔧 修复 MacBook Pro 端 iOS/macOS 构建报错
背景: MacBook Pro 端 flutter build macos 和 flutter build ios --no-codesign 均失败,根因是 win32 版本冲突和 Swift 兼容性问题。
1. 修复 macOS 构建:win32 6.x 版本冲突 🔧:
- 🔧
pubspec.yaml—file_picker: ^11.0.0升级为file_picker: ^12.0.0-beta.5(12.x 兼容 win32 6.x) - 🔧
pub cache补丁 —quill_native_bridge_windows 0.0.2的 win32 5.x API 迁移到 6.x:OpenClipboard(NULL) == FALSE→OpenClipboard(null).error.isErrorCloseClipboard()/EmptyClipboard()/IsClipboardFormatAvailable()→Win32Result<bool>检查GetClipboardData()→Win32Result<HANDLE>,HANDLE → HGLOBAL 类型转换GlobalAlloc/GlobalLock/GlobalUnlock/GlobalFree→Win32Result<T>检查SetClipboardData(id, handle.address)→SetClipboardData(id, HANDLE(handle))TEXT('ms-photos:')→'ms-photos:'.toPcwstr()RegisterClipboardFormat→Win32Result<int>检查ShellExecute(NULL, ...)→ShellExecute(null, ...),nullptr→null(PCWSTR? 类型兼容)
2. 修复 iOS 构建:flutter_vibrate Swift 编译错误 🔧:
- 🔧
pub cache补丁 —SwiftVibratePlugin.swift中TARGET_OS_SIMULATOR在 Xcode 16+/Swift 6 中不可用private let isDevice = TARGET_OS_SIMULATOR == 0→#if targetEnvironment(simulator)条件编译
3. iOS 构建缓存清理 🧹:
- 🧹
flutter clean+ 重新flutter build ios --no-codesign解决FilePickerPlugin模块冲突(缓存残留)
构建验证:
- ✅
flutter build macos— 成功 (200.5MB) - ✅
flutter build ios --no-codesign— 成功 (102.6MB)
⚠️ pub cache 补丁说明:
quill_native_bridge_windows和flutter_vibrate的补丁位于~/.pub-cache/中flutter clean或flutter pub cache repair后需重新应用补丁- 补丁脚本和详细说明见
iOS_macOS_Developer_Guide.md§2.6
修改文件
pubspec.yaml— file_picker 升级到 12.xiOS_macOS_Developer_Guide.md— 新增 §2.6 pub cache 补丁说明
pub cache 补丁文件(不在项目仓库中)
~/.pub-cache/hosted/pub.dev/quill_native_bridge_windows-0.0.2/lib/quill_native_bridge_windows.dart~/.pub-cache/hosted/pub.dev/quill_native_bridge_windows-0.0.2/lib/src/clipboard_html_format.dart~/.pub-cache/git/fluttertpc_flutter_vibrate-*/ios/Classes/SwiftVibratePlugin.swift
🖥️ MacBook Pro 端 bitsdojo_window → window_manager 迁移
依赖变更:
- 🔄
bitsdojo_window ^0.1.6→window_manager ^0.5.1桌面端窗口管理库替换 - 🔄
pubspec.yaml所有本地包引用(path: packages/xxx)替换为远程版本号(MacBook Pro 端适配) - 🔄
dependency_overrides精简为仅保留版本号覆盖(移除所有path: packages/xxx条目)
代码迁移:
- 🔧
lib/main.dart—doWhenWindowReady+appWindow→windowManager.ensureInitialized()+WindowOptions+waitUntilReadyToShow - 🔧
lib/core/layout/adaptive_nav_bar.dart—WindowTitleBarBox+MoveWindow→GestureDetector+windowManager.startDragging();appWindow.minimize/maximizeOrRestore/close→windowManager.minimize/maximize/unmaximize/close
文档更新:
- 📝
iOS_macOS_Developer_Guide.mdv5 — 标记 bitsdojo_window 迁移完成
修改文件
pubspec.yamllib/main.dartlib/core/layout/adaptive_nav_bar.dartiOS_macOS_Developer_Guide.md
[v6.9.49] - 2026-06-01
🌐 6页面全量多语言支持(14种语言)
新增翻译模块:
- 📁
t_account_settings.dart— 账户设置页面翻译(18个key) - 📁
t_data_management.dart— 数据管理页面翻译(33个key) - 📁
t_source.dart— 句子来源页面翻译(40个key) - 📁
t_favorites.dart— 我的收藏页面翻译(68个key) - 📁
t_offline.dart— 离线模式页面翻译(67个key)
多语言替换页面:
- 🌐
account_settings_page.dart— 账户设置(19处硬编码→t.accountSettings.xxx) - 🌐
data_management_page.dart— 数据管理(33处硬编码→t.dataManagement.xxx) - 🌐
source_page.dart— 句子来源(36处硬编码→t.source.xxx) - 🌐
favorite_page.dart— 我的收藏(55处硬编码→t.favorites.xxx) - 🌐
offline_page.dart— 离线模式(46处硬编码→t.offline.xxx) - 🌐
profile_page.dart— 个人中心(修复废弃getter类型冲突)
语言文件更新(14种):
- zh_CN / en / zh_TW / ja / ko / fr / de / es / ru / it / pt / ar / bn / hi
基础设施修复:
- 🔧
t_root.dart— 删除与新字段冲突的废弃getter(accountSettings/offlineMode) - 🔧
translation_io_service.dart— 补全5个新模块的fallback参数 - 🔧
profile_page.dart/general_settings_page.dart— 修复t.dataManagement类型错误(String→TDataManagement)
修改文件
lib/l10n/types/t_account_settings.dart— 新建lib/l10n/types/t_data_management.dart— 新建lib/l10n/types/t_source.dart— 新建lib/l10n/types/t_favorites.dart— 新建lib/l10n/types/t_offline.dart— 新建lib/l10n/types/t_root.dart— 注册5个新模块lib/l10n/types/t.dart— 导出5个新模块lib/l10n/languages/*.dart— 14个语言文件更新lib/l10n/translation_io_service.dart— 补全参数lib/features/mine/settings/presentation/account/account_settings_page.dartlib/features/mine/settings/presentation/data_management_page.dartlib/features/source/presentation/source_page.dartlib/features/home/presentation/favorite_page.dartlib/features/home/presentation/providers/offline_page.dartlib/features/mine/profile/presentation/profile_page.dartlib/features/mine/settings/presentation/general/general_settings_page.dart
[v6.9.48] - 2026-06-01
🏗️ 句子详情面板深度重构(15项改进实施)
架构重构:
- 🏗️ 新增
sentence_detail_provider.dart— Riverpod Notifier 管理详情/TTS/推荐状态,消除 prop drilling - 🏗️
sentence_detail_content.dart改为 ConsumerWidget,通过ref.watch(sentenceDetailProvider)读取状态 - 🏗️
sentence_detail_actions.dart删除showTtsPlayer/onToggleTts/feedId/targetType/onClosePanel参数,改用 Provider + FeedIdUtils 计算 - 📁 新增
sentence_detail_related.dart— 相关推荐组件(骨架屏加载态 + 推荐卡片列表 + 点击导航) - 🔑 新增
detailCardKeyProvider— RepaintBoundary 截图 Key,用于分享图片
Bug 修复:
- 🐛 修复点赞 Toast 反转 Bug:
sentence.isLiked先保存wasLiked再调用toggleLike,Toast 消息与实际操作一致 - 🐛 收藏 Toast 同步修复:
wasFavorited先保存再toggleFavorite
新功能:
- ✨ TTS 播放器增加关闭按钮(Stack + Positioned 圆形 X 按钮,点击停止朗读并隐藏播放器)
- ✨ 相关推荐功能:调用
FeedService.fetchRelatedRecommend展示同类型内容,含骨架屏加载态 - ✨ 句子卡片分享图片:RepaintBoundary 截图 → PNG → share_plus 系统分享,失败降级为文本分享
- ✨ 加载失败重试 UI:错误状态显示重试按钮,调用 Provider
retryLoad方法
UI/UX 增强:
- 🎨 AnimatedSwitcher 包裹句子卡片,加载→内容→错误状态平滑过渡
- 🎨 AnimatedSize 包裹 TTS 播放器,展开/收起动画
- 🎨 相关推荐区域 AnimatedOpacity 淡入效果
- 🎨 深色/浅色主题差异化:句子卡片渐变 alpha、作者行渐变色跟随主题
- ♿ Semantics 无障碍:图片
semanticsLabel、SelectableTextsemanticsLabel
代码质量:
- 🧹 硬编码间距收敛:
SizedBox(width: 8)→AppSpacing.sm,SizedBox(height: 4)→AppSpacing.xs等 - 🧹 删除
_showTagDialog未使用方法 - 🧹
feed_model.dartimport 清理
修改文件
lib/features/home/presentation/panels/sentence_detail_provider.dart— 新建lib/features/home/presentation/panels/sentence_detail_related.dart— 新建lib/features/home/presentation/panels/sentence_detail_panel.dart— 重构lib/features/home/presentation/panels/sentence_detail_content.dart— 重构lib/features/home/presentation/panels/sentence_detail_actions.dart— 重构
[v6.9.47] - 2026-06-01
🏗️ 句子详情面板文件拆分重构
变更说明:
- 🏗️
sentence_detail_panel.dart(1252行)拆分为3个文件,每个文件职责单一 - 📁
sentence_detail_panel.dart(267行)— 主面板协调器:状态管理、DragTarget拖拽、数据加载、面板头部 - 📁
sentence_detail_content.dart(~480行)— 内容展示:来源行、统计标签、句子卡片、图片预览、作者行、摘要框、HTML原文框、全屏图片查看器 - 📁
sentence_detail_actions.dart(~380行)— 操作按钮:快捷操作、二级操作、主要操作、危险操作、对话框、面板操作按钮组件
重构优化:
- ✅
_closePanel()方法提取,供面板头部和危险操作共用 - ✅
_hasImage()/_hasHtmlContent()改为 getter,语义更清晰 - ✅
_buildPanelHeader签名简化,移除未使用的context参数 - ✅
feedId/targetType预计算传递,避免重复计算 - ✅ 移除不必要的
material.dart导入 - ✅ Dart analyze 零问题通过
修改文件
lib/features/home/presentation/panels/sentence_detail_panel.dart— 精简为协调器lib/features/home/presentation/panels/sentence_detail_content.dart— 新建,内容展示lib/features/home/presentation/panels/sentence_detail_actions.dart— 新建,操作按钮
[v6.9.46] - 2026-06-01
🐛 修复多项运行时报错
1. 修复 QuickActions 设置快捷方式 PlatformException 🐛:
- 🐛
quick_actions_service.dart—setShortcutItems()未 await 且无 try-catch,Android 端不支持时抛出PlatformException未被捕获 - ✅ 改为
await+try-catch,PlatformException降级为Log.w警告日志
2. 修复点击老用户登录按钮 SegmentedControl 断言失败 🐛:
- 🐛
login_page.dart— 从分段控制器移除 legacy tab 后,_loginMode=legacy导致groupValue不在children.keys中 - ✅ 新增
_segmentMode变量独立跟踪分段控制器选中值,legacy 模式不影响分段控制器显示
3. 优化今日诗词 SDK 网络错误日志级别 📝:
- 📝
jinrishici_sdk_service.dart—DioException从Log.e降级为Log.w,网络中断不再显示为严重错误 - 📝 非200状态码补充
Log.w日志
修改文件
lib/core/services/device/quick_actions_service.dartlib/features/auth/presentation/login_page.dartlib/core/services/data/jinrishici_sdk_service.dart
[v6.9.45] - 2026-06-01
🐛 修复主页下拉provider修改报错 & 去除按钮emoji
1. 修复主页下拉时 "Tried to modify a provider while the widget tree was building" 报错 🐛:
- 🐛
home_tool_center.dart—_FloatingPanelState.initState()中同步调用refreshFromService()修改 provider state,改为Future(() {...})延迟执行 - 🐛
home_sentence_list_section.dart—SliverChildBuilderDelegatebuilder 中直接调用onLoadMore()和onCheckPreload(),改为Future(() {...})延迟执行,避免在 build 阶段修改 provider
2. 去除创作卡片和编辑此句按钮左侧 emoji 🧹:
- 🧹
home_action_buttons.dart— 移除创作卡片 🎨 和编辑此句 📝 emoji - 🧹
sentence_detail_sheet.dart— 移除创作卡片 🎨 emoji - 🧹
sentence_detail_panel.dart— 移除编辑此句 ✏️ emoji
修改文件
lib/features/home/presentation/home_tool_center.dartlib/features/home/presentation/widgets/home_sentence_list_section.dartlib/features/home/presentation/widgets/home_action_buttons.dartlib/features/home/presentation/providers/sentence_detail_sheet.dartlib/features/home/presentation/panels/sentence_detail_panel.dart
[v6.9.44] - 2026-06-01
🔄 登录页面:老用户登录按钮替换微信登录位置
变更说明:
- 🔄 将微信登录按钮替换为老用户登录按钮,放置在社交登录区域
- 🎨 老用户登录按钮使用次要色(secondary color #FF6B6B)显示,与主色调形成视觉区分
- ✅ 点击老用户登录按钮可正常切换到老用户登录子页面
- 🧹 从分段控制器(SegmentedControl)中移除老用户登录 tab,避免重复入口
- 🛠️
_buildSocialButton方法新增accentColor参数,支持自定义强调色
修改文件
lib/features/auth/presentation/login_page.dart— 替换微信按钮为老用户按钮,移除分段控制legacy tab,扩展_buildSocialButton
[v6.9.43] - 2026-06-01
🔧 修复鸿蒙端资源键名冲突与未定义引用
背景: 鸿蒙端编译时多个 HAR 包定义了相同的 string 资源键名(page_show、module_desc),导致 CompileResource 失败。同时部分包引用了未定义的 string 资源(nfc_tag_reason、wifi_info_reason 等),以及声明了系统级权限导致安装失败。
1. 修复 page_show 键名冲突 🔧:
- 🔧
connectivity_plus→connectivity_plus_page_show - 🔧
device_info_plus→device_info_plus_page_show - 🔧
flutter_local_notifications→flutter_local_notifications_page_show - 🔧
flutter_webrtc→flutter_webrtc_page_show - 🔧
local_auth_ohos→local_auth_ohos_page_show - 🔧
mobile_scanner→mobile_scanner_page_show - 🔧
package_info_plus→package_info_plus_page_show
2. 修复 module_desc 键名冲突 🔧:
- 🔧
gal→gal_module_desc - 🔧
live_activities→live_activities_module_desc - 🔧
network_info_plus_ohos→network_info_plus_ohos_module_desc(同步更新 module.json5 引用) - 🔧
permission_handler_ohos→permission_handler_ohos_module_desc - 🔧
speech_to_text→speech_to_text_module_desc - 🔧
workmanager_ohos→workmanager_ohos_module_desc
3. 修复未定义 string 资源引用 🐛:
- 🐛
flutter_nfc_kit— 移除$string:nfc_tag_reason引用和NFC_TAG系统级权限 - 🐛
flutter_blue_plus_ohos— 移除未定义的$string:bluetooth_reason/$string:location_reason引用 - 🐛 entry base string.json — 补充缺失的
permission_storage_reason
4. 移除各包中的系统级权限声明 🗑️:
- 🗑️
nearby_service— 移除SET_WIFI_INFO(system_core) /GET_WIFI_INFO(system_basic) - 🗑️
wifi_iot— 移除GET_WIFI_INFO(system_basic) /SET_WIFI_INFO(system_core) - 🗑️
flutter_nfc_kit— 移除NFC_TAG(system_core) - 🗑️
flutter_local_notifications— 移除PUBLISH_AGENT_REMINDER - 🗑️
network_info_plus_ohos— 移除GET_WIFI_INFO(system_basic)
修改文件
packages/connectivity_plus/ohos/— 3个 string.jsonpackages/device_info_plus/ohos/— 3个 string.jsonpackages/flutter_local_notifications/ohos/— 3个 string.json + module.json5packages/flutter_webrtc/ohos/— 3个 string.jsonpackages/local_auth_ohos/ohos/— 3个 string.jsonpackages/mobile_scanner/ohos/— 3个 string.jsonpackages/package_info_plus/ohos/— 3个 string.jsonpackages/gal/ohos/— 1个 string.jsonpackages/live_activities/ohos/— 1个 string.jsonpackages/network_info_plus_ohos/ohos/— 1个 string.json + module.json5packages/permission_handler_ohos/ohos/— 3个 string.jsonpackages/speech_to_text/ohos/— 1个 string.jsonpackages/workmanager_ohos/ohos/— 1个 string.jsonpackages/flutter_nfc_kit/ohos/— module.json5packages/flutter_blue_plus_ohos/ohos/— module.json5packages/nearby_service/ohos/— module.json5packages/wifi_iot/ohos/— module.json5ohos/entry/src/main/resources/base/element/string.json— 补充 permission_storage_reason
[v6.9.42] - 2026-06-01
🐛 修复 DataSyncEventBus 单例 Hot Restart 失效问题
背景: DataSyncEventBus 是全局单例(static final),在 App.dispose 中调用 dispose() 会关闭内部 StreamController。但 Flutter Hot Restart 时静态变量不会重新创建,导致单例已关闭但不会重建,事件总线完全失效。
1. 移除不当 dispose 调用 🐛:
- 🐛
app.dart— 移除DataSyncEventBus.instance.dispose(),App 退出时进程即将终止,无需手动释放单例资源
2. 增强 DataSyncEventBus 防御性 🛡️:
- 🛡️
_ensureAlive()— 在notify/on/all调用前检查控制器是否已关闭,若已关闭则自动重建 - 🛡️
dispose()— 改为仅标记_disposed状态,不再真正关闭StreamController,防止单例状态不一致 - 🛡️
isDisposedgetter — 暴露释放状态,便于外部检查
修改文件
lib/app/app.dart— 移除 DataSyncEventBus.instance.dispose()lib/core/sync/data_sync_event_bus.dart— 增加防御性检查与自动重建机制
🔒 鸿蒙端权限审计与修复
背景: 鸿蒙端 module.json5 中声明了多个系统级权限(system_basic / system_core),普通第三方应用无法授予,导致 HAP 安装失败(code:9568289)。
1. 移除鸿蒙端系统级权限 🗑️:
- 🗑️
ohos.permission.PASTEBOARD→ 不存在,改为READ_PASTEBOARD后发现仍是 system_basic,最终移除 - 🗑️
ohos.permission.NOTIFICATION_AGENT_CONTROLLER→ system_core,移除(通知通过运行时API申请) - 🗑️
ohos.permission.NOTIFICATION_CONTROLLER→ system_basic,移除 - 🗑️
ohos.permission.READ_PASTEBOARD→ system_basic,移除 - 🗑️
ohos.permission.GET_WIFI_INFO→ system_basic,移除 - 🗑️
ohos.permission.SET_WIFI_INFO→ system_core,移除 - 🗑️
ohos.permission.NFC_TAG→ system_core,移除 - 🗑️
ohos.permission.GET_BUNDLE_INFO→ system_basic,移除 - 🗑️
ohos.permission.FILE_ACCESS_PERSIST→ system_core,移除
2. 保留鸿蒙端普通权限 ✅:
- ✅
INTERNET/GET_NETWORK_INFO/VIBRATE— normal 级别 - ✅
CAMERA/MICROPHONE/LOCATION/APPROXIMATELY_LOCATION/ACCESS_BLUETOOTH/READ_MEDIA/WRITE_MEDIA— user_grant 级别
3. Android/iOS/macOS 端权限审计结论 ✅:
- ✅ Android 端所有权限均为 normal 或 user_grant 级别,无需移除
- ✅ iOS 端 NFC/蓝牙/相机/麦克风/相册权限声明合理,无需移除
- ✅ macOS 端 entitlements 仅含网络/文件访问,无需移除
4. 被移除鸿蒙权限的代码使用场景 📋:
| 权限 | 代码使用场景 | Android/iOS替代方案 |
|---|---|---|
| NFC_TAG | nfc_pairing_service.dart NFC触碰配对 |
Android NFC normal权限,iOS NFCReaderUsageDescription |
| GET_WIFI_INFO | localsend_service.dart WiFi设备发现 |
Android ACCESS_WIFI_STATE normal权限 |
| SET_WIFI_INFO | 无直接使用 | 无需替代 |
| READ_PASTEBOARD | clipboard_monitor_service.dart 剪贴板读取 |
Flutter Clipboard.getData 无需特殊权限 |
| NOTIFICATION_* | local_notification_service.dart 本地通知 |
Android 通知渠道运行时申请,iOS UNUserNotificationCenter |
| GET_BUNDLE_INFO | device_info_service.dart 应用信息 |
package_info_plus 无需特殊权限 |
| FILE_ACCESS_PERSIST | 文件访问 | file_picker / image_picker 标准 API |
修改文件
ohos/entry/src/main/module.json5— 移除6个系统级权限
[v6.9.41] - 2026-06-01
🗑️ 移除 Supabase SDK,全面切换自建API
背景: supabase_flutter SDK在项目中并未正式使用,所有引用该SDK的服务均有占位符保护或本地fallback。现移除SDK,缺失接口改用自建API(https://tools.wktyl.com)替代。
1. Flutter端移除 Supabase 🗑️:
- 🗑️ 移除
pubspec.yaml中supabase_flutter: ^2.8.0依赖 - 🗑️ 移除
app_constants.dart中supabaseUrl/supabaseAnonKey常量 - 🗑️ 移除
AndroidManifest.xml中 supabase_flutter 注释 - 🗑️ 更新
agreement_data.dart隐私政策(中/英/日/韩/繁中5语言移除Supabase SDK条款) - 🗑️ 更新
leisure_data_service.dart/font_management_notifier.dart中 Supabase 注释
2. 重写5个服务文件(Supabase → ApiClient) 🔄:
- 🔄
readlater_ai_service.dart— AI摘要改用 POST/api/readlater/generateSummary等4个接口 - 🔄
readlater_sync_service.dart— 云端同步改用 POST/GET/api/readlater/upload|download|delete|fullSync - 🔄
readlater_collab_service.dart— 协作服务改用自建API,Realtime订阅改为轮询机制 - 🔄
font_sync_service.dart— 字体列表改用 GET/api/font_sync/list - 🔄
plugin_update_service.dart— 插件更新改用 POST/api/plugin_update/checkOne等4个接口
3. PHP后端新增接口 🆕:
- 🆕
Readlater.php— 稍后读同步(4)+协作(6)+AI摘要(4)+安装(1) = 15个接口 - 🆕
FontSync.php— 字体同步(1)+安装(1) = 2个接口 - 🆕
PluginUpdate.php— 插件更新(4)+安装(1) = 5个接口 - 🆕 自动建表(
_initialize中CREATE TABLE IF NOT EXISTS) - 🆕 CORS处理 + OPTIONS预检
4. Admin管理后台(FastAdmin CRUD) 🆕:
- 🆕
ReadlaterMessage— 稍后读消息管理(控制器+模型+验证器+语言包) - 🆕
ReadlaterSharedList— 共享列表管理 - 🆕
FontSync— 字体管理(含分类/启用状态列表) - 🆕
PluginMeta— 插件元信息管理(含平台/启用状态列表) - 🆕
PluginUserSetting— 插件用户设置管理
5. 文档更新 📝:
- 📝 新增
API_READLATER_FONT_PLUGIN_DOC.md— Readlater/FontSync/PluginUpdate接口文档 - 📝 更新
API_ADMIN_DOC.md— 新增27-31章节(稍后读/字体/插件管理) - 📝 更新服务端
privacy-policy.html— 移除Supabase SDK条款
6. 服务器部署 ✅:
- ✅ 25个文件上传至
tools.wktyl.com服务器 - ✅ 17/19接口测试通过(
plugin_update/checkOne带参数时被Nginx拦截,待后续处理)
⚠️ 已知问题:
/api/plugin_update/checkOne带查询参数时Nginx返回404(PHP直接运行正常),需在宝塔面板添加Nginx白名单
修改文件
pubspec.yaml— 移除supabase_flutterlib/core/constants/app_constants.dart— 移除Supabase常量lib/core/services/readlater/readlater_ai_service.dart— 重写lib/core/services/readlater/readlater_sync_service.dart— 重写lib/core/services/readlater/readlater_collab_service.dart— 重写lib/features/mine/settings/services/font_sync_service.dart— 重写lib/features/mine/settings/services/plugin_update_service.dart— 重写lib/features/tool_center/leisure/services/leisure_data_service.dart— 更新注释lib/features/agreements/data/agreement_data.dart— 移除Supabase条款lib/features/mine/settings/presentation/font_management_notifier.dart— 更新注释android/app/src/main/AndroidManifest.xml— 更新注释docs/toolsapi/application/api/controller/Readlater.php— 新增docs/toolsapi/application/api/controller/FontSync.php— 新增docs/toolsapi/application/api/controller/PluginUpdate.php— 新增docs/toolsapi/application/route.php— 新增路由docs/toolsapi/application/admin/controller/— 5个新控制器docs/toolsapi/application/admin/model/— 5个新模型docs/toolsapi/application/admin/validate/— 5个新验证器docs/toolsapi/application/admin/lang/zh-cn/— 5个新语言包docs/toolsapi/agreements/privacy-policy.html— 移除Supabasedocs/toolsapi/docs/API_READLATER_FONT_PLUGIN_DOC.md— 新增docs/toolsapi/docs/API_ADMIN_DOC.md— 更新
[v6.9.40] - 2026-06-01
🛠️ 开发工具:多语言翻译覆盖率检测Python脚本
背景: 现有Dart实现的翻译覆盖率检测依赖Flutter运行时,无法在CI/CD中独立运行。需要Python脚本实现相同功能,支持命令行参数和自动修复。
1. 翻译覆盖率检测脚本 🆕:
- 🆕
Scripts/check_translation_coverage.py— CI/CD多语言翻译覆盖率自动检测 - ✅ 扫描 lib/l10n/languages/ 目录下14个语言文件
- ✅ 以 zh_cn.dart 为基准,递归解析嵌套Dart类型结构(THome→THomeBase/TSentenceDetail/TReadLater等)
- ✅ 检测缺失键(目标文件中不存在的键)和空值键(存在但值为空的键)
- ✅ 输出覆盖率报告:总键数、缺失键数、空值键数、覆盖率百分比、覆盖率排名
- ✅ 缺失/空值键的具体列表(section.field格式)
- ✅
--threshold参数自定义覆盖率阈值(默认80%),低于阈值返回非零退出码 - ✅
--json参数输出JSON格式报告(含ranking、below_threshold等结构化数据) - ✅
--fix参数自动将缺失键用基准语言值填充,添加// TODO: translate标记 - ✅ Windows GBK控制台UTF-8编码兼容
解析策略:
- 字符级解析器跟踪括号深度和section栈,正确处理嵌套构造函数
find_matching_paren函数处理字符串内的括号(避免误匹配)find_constructor_ranges定位每个构造函数的起止位置,用于--fix插入
当前覆盖率数据(1304个基准键):
- zh_CN/zh_TW/ja/ko/ar: 100% | en: 99.9% | de/es/bn: 91.6% | fr/it/pt/ru/hi: 91.6%
新增文件
Scripts/check_translation_coverage.py
[v6.9.39] - 2026-06-01
🧪 协作画布CanvasProvider单元测试 & 🐛 Bug修复
1. CanvasProvider单元测试 🆕:
- 🆕
test/features/file_transfer/collaboration/canvas/canvas_provider_test.dart— 42个测试用例 - ✅ CanvasState初始状态验证(10个字段默认值)
- ✅ setTool/setColor/setWidth工具属性更新
- ✅ startStroke/addPoint/endStroke笔画创建完整流程
- ✅ undo/redo撤销恢复机制(含循环测试、空栈安全)
- ✅ clearCanvas清空画布(含undo/redo栈清空验证)
- ✅ _disposed防护(dispose后microtask不更新状态)
- ✅ joinCanvas/leaveCanvas画布加入离开
- ✅ CanvasState.copyWith(clearCanvasId/clearActiveStroke/部分更新隔离)
- ✅ StrokeType枚举映射(fromId正向/反向/边界)
2. Bug修复 🐛:
- 🔧
leaveCanvas()未清除canvasId/remoteCursors/cursorOpacities/participants - 🔧
CanvasState.copyWith添加clearCanvasId参数支持将canvasId置为null
测试方案说明:
- 使用
TestSignalingService(implements SignalingService + noSuchMethod)替代mocktail - 原因:mocktail的
when()与Riverpod ProviderContainer创建产生"Cannot call when within a stub response"冲突 - CanvasEngine/CanvasSyncService使用真实实例(无外部依赖,纯内存状态管理)
- 通过
sharedSignalingProvider.overrideWithValue()注入测试信令服务
新增文件
test/features/file_transfer/collaboration/canvas/canvas_provider_test.dart
修改文件
lib/features/file_transfer/collaboration/canvas/providers/canvas_provider.dart
[v6.9.38] - 2026-06-01
🛠️ 开发工具:Android配置一致性检查脚本
背景: 之前 shortcuts.xml 中的 extra key 与 quick_actions_android 插件不匹配导致快捷方式失效,需要自动化检查工具防止类似问题
1. Android配置检查脚本 🆕:
- 🆕
Scripts/check_android_config.py— 验证 Android 原生配置与 Flutter 插件一致性 - ✅ 解析 AndroidManifest.xml:权限声明、Activity 配置、IntentFilter、enableOnBackInvokedCallback、queries、WorkManager Receiver
- ✅ 解析 shortcuts.xml:extra key 和 action 与 quick_actions_android 插件常量对比
- ✅ Dart ↔ XML 一致性:ShortcutItem type 与 shortcutId 匹配检查
- ✅ build.gradle.kts 检查:16KB 页面支持、SDK 版本、NDK 配置、签名配置
- ✅ gradle.properties 检查:AndroidX、JVM 内存参数
- ✅ 支持
--verbose详细输出、--jsonJSON 格式报告 - ✅ 总体评分机制(当前项目评分 96/100)
新增文件
Scripts/check_android_config.py
[v6.9.37] - 2026-06-01
✨ 功能新增 & 🎨 UI优化
1. 统一功能分级标准 🆕:
- 🆕
lib/core/services/auth/feature_access_level.dart— 功能访问级别分级标准 - 🆕
FeatureAccessLevel枚举 — localOnly / localWithCloudSync / cloudRequired 三级分类 - 🆕
FeatureAccessConfig类 — 路由访问配置注册表,包含13个路由的分级定义 - 🆕
canAccessWithoutLogin()— 判断路由是否无需登录即可访问 - 🆕
getAccessLevel()— 获取路由的访问级别 - 🆕
getCloudFeatureDescription()— 获取路由的云端功能描述
2. 贡献者头像墙 — 首字占位 🎨:
- 🎨
_ContributorCard— 左侧容器从 emoji 改为名称首字占位头像 - 🎨 背景色使用主题 accent 色 0.12 透明度,文字颜色使用主题 accent 色
- 🎨 英文名取首字母大写,中文名取第一个汉字
- 🗑️
ContributorData移除emoji字段,改为只有name和role两个字段 - 🆕
ContributorData.initialgetter — 智能获取名称首字符 - 📝 贡献者列表和特别感谢列表去掉 emoji 参数
新增文件
lib/core/services/auth/feature_access_level.dart
修改文件
lib/features/mine/profile/presentation/learn_us_sections.dart
[v6.9.36] - 2026-06-01
🐛 Bug修复 & ✨ 功能优化(21项批量修复)
UI修复:
- 🔧 主页"句子广场"和"最新"文本去掉多余的emoji前缀
- 🔧 登录/注册按钮文本下半部分被遮住(minSize→minimumSize: Size.zero)
- 🔧 工具中心底部栏去掉未实现的"编辑布局"按钮
- 🔧 引导页繁体中文国旗改为🇨🇳,语言列表改为可滑动防溢出
- 🔧 编辑器"实验中的功能"改为"Beta"
- 🔧 协作画布无法绘制(_disposed判断逻辑反转修复)
- 🔧 主页下拉面板最近打开页面显示不全(Provider刷新+路由归一化+appGo记录)
多语言支持:
- 🌐 登录/注册页面全面多语言化(新增TAuth翻译类型,14种语言)
- 🌐 发现页面会话流列表多语言化(约100个翻译键)
- 🌐 引导页软件协议多语言化
- 🌐 了解我们页面团队信息多语言化(社交链接按语言切换)
- 🌐 软件信息页面备案信息多语言化+非中文info icon说明
功能优化:
- ✅ 阅读报告页面不登录也能查看本地报告
- ✅ 内容纠错页面:未登录增加邮箱输入框(选填),提交前数学验证码
- ✅ 关于页面"检查更新"和"开源许可"迁移到软件信息页面
- ✅ 协作画布和屏幕共享标记为"开发中"(FeatureFlag+UI badge)
- ✅ 了解我们页面开发者名称中文显示"微风暴工作室"
- ✅ QQ群非中文时显示Telegram链接
- ✅ 贡献者新增特邀测试"广州性感母蟑螂",特别鸣谢新增"Tools/Plugins"
平台修复:
- 🤖 安卓长按桌面图标快捷菜单点击无跳转(shortcuts.xml key修复)
- 🤖 Android 16KB页面大小支持(jniLibs useLegacyPackaging=false)
- 📱 鸿蒙端File类型不匹配修复(ExtendedImage.file→FileImage)
- 📱 鸿蒙端Platform.isOhos→Platform.operatingSystem=='ohos'
服务端更新:
- 📋 FeatureFlag.php新增collaboration_canvas和screen_share条目
[v6.9.35] - 2026-06-01
🛠️ 管理后台 CRUD 模块新增(稍后读/字体/插件)
背景: 为管理后台新增5组 CRUD 模块,用于可视化编辑管理稍后读数据、字体数据和插件数据
1. 稍后读消息管理 (ReadlaterMessage) ✅:
- ✅ controller:
ReadlaterMessage— 搜索字段 id/message_id/user_id - ✅ model: 表名
readlater_messages,时间戳 createtime/updatetime,状态列表 - ✅ validate: user_id/message_id/type 必填验证
- ✅ lang: 8个字段中文翻译
2. 共享列表管理 (ReadlaterSharedList) ✅:
- ✅ controller:
ReadlaterSharedList— 搜索字段 id/name/owner_id - ✅ model: 表名
readlater_shared_lists,时间戳 createtime/updatetime,状态列表 - ✅ validate: name/owner_id 必填验证
- ✅ lang: 5个字段中文翻译
3. 字体管理 (FontSync) ✅:
- ✅ controller:
FontSync— 搜索字段 id/name/font_family - ✅ model: 表名
fonts,分类列表(无衬线/衬线/等宽/展示/手写),启用状态列表 - ✅ validate: name/font_family/download_url 必填验证
- ✅ lang: 18个字段中文翻译
4. 插件元信息管理 (PluginMeta) ✅:
- ✅ controller:
PluginMeta— 搜索字段 id/plugin_id/name - ✅ model: 表名
plugin_meta,平台列表(Android/iOS/Web/鸿蒙),启用状态列表 - ✅ validate: plugin_id/version/name/platform 必填验证
- ✅ lang: 13个字段中文翻译
5. 插件用户设置管理 (PluginUserSetting) ✅:
- ✅ controller:
PluginUserSetting— 搜索字段 id/user_id/platform - ✅ model: 表名
plugin_user_settings,平台列表(Android/iOS/Web/鸿蒙) - ✅ validate: user_id/platform 必填验证
- ✅ lang: 5个字段中文翻译
新增文件(共20个)
docs/toolsapi/application/admin/controller/ReadlaterMessage.phpdocs/toolsapi/application/admin/controller/ReadlaterSharedList.phpdocs/toolsapi/application/admin/controller/FontSync.phpdocs/toolsapi/application/admin/controller/PluginMeta.phpdocs/toolsapi/application/admin/controller/PluginUserSetting.phpdocs/toolsapi/application/admin/model/ReadlaterMessage.phpdocs/toolsapi/application/admin/model/ReadlaterSharedList.phpdocs/toolsapi/application/admin/model/FontSync.phpdocs/toolsapi/application/admin/model/PluginMeta.phpdocs/toolsapi/application/admin/model/PluginUserSetting.phpdocs/toolsapi/application/admin/validate/ReadlaterMessage.phpdocs/toolsapi/application/admin/validate/ReadlaterSharedList.phpdocs/toolsapi/application/admin/validate/FontSync.phpdocs/toolsapi/application/admin/validate/PluginMeta.phpdocs/toolsapi/application/admin/validate/PluginUserSetting.phpdocs/toolsapi/application/admin/lang/zh-cn/readlater_message.phpdocs/toolsapi/application/admin/lang/zh-cn/readlater_shared_list.phpdocs/toolsapi/application/admin/lang/zh-cn/font_sync.phpdocs/toolsapi/application/admin/lang/zh-cn/plugin_meta.phpdocs/toolsapi/application/admin/lang/zh-cn/plugin_user_setting.php
[v6.9.34] - 2026-06-01
📋 备案信息标题修改与多语言说明
背景: 软件信息页面的备案信息标题需改为"APP ICP核准备案号",非中文环境下需增加info icon弹窗说明ICP备案的意义
1. t_about.dart ✅:
- ✅ 新增
icpInfoHint翻译键(备案说明文本,非中文时显示)
2. 14个语言文件 ✅:
- ✅
icpInfo标题统一修改:中文"APP ICP核准备案号"、繁体"APP ICP核準備案號"、英文"APP ICP Filing No."等 - ✅ 新增
icpInfoHint翻译:解释ICP备案是中国大陆的安全保障措施,海外用户可忽略
3. about_shared_widgets.dart ✅:
- ✅
AboutSectionTitle新增可选trailing参数,支持标题右侧自定义组件
4. app_info_sections.dart ✅:
- ✅
IcpSection标题使用t.about.icpInfo(已更新为"APP ICP核准备案号") - ✅ 非中文环境时,标题右侧显示 ℹ️ info icon(
CupertinoIcons.info_circle) - ✅ 点击 icon 弹出
CupertinoAlertDialog显示icpInfoHint说明文本 - ✅ 新增私有组件
_IcpInfoIcon
修改文件
lib/l10n/types/t_about.dartlib/l10n/languages/zh_cn.dart/en.dart/zh_tw.dart/ja.dart/ko.dart/ar.dart/fr.dart/de.dart/es.dart/pt.dart/ru.dart/it.dart/hi.dart/bn.dartlib/features/mine/profile/presentation/about_shared_widgets.dartlib/features/mine/profile/presentation/app_info_sections.dart
[v6.9.33] - 2026-06-01
🌐 会话流列表多语言支持(i18n)
背景: 发现页面会话流相关组件存在大量硬编码中文,需替换为多语言翻译系统,支持14种语言
1. t_chat_flow.dart ✅:
- ✅ 新增约100个翻译键(会话搜索、稍后读、标签/文件夹管理、导出、同步、协作、设备同步、剪贴板监控等)
- ✅ toMap() / fromMap() 同步更新
2. t_common.dart ✅:
- ✅ 新增
copy翻译键
3. 14个语言文件 ✅:
- ✅ zh_cn / en / zh_tw / ja / ko / ar / fr / de / es / pt / ru / it / hi / bn 全部添加新增翻译键
4. 会话流组件多语言替换 ✅:
- ✅
session_search_bar.dart— 搜索占位符、无结果提示、会话/消息分区标题 - ✅
session_row.dart— 置顶/取消置顶、隐藏/取消隐藏(StatelessWidget → ConsumerWidget) - ✅
session_popup_menu.dart— 置顶、备注、已读/未读、免打扰、隐藏、隐藏设置、删除(新增 chatFlowT 参数) - ✅
chat_flow_message_list.dart— 空状态提示(StatelessWidget → ConsumerWidget) - ✅
chat_flow_conversation_mixin.dart— 新建对话标题、占位符、取消/创建按钮 - ✅
chat_flow_send_toast.dart— 发送提示(StatefulWidget → ConsumerStatefulWidget) - ✅
chat_flow_readlater_mixin.dart— 稍后读设置面板所有菜单项、清空确认、统计信息 - ✅
chat_flow_readlater_settings_helper.dart— 标签管理、文件夹管理弹窗(_TagTile/_FolderTile → ConsumerWidget) - ✅
chat_flow_readlater_message_helper.dart— 消息操作菜单、AI摘要、智能标签、归档、导出 - ✅
chat_flow_readlater_sync_helper.dart— 云端同步、AI摘要、共享协作、设备同步、小组件、剪贴板监控
修改文件
lib/l10n/types/t_chat_flow.dartlib/l10n/types/t_common.dartlib/l10n/languages/zh_cn.dart/en.dart/zh_tw.dart/ja.dart/ko.dart/ar.dart/fr.dart/de.dart/es.dart/pt.dart/ru.dart/it.dart/hi.dart/bn.dartlib/features/discover/presentation/widgets/session/session_search_bar.dartlib/features/discover/presentation/widgets/session/session_row.dartlib/features/discover/presentation/widgets/session/session_popup_menu.dartlib/features/discover/presentation/widgets/chat/chat_flow_message_list.dartlib/features/discover/presentation/widgets/chat/chat_flow_conversation_mixin.dartlib/features/discover/presentation/widgets/chat/chat_flow_send_toast.dartlib/features/discover/presentation/widgets/chat/chat_flow_readlater_mixin.dartlib/features/discover/presentation/widgets/chat/chat_flow_readlater_settings_helper.dartlib/features/discover/presentation/widgets/chat/chat_flow_readlater_message_helper.dartlib/features/discover/presentation/widgets/chat/chat_flow_readlater_sync_helper.dart
[v6.9.32] - 2026-06-01
🗑️ 隐私政策:移除Supabase相关内容
背景: 随着客户端从Supabase迁移至自建ApiClient完成,隐私政策文件中不再需要Supabase相关声明
1. agreement_data.dart 🗑️:
- 🗑️ 中文版:移除Supabase Flutter SDK表格行及说明
- 🗑️ 英文版:移除Supabase Flutter SDK表格行
- ♻️ 日文版:第三者SDK标题移除Supabase
- ♻️ 韩文版:제3자 SDK标题移除Supabase
- ♻️ 繁体中文版:第三方SDK标题移除Supabase
2. privacy-policy.html 🗑️:
- 🗑️ 中文版:移除Supabase Flutter SDK表格行及说明
- 🗑️ 英文版:移除Supabase Flutter SDK表格行
修改文件
lib/features/agreements/data/agreement_data.dartdocs/toolsapi/agreements/privacy-policy.html
[v6.9.31] - 2026-06-01
🔄 客户端服务层:5个文件从Supabase迁移至自建ApiClient
背景: 将客户端5个服务文件从 supabase_flutter 依赖迁移至项目已有的 ApiClient(基于Dio),配合v6.9.30新增的服务端API使用
1. readlater_ai_service.dart ♻️:
- ♻️ 移除
supabase_flutter/AppConstants引用 - ♻️
generateSummary()→ POST/api/readlater/generateSummary - ♻️
batchSummarize()→ POST/api/readlater/batchSummarize - ♻️
generateDailySummary()→ POST/api/readlater/dailySummary - ♻️
suggestTags()→ POST/api/readlater/suggestTags - 🗑️ 移除
ensureInitialized()、_currentUserIdgetter - ✅ 保留
applySummary()、getSummary()、_buildContent()不变
2. readlater_sync_service.dart ♻️:
- ♻️ 移除
supabase_flutter/AppConstants引用 - ♻️
uploadMessage()→ POST/api/readlater/upload - ♻️
downloadMessages()→ GET/api/readlater/download - ♻️
fullSync()→ POST/api/readlater/fullSync - ♻️
deleteMessage()→ POST/api/readlater/delete - ♻️ 用户ID改用
SecureStorage.read(SecureKeys.userId) - 🗑️ 移除
ensureInitialized()、_currentUserIdgetter、_tableName - ✅ 保留
SyncResult模型类、getLastSyncTime()、_saveLastSyncTime()、setAutoSync()、getAutoSync()不变
3. readlater_collab_service.dart ♻️:
- ♻️ 移除
supabase_flutter/AppConstants/RealtimeChannel引用 - ♻️
createSharedList()→ POST/api/readlater/createSharedList - ♻️
inviteMember()→ POST/api/readlater/inviteMember - ♻️
shareToSharedList()→ POST/api/readlater/shareMessage - ♻️
getSharedListMessages()→ GET/api/readlater/listMessages - ♻️
getMySharedLists()→ GET/api/readlater/myLists - ♻️
leaveSharedList()→ POST/api/readlater/leaveList - 🔄 Realtime订阅 → 轮询机制:新增
startPolling()、stopPolling()、pollListChanges() - 🗑️ 移除
subscribeToListChanges()、unsubscribeFromListChanges()、ensureInitialized()、_currentUserId - ✅ 保留
SharedReadlaterList模型类、_listChangeControllerStreamController 不变
4. font_sync_service.dart ♻️:
- ♻️ 移除
supabase_flutter/AppConstants/Logger引用 - ♻️
fetchOnlineFonts()→ GET/api/font_sync/list - 🗑️ 移除
_supabasegetter、_client字段、占位符保护检查 - ✅ 保留
OnlineFontEntry模型类、_localFallback()方法不变
5. plugin_update_service.dart ♻️:
- ♻️ 移除
supabase_flutter/AppConstants引用 - ♻️
checkUpdate()→ GET/api/plugin_update/check - ♻️
checkAllUpdates()→ GET/api/plugin_update/checkAll - ♻️
syncPluginState()→ POST/api/plugin_update/syncState - ♻️
loadRemotePluginState()→ GET/api/plugin_update/loadState - ♻️ 用户ID改用
SecureStorage.read(SecureKeys.userId) - 🗑️ 移除
_getSupabase()方法、_client字段、占位符保护检查 - ✅ 保留
PluginMeta、PluginUpdateResult模型类、_compareVersions()方法不变
修改文件
lib/core/services/readlater/readlater_ai_service.dartlib/core/services/readlater/readlater_sync_service.dartlib/core/services/readlater/readlater_collab_service.dartlib/features/mine/settings/services/font_sync_service.dartlib/features/mine/settings/services/plugin_update_service.dart
[v6.9.30] - 2026-06-01
🆕 服务端API:替代Supabase的3个PHP控制器
背景: 将Supabase数据库表功能迁移至ThinkPHP5自建服务端API,提供稍后读同步、字体同步、插件更新3组接口
1. Readlater.php — 稍后读同步+协作+AI摘要 🆕:
- 🆕
docs/toolsapi/application/api/controller/Readlater.php— 完整控制器 - 同步:upload(上传消息)、download(下载消息)、delete(删除消息)、fullSync(全量同步)
- 协作:createSharedList(创建共享列表)、inviteMember(邀请成员)、shareMessage(分享消息)、listMessages(获取列表消息)、myLists(我的列表)、leaveList(退出列表)
- AI摘要:generateSummary(单条摘要)、batchSummarize(批量摘要)、dailySummary(每日摘要)、suggestTags(标签建议)
- 数据表:readlater_messages、readlater_shared_lists、readlater_shared_members、readlater_shared_messages
- 所有方法需登录,AI摘要当前为占位符实现
2. FontSync.php — 字体同步 🆕:
- 🆕
docs/toolsapi/application/api/controller/FontSync.php— 完整控制器 - list(获取在线字体列表),无需登录
- 数据表:fonts
3. PluginUpdate.php — 插件更新 🆕:
- 🆕
docs/toolsapi/application/api/controller/PluginUpdate.php— 完整控制器 - check(检查单个插件更新)、checkAll(检查所有插件更新),无需登录
- syncState(同步插件状态)、loadState(加载插件状态),需登录
- 数据表:plugin_meta、plugin_user_settings
通用特性:
- 所有控制器继承
app\common\controller\Api,使用$this->auth->id获取用户ID - 自动建表:
_initialize()中使用CREATE TABLE IF NOT EXISTS确保表存在 - 独立 install 接口:支持手动触发建表
- 统一返回格式:
$this->success()/$this->error() - 完整参数校验 + try-catch 异常捕获
新增文件
docs/toolsapi/application/api/controller/Readlater.phpdocs/toolsapi/application/api/controller/FontSync.phpdocs/toolsapi/application/api/controller/PluginUpdate.php
[v6.9.29] - 2026-06-01
🔄 关于页面"检查更新"和"开源许可"迁移至软件信息页面
任务13: 我的页面弹性布局确认
- ✅
profile_page.dart— 确认已有BouncingScrollPhysics(),iOS风格弹性滚动已生效,无需修改
任务14-15: "检查更新"和"开源许可"从关于页迁移至软件信息页 🔴高:
- ♻️
about_page.dart— _DeveloperSection 移除"开源许可"和"检查更新"两个列表项,仅保留"更新日志" - ♻️
about_page.dart— 移除flutter_svg和showLicensePage不再需要的 import - ✨
app_info_widgets.dart— LicenseItem 对话框新增"查看完整许可"按钮,点击跳转 Flutter 原生 License 页面 - 🆕
app_info_widgets.dart— 新增CheckUpdateItem组件,展示"检查更新"行项 + "已是最新版本"对话框 - ✨
app_info_sections.dart— BuildInfoSection 新增CheckUpdateItem(位于 LicenseItem 之后)
修改文件
lib/features/mine/profile/presentation/about_page.dartlib/features/mine/profile/presentation/app_info_widgets.dartlib/features/mine/profile/presentation/app_info_sections.dart
[v6.9.28] - 2026-06-18
🔄 路由架构重构:统一路由注册表,消除鸿蒙路由配置维护成本
问题背景:
路由定义分散在 user_routes.dart、tool_routes.dart、content_routes.dart、settings_routes.dart、feature_routes.dart、editor_router.dart、ohos_nav_bridge.dart 等 6-8 个文件中,GoRoute 和 OhosRouteEntry 需要手动同步,新增/修改路由时容易遗漏鸿蒙端配置。
1. 新增统一路由注册表(Single Source of Truth)🆕:
- 🆕
lib/core/router/route_def.dart— 核心类型定义:RouteModule、RouteTransition、RouteContext、RouteDef、RouteBuildertypedef,以及 GoRouterState/OhosRouteContext 到 RouteContext 的转换扩展 - 🆕
lib/core/router/route_registry.dart— 统一路由注册表,所有路由定义的单一数据源,约1000行,包含 user/tool/content/settings/feature/editor 全部模块路由 - 🆕
lib/core/router/route_builders.dart— 从 route_registry 自动生成GoRoute和OhosRouteEntry的构建器,包含buildModuleGoRoutes()和buildOhosRouteEntries() - 🆕
lib/core/router/ohos_route_types.dart— 从 ohos_nav_bridge.dart 提取的类型定义(OhosRouteParams、OhosRouteContext、OhosNavMiddleware、OhosRouteEntry、AuthMiddleware、LogMiddleware),打破循环依赖 - 🆕
lib/core/router/ohos_placeholders.dart— 从 ohos_nav_bridge.dart 提取的鸿蒙占位组件(CanvasPlaceholder、ScreenSharePlaceholder、TransferChatPlaceholder、QuickCardPlaceholder、EditorSubPlaceholder、OhosNotFoundWidget)
2. 重构现有路由文件 🔴高:
- 📝
user_routes.dart— 从280行缩减为17行,仅调用buildModuleGoRoutes(RouteModule.user, rootNavigatorKey) - 📝
tool_routes.dart— 同上模式,约17行 - 📝
content_routes.dart— 同上模式,约17行 - 📝
settings_routes.dart— 同上模式,约17行 - 📝
feature_routes.dart— 同上模式,约17行 - 📝
editor_router.dart— GoRoute 定义部分改为调用buildModuleGoRoutes(RouteModule.editor, rootNavigatorKey),保留 EditorRoutes 常量类、EditorNav 扩展、辅助函数和数据类 - 📝
ohos_nav_bridge.dart— 从1188行(含100+手动路由注册)缩减为约245行,_routes改为 getter 调用buildOhosRouteEntries(),保留导航方法和中间件执行逻辑,export ohos_route_types.dart 和 ohos_placeholders.dart
3. RouteDef 设计要点:
page字段:无参数页面构建器(简单页面)builder字段:带 RouteContext 的页面构建器(需要参数的页面)ohosBuilder字段:鸿蒙端专用构建器(替代页面,如占位组件)transition字段:转场动画类型(iosSlide/iosFade/iosModal/glassSheet/heroine)middlewares字段:中间件列表(AuthMiddleware/LogMiddleware)redirectTo字段:重定向目标路径children字段:嵌套子路由
新增文件
lib/core/router/route_def.dartlib/core/router/route_registry.dartlib/core/router/route_builders.dartlib/core/router/ohos_route_types.dartlib/core/router/ohos_placeholders.dart
修改文件
lib/core/router/user_routes.dartlib/core/router/tool_routes.dartlib/core/router/content_routes.dartlib/core/router/settings_routes.dartlib/core/router/feature_routes.dartlib/core/router/editor_router.dartlib/core/router/ohos_nav_bridge.dart
[v6.9.27] - 2026-06-01
🐛 修复
- 🐛
login_page.dart/register_section.dart— 修复登录/注册按钮文字被截断:CupertinoButton 默认 minSize=44 和 padding 导致 SizedBox(height:50) 内文字溢出,添加padding: EdgeInsets.zero和minimumSize: Size.zero - 🐛
it.dart— 修复意大利语翻译文件缺少auth: TAuth(...)段导致 analyzer 报错missing_required_argument - 🐛 14个语言文件 —
emailRegisteredHint统一添加{email}占位符,与register_section.dart中replaceAll('{email}', email)调用对齐
✨ 新增:登录/注册页面多语言(i18n)支持
- 🆕
lib/l10n/types/t_auth.dart— 新增 TAuth 翻译类型,包含 ~95 个翻译键(登录/注册/验证码/Token/老用户登录等) - 🆕
lib/l10n/types/t.dart— 导出 t_auth.dart - 🆕
lib/l10n/types/t_root.dart— T 类新增auth必需字段、toMap/fromMap 支持 - 🆕 14个语言文件全部添加
auth: TAuth(...)翻译段(zh_cn, en, zh_tw, ja, ko, fr, de, es, it, pt, ru, ar, hi, bn) - 🆕
translation_io_service.dart— fallback 构造添加auth: fallback.auth - ✨
login_page.dart— 所有硬编码中文文本替换为t.auth.*/t.common.*引用 - ✨
register_section.dart— 所有硬编码中文文本替换为t.auth.*/t.common.*引用 - ✨
login_form_sections.dart— PasswordFormSection/CodeFormSection/TokenFormSection/LegacyFormSection/LoginSuccessView 新增required TAuth auth参数,替换硬编码中文
[v6.9.26] - 2026-06-01
🐛 修复
- 🐛
home_tool_center.dart— 修复主页下拉面板最近打开页面不显示的问题:浮动面板打开时未从 RecentRouteService 刷新 Provider 状态,导致显示旧数据。在_FloatingPanelState.initState()中添加refreshFromService()调用 - 🐛
recent_route_service.dart— 修复动态路由未归一化导致同一页面产生多条记录的问题:添加_normalizeRoute()方法,将/chat-flow/123归一化为/chat-flow,/editor?text=xxx归一化为/editor - 🐛
app_nav_extension.dart—appGo()方法添加RecentRouteService.addRecentRoute()调用,确保所有导航方式都记录最近路由
✨ 改进
- ✨
overview_dashboard.dart— 概览仪表盘"最近浏览"接入 RecentRouteService,展示真实浏览记录(最多6条),支持点击跳转,替换原静态占位符 - ✨ 全局 — 将"实验中的功能"文案统一改为"Beta",涉及编辑器工具栏、实验功能页面、小部件管理页面、l10n翻译等6个文件
[v6.9.25] - 2026-06-01
🐛 修复
- 🐛
canvas_provider.dart— 修复协作画布无法绘制的严重bug:所有Future.microtask回调中_disposed逻辑反转(if (!_disposed) return;应为if (_disposed) return;),导致引擎状态变更永远无法同步到 Riverpod state,画布始终为空。影响范围:_onEngineChanged、leaveCanvas、_handleRemoteSnapshot、_handleRemoteCursor、_handleParticipantsChanged共5处 - 🐛
canvas_page.dart— GestureDetector 添加behavior: HitTestBehavior.opaque,修复画布区域手势检测不灵敏问题
✨ 改进
- ✨
transfer_chat_page.dart— 协作画布(🎨画布)和屏幕共享(📺屏幕)按钮添加"开发中"badge标记,使用 Stack + Positioned 叠加橙色小标签 - ✨
FeatureFlag.php— 新增collaboration_canvas(协作画布) 和screen_share(屏幕共享) 两个 Feature Flag 条目,均标记为developing状态
[v6.9.24] - 2026-06-01
✨ 改进
- ✨
reading_report_service.dart— 未登录时降级为本地报告(AppDatabase),认证错误(401)不再阻断整个报告。新增_generateLocalReport方法,从本地 ReadHistory/Favorites 表生成摘要、趋势图和热力图数据 - ✨
reading_report_page.dart— 移除登录阻断页面(_buildAuthError),改为顶部登录提示横幅(_buildLoginHintBanner),未登录用户可查看本地阅读报告 - ✨
reading_report_provider.dart—isAuthError改为信息性标记,不再阻断报告内容显示
🐛 修复
- 🐛
shortcuts.xml— 修复安卓端长按桌面图标快捷菜单点击无跳转问题。根因:静态快捷方式的 extra key(shortcutType) 和 action(VIEW) 与quick_actions_android插件期望的 key(some unique action key) 和 action(RUN) 不匹配,导致插件无法识别快捷方式 intent。已对齐插件内部常量 - 🐛
AndroidManifest.xml— 在<application>标签添加android:enableOnBackInvokedCallback="true",支持 Android 13+ 预测性返回手势 - 🐛
build.gradle.kts— 添加packaging.jniLibs.useLegacyPackaging = false,支持 Android 15+ 16KB 页面大小设备,确保 .so 文件以 16KB 对齐方式存储 - 🐛
gradle.properties— 添加android.experimental.lint.missingBaselineIsEmptyBaseline=true,消除 lint baseline 缺失警告 - 🐛
image_cache_detail_page.dart— 修复鸿蒙端ExtendedImage.file()的File类型不匹配编译错误(dart:ioFile 与extended_image_libraryFile 不兼容),改用ExtendedImage(image: FileImage(file)) - 🐛
image_cache_grid.dart— 同上,缩略图组件CacheThumbnail改用ExtendedImage(image: ExtendedResizeImage.resizeIfNeeded(provider: FileImage(file)))替代ExtendedImage.file() - 🐛
nearby_service.dart— 修复鸿蒙端Platform.isOhos不存在编译错误,改用Platform.operatingSystem == 'ohos'
[v6.9.23] - 2026-05-31
🐛 修复
- 🐛
app.dart— 修复 DataSyncEventBus 资源未释放问题,dispose 中添加DataSyncEventBus.instance.dispose()关闭内部 StreamController
🔄 数据同步架构:统一 DataSyncEventBus 替代分散 StreamController
1. 新增 DataSyncEventBus 统一事件总线 🆕:
- 🆕
lib/core/sync/data_sync_event_bus.dart— 全局数据同步事件总线,单例模式 - 🆕
DataSyncEventType枚举 — 支持readlater、favorite两种事件类型,未来可扩展 - 🆕
DataSyncEvent类 — 携带type、source(来源标识)、payload(附加数据),便于调试追踪 - 🆕
DataSyncEventBus.instance.notify()— 发送事件,支持 source 追踪 - 🆕
DataSyncEventBus.instance.on()— 按类型过滤订阅事件 - 🆕
DataSyncEventBus.instance.all— 订阅所有事件
2. 新增兼容层(零破坏性迁移)🆕:
- 🆕
lib/core/sync/data_sync_compat.dart— 提供与旧 API 完全一致的函数签名 - ✅
notifyReadlaterRefresh()/notifyFavoriteRefresh()— 兼容旧调用 - ✅
readlaterRefreshStream/favoriteRefreshStream— 兼容旧订阅 - ✅
disposeReadlaterRefreshController()/disposeFavoriteRefreshController()— 兼容旧清理(空操作,由 EventBus 统一管理)
3. 迁移旧 StreamController 🔴高:
- 🗑️
chat_provider.dart— 移除_readlaterRefreshController、notifyReadlaterRefresh()、readlaterRefreshStream、disposeReadlaterRefreshController() - 🗑️
favorite_provider.dart— 移除_favoriteRefreshController、notifyFavoriteRefresh()、favoriteRefreshStream、disposeFavoriteRefreshController()
4. 更新所有调用方 import 🔴高:
- 📝
app.dart— dispose 函数改为从core/sync/sync.dart导入 - 📝
home_interaction_mixin.dart— 移除对chat_provider.dart和favorite_provider.dart的依赖,改用core/sync/sync.dart - 📝
sharing_receiver_service.dart— 移除对chat_provider.dart的依赖,改用core/sync/sync.dart - 📝
readlater_provider.dart— 移除对chat_provider.dart的依赖,改用core/sync/sync.dart - 📝
chat_flow_page.dart— 新增core/sync/sync.dart导入(保留chat_provider.dart因仍需chatMessagesProvider)
新增文件
lib/core/sync/data_sync_event_bus.dartlib/core/sync/data_sync_compat.dartlib/core/sync/sync.dart
修改文件
lib/features/discover/providers/chat_provider.dartlib/features/home/providers/favorite_provider.dartlib/app/app.dartlib/features/home/providers/home_interaction_mixin.dartlib/core/services/readlater/sharing_receiver_service.dartlib/features/home/presentation/providers/readlater/readlater_provider.dartlib/features/discover/presentation/pages/chat/chat_flow_page.dart
[v6.9.22] - 2026-05-31
🎨 主题系统增强:isDark 便捷扩展 + Sheet/Dialog 硬编码颜色修复
1. 新增 BuildContext 主题扩展 🆕:
- 🆕
AppThemeContextExt— 在app_theme.dart底部新增BuildContext扩展 - 🆕
context.isDark— 快捷判断暗色模式,替代AppTheme.isDarkMode(context)或CupertinoTheme.brightnessOf(context) == Brightness.dark - 🆕
context.ext— 快捷访问AppThemeExtension,替代AppTheme.ext(context)
2. 修复 Sheet/Dialog 中硬编码颜色(暗色模式适配)🔴高:
- 🐛
source_page.dart— 频道详情弹窗按钮文字使用isDark ? ext.bgPrimary : CupertinoColors.white,改为ext.textOnAccent - 🐛
chat_flow_readlater_sync_helper.dart— 共享协作弹窗背景色CupertinoColors.systemBackground→ext.bgElevated;关闭按钮CupertinoColors.systemGrey4→ext.bgSecondary - 🐛
chat_settings_page.dart— 破坏性操作文字CupertinoColors.systemRed→ext.destructiveColor(3处);Toast 弹窗CupertinoColors.systemGrey+Colors.white→ext.bgElevated+ext.textPrimary - 🐛
correction_page.dart— 错误提示文字CupertinoColors.systemRed→ext.destructiveColor - 🐛
account_security_score_card.dart— 安全评分颜色CupertinoColors.systemGreen/Orange/Red→ext.successColor/warningColor/destructiveColor(5处) - 🐛
account_bind_email_dialog.dart— 输入框背景CupertinoColors.systemGrey6→ext.bgSecondary(2处)
修改文件
lib/core/theme/app_theme.dart— 新增AppThemeContextExt扩展lib/features/source/presentation/source_page.dart— 修复频道详情弹窗颜色lib/features/discover/presentation/widgets/chat/chat_flow_readlater_sync_helper.dart— 修复协作弹窗颜色 + 新增 app_theme 导入lib/features/discover/presentation/pages/chat/chat_settings_page.dart— 修复破坏性操作 + Toast 颜色lib/features/correction/presentation/correction_page.dart— 修复错误提示颜色lib/features/mine/settings/presentation/account/account_security_score_card.dart— 修复语义色lib/features/mine/settings/presentation/account/account_bind_email_dialog.dart— 修复输入框背景色
[v6.9.21] - 2026-05-31
🔧 HarmonyOS 构建修复:module.json5 schema 校验失败
Issue: hvigor PreBuild 报错 shortcuts 字段无效
- 🐛 根因:
module.abilities[0]中的shortcuts字段不在当前 HarmonyOS schema 允许的 abilities 属性列表中,导致Schema validate failed - ✅ 移除
abilities[0]中的shortcuts配置(包含action_theme和action_general_settings两个快捷方式) - ✅ 当前 API 版本的 abilities 不支持
shortcuts,需后续通过其他方式实现桌面快捷方式
修改文件
ohos/entry/src/main/module.json5
[v6.9.20] - 2026-05-31
🔧 HarmonyOS 配置修复:receive_sharing_intent + 缺失权限
Task 9: 配置 receive_sharing_intent for HarmonyOS
- ✅
module.json5:EntryAbility 新增分享接收 skillsohos.want.action.sendData— 接收单条分享内容ohos.want.action.sendMultipleData— 接收多条分享内容entity.system.default— 默认实体
- ✅ 插件
ReceiveSharingIntentOhosPlugin已通过NewWantListener+AbilityAware自动注册,EntryAbility 无需额外修改
Task 9.1: 修复 named parameter 错误
- 🐛 根因:
receive_sharing_intentv1.8.1 (git br_v1.8.1_ohos) 的SharedMediaFile构造函数新增 5 个 required 参数:uri、title、label、description、utd,以及 1 个 optional 参数content。SafeSharedMediaFile.toSharedMediaFile()未传递这些参数导致编译错误 - ✅
safe_sharing_receiver.dart:SafeSharedMediaFile新增uri/title/label/description/utd/content字段 - ✅
fromMap()解析新字段 - ✅
toSharedMediaFile()传递新字段给SharedMediaFile构造函数 - ✅ flutter analyze 验证通过,named parameter 错误已消除
Task 8 follow-up: 添加缺失权限到 module.json5
- ✅
ohos.permission.READ_MEDIA— 读取相册照片/视频 (user_grant) - ✅
ohos.permission.WRITE_MEDIA— 保存照片/视频到相册 (user_grant) - ✅
ohos.permission.FILE_ACCESS_PERSIST— 文件访问 (system_grant) - ✅
ohos.permission.NOTIFICATION_AGENT_CONTROLLER— 本地通知 (system_grant) - ✅
ohos.permission.PASTEBOARD— 剪贴板访问 (system_grant) - ✅
string.json新增permission_notification_reason权限说明文案
修改文件
ohos/entry/src/main/module.json5ohos/entry/src/main/resources/base/element/string.jsonlib/core/services/readlater/safe_sharing_receiver.dart
[v6.9.19] - 2026-05-31
🔄 修复稍后读/收藏跨页面同步问题
Issue 10: 稍后读(Read Later)同步问题
- 🐛 根因:
ReadLaterNotifier.init()需手动调用(在 ReadLaterPage.initState 中),但 Provider 创建时不会自动调用。若用户从未访问稍后读页面,Provider 虽被创建但init()未执行,导致:1) 初始数据未加载;2)readlaterRefreshStream未订阅。即使notifyReadlaterRefresh()被调用,刷新事件也会丢失。 - ✅ 修复:将
init()逻辑移入build()生命周期方法,使用Future.microtask()避免在 build 中直接修改状态,确保 Provider 创建时自动加载和订阅 - ✅
loadItems()重构为独立 try-catch,Feed API 和 ChatMessage 加载互不影响 - ✅ 清理
readlater_page.dart中已废弃的init()调用 - ✅
init()标记为@Deprecated
Issue 11: 收藏(Favorite)同步问题
- 🐛 根因:收藏操作完全缺少实时刷新机制。
toggleFavorite()执行后仅更新本地数据库和服务端,但没有通知FavoriteNotifier刷新。此外loadFavorites()仅从服务端API加载,不包含本地数据库中标记为isFavorite=true的句子。 - ✅ 修复:新增
favoriteRefreshStream全局事件总线(与 readlaterRefreshStream 模式一致) - ✅
FavoriteNotifier.build()中订阅刷新流 - ✅
HomeInteractionMixin.toggleFavorite()末尾调用notifyFavoriteRefresh() - ✅
loadFavorites()合并本地数据库收藏(loadLocalDbFavorites+mergeWithLocalDb) - ✅ 加载失败时回退到本地数据库收藏
- ✅
app.dart注册disposeFavoriteRefreshController()清理
代码质量
- ✅ 修复
favorite_repository.dart中s.createdAt?.多余的 null-aware 操作符警告 - ✅ 移除
FavoriteRepository中未使用的_ref字段
修改文件
lib/features/home/presentation/providers/readlater/readlater_provider.dartlib/features/home/presentation/providers/readlater_page.dartlib/features/home/providers/favorite_provider.dartlib/features/home/providers/home_interaction_mixin.dartlib/features/home/repositories/favorite_repository.dartlib/app/app.dart
🏷️ 软件特性功能 (v6.9.18及更早版本已完成的特性)
- 🏠 主页 — 每日拾句/句子广场/下拉刷新动画/精灵角色互动/摇一摇换句
- 🔍 发现 — 会话流AI聊天/稍后读/闲情逸致/灵感/日签卡片/壁纸模板/进度追踪/工具中心
- 👤 我的 — 个人中心/收藏/历史/设备管理/内容纠错/文件传输
- ⚙️ 设置 — 主题个性化/通用设置/权限管理/插件系统/实验性功能
- 🎨 设计系统 — 动态主题(亮/暗/AMOLED)/动态圆角/GlassContainer毛玻璃/统一设计令牌
- 🔒 隐私合规 — 协议同意后初始化权限/AndroidManifest自启动防护/外部跳转确认弹窗
- 📱 平台适配 — Android/iOS/鸿蒙/响应式布局/NFC文件传输
- 🔄 路由架构 — 统一路由注册表(Single Source of Truth)/GoRoute+OhosRouteEntry自动生成/中间件架构
已归档版本 v6.9.18(了解我们弹窗) / v6.9.17(语言选择动态翻译) / v6.9.16(阅读报告本地降级) / v6.9.15(安卓快捷方式修复) / v6.9.14(主题系统增强) / v6.9.13(数据同步架构) / v6.9.12(协作画布修复) / v6.9.11(概览仪表盘) / v6.9.10(阅读报告服务) / v6.9.9(翻译插件) / v6.9.8(闲情逸致) / v6.9.7(诗词设置) / v6.9.6(工具中心) / v6.9.5(文件传输) / v6.9.4(搜索映射) / v6.9.3(灵感暗色渐变) / v6.9.2(隐私政策) / v6.9.1(FeatureFlag) / v6.9.0(稍后读修复) / v6.8.9(收藏同步) / v6.8.8(图片缓存) / v6.8.7(纠错布局) / v6.8.6(闲情热力图) / v6.8.5(外部跳转) / v6.8.4(工具面板重构) / v6.8.3(导航配置) / v6.8.1(引导页多语言) / v6.8.0(实验功能) / v6.7.9-v6.7.0(多项迭代) / v6.6.172-v6.6.168(插件+翻译+OHOS) / v6.6.167-v6.6.163(汇率+异常保护+API降级) / v6.6.162-v6.6.135(多项功能迭代) / v6.6.133-v6.5.45(综合审计+隐私+热力图+工具面板) / v16.36.0-v16.36.3(插件+翻译+OHOS) / v16.35.0(性能优化8项) / 6.25.0-6.25.1(鸿蒙小组件) / 6.24.0(诗词设置) / 14.0.0-14.23.0(传输+翻译+画布+WebRTC) / 13.2.0-13.9.0(信令+本地化+主题+设置) / 6.4.1-6.4.5(鸿蒙数据库) / 5.10.0-5.13.0(鸿蒙SDK+auth) / 1.21.0-1.48.0(早期功能迭代) — 更早版本详见 git history