101 KiB
Changelog
所有重要变更均记录于此文件。格式基于 Keep a Changelog。
[v6.20.19] - 2026-06-07
🐛 修复 — 句子广场选择分类后仍显示混合句子
问题
选择具体分类(如"古诗词")后,句子列表仍显示"推荐"模式的混合数据,而非所选分类的句子。
原因
selectType()切换分类时未清空旧句子列表,新数据加载期间仍显示旧的混合数据fetchNewSentences()和fetchRefreshSentences()中的分类过滤逻辑仅检查"是否启用",未严格匹配当前选中的分类
修复
selectType()无缓存时清空sentences并设置isForceLoading=true,显示骨架屏而非旧数据fetchNewSentences()和fetchRefreshSentences()增加严格分类过滤:选中具体分类时只保留该分类数据- fallback 逻辑同步修复
修改文件
lib/features/home/providers/home_provider.dart— selectType 清空旧数据lib/features/home/providers/home_feed_mixin.dart— 严格分类过滤
[v6.20.18] - 2026-06-07
📊 改进 — 句子广场/句子来源分类由后台推荐权重管理控制
服务端修改
/api/feed/channels接口根据tool_feed_weight_config表的is_enabled字段过滤分类,只返回后台启用的分类/api/feed/stats接口同步过滤,统计数据只包含启用分类- 频道列表响应新增
is_enabled字段 - 未在权重配置表中的类型默认启用(保持兼容)
前端修改
FeedChannel模型新增isEnabled字段,解析服务端is_enabledsource_provider.dart移除硬编码的_kDefaultDisabledKeys(原默认禁用 jieqi/article/lunyu/abbr/jiufang),改为由服务端控制- 句子来源页面分类总数现在正确反映后台开启的分类数量
修改文件
docs/toolsapi/application/api/controller/Feed.php— channels/stats 方法增加 is_enabled 过滤lib/features/home/models/feed_model.dart— FeedChannel 添加 isEnabled 字段lib/features/source/providers/source_provider.dart— 移除硬编码禁用列表
<<<<<<< Updated upstream
[v6.20.17] - 2026-06-07
🔍 改进 — Spotlight搜索扩展
全局快捷键 (Cmd+K / Ctrl+K)
- 新增
SpotlightShortcut工具类,检测 Cmd+K (macOS) / Ctrl+K (Win/Linux/Web/外接键盘) - Profile 页面注册全局键盘监听,快捷键直接唤起搜索
- 搜索浮层底部快捷键提示增加 ⌘K/Ctrl+K
搜索结果最近访问排序
- 搜索结果按最近访问时间倒序排列(最近使用的排前面)
- 访问记录持久化到本地存储
搜索建议自动补全
- 输入≥2字即触发搜索建议
- 新增模糊匹配(逐字符匹配,允许间隔)
- Provider 新增
suggestions字段
🛡️ 改进 — LoginGuardWidget 增强
- 默认文案接入 i18n 系统(
t.profile.loginToViewProfile/t.profile.goLogin) - 新增
onLogin回调参数,登录成功后可触发页面数据刷新
🌍 改进 — 翻译系统一致性
translation_io_service.dart添加_checkProfileFieldsSync字段同步检查(debug 模式打印警告)- 签到页面 30+ 处硬编码中文替换为 i18n 调用
- TProfile 新增 32 个签到相关翻译字段,14 种语言同步更新
🔧 修复 — 编译构建
app_info_sections.dart添加显式类型注解修复avoid_dynamic_calls警告
🌙 改进 — 深色模式对比度优化
textSecondary: #9CA3AF → #AEAEB2 (iOS systemGray2)textHint: #6B7280 → #8E8E93 (iOS systemGray, WCAG AA ≥4.5:1)overlaySubtle: 深色模式边框从不可见 → 白色33%透明度- AMOLED 纯黑模式同步修复
📱 改进 — iPad 横屏布局
- Spotlight 搜索浮层 iPad 横屏宽度 480 → 520
♿ 改进 — 无障碍支持
- Spotlight 搜索浮层:搜索栏/结果项/分类标题/最近搜索标签添加 Semantics
- LoginGuardWidget:未登录提示视图添加 Semantics
- Profile 页面:搜索按钮/快捷操作按钮添加 Semantics
修改文件
lib/features/mine/profile/presentation/spotlight_search/spotlight_shortcut.dart— 新增全局快捷键lib/features/mine/profile/presentation/spotlight_search/spotlight_search_overlay.dart— 快捷键提示+iPad宽度+Semanticslib/features/mine/profile/presentation/spotlight_search/spotlight_search_data.dart— 模糊匹配+suggest方法lib/features/mine/profile/presentation/spotlight_search/spotlight_search_provider.dart— 访问排序+建议+模糊匹配lib/features/mine/profile/presentation/profile_page.dart— 全局快捷键+Semanticslib/shared/widgets/feedback/login_guard_widget.dart— i18n+onLogin+Semanticslib/core/theme/app_colors.dart— 深色模式对比度修复lib/l10n/translation_io_service.dart— 字段同步检查+签到翻译导入lib/l10n/types/t_profile.dart— 32个签到翻译字段lib/l10n/languages/*.dart— 14种语言同步更新lib/features/mine/signin/presentation/signin_page.dart— 硬编码→i18nlib/features/mine/profile/presentation/app_info_sections.dart— 类型注解修复
[v6.20.16] - 2026-06-07
🌍 改进 — 签到页面 i18n 国际化
签到页面硬编码中文全面接入 i18n 翻译系统
变更内容:
- TProfile 类型新增 32 个签到相关翻译字段(loginToCheckin、todaySigned、weeklyCheckin、makeupCheckin 等)
- 全部 14 个语言文件(zh_cn、en、ja、zh_tw、ko、de、it、es、ar、bn、hi、pt、ru、fr)同步更新
- translation_io_service.dart 的
_tProfileToMap、_importProfile、_checkProfileFieldsSync三处同步更新 - signin_page.dart 所有用户可见硬编码中文替换为
t.profile.xxx/t.common.xxx调用 - 补签弹窗中带参数的字符串使用
{0}/{1}占位符 +replaceAll替换
保留项(受限空间视觉元素,暂无 i18n 键):
- 日历格子单字指示符('签'/'补')
- 星期缩写('一二三四五六日')
- 日期格式('年月日')
🛡️ 改进 — TProfile 字段同步检查
新增 _checkProfileFieldsSync 防止新增字段遗漏
- 在
_importProfile方法中添加字段同步检查调用 - 新增
_checkProfileFieldsSync静态方法,debug 模式下打印缺失/多余字段警告 - 使用
assert(() { ... return true; }())模式,release 模式下零开销
🔧 修复 — app_info_sections.dart avoid_dynamic_calls 警告
修复 PlatformDispatcher 实验性 API 的类型安全警告
PlatformDispatcher和FlutterView添加显式类型注解- 保留
(x as dynamic)强转访问实验性 API(impellerEnabled、renderingEngine) - 添加
// ignore: avoid_dynamic_calls注释
修改文件
lib/l10n/types/t_profile.dart— 新增 32 个签到翻译字段lib/l10n/translation_io_service.dart— 同步字段映射 + 字段检查lib/l10n/languages/*.dart— 14 个语言文件更新lib/features/mine/signin/presentation/signin_page.dart— 硬编码中文替换为 i18nlib/features/mine/profile/presentation/app_info_sections.dart— 修复类型警告
[v6.20.15] - 2026-06-07
🔍 新功能 — 我的页面 Spotlight 全局搜索
新增:macOS Spotlight 风格全局搜索浮层,支持实时搜索/分类展示/键盘导航/拼音匹配
功能特性:
- 点击「我的」页面顶部🔍图标弹出 Spotlight 风格搜索浮层
- 毛玻璃背景遮罩 + 居中圆角搜索框 + 弹性入场动画
- 实时搜索:输入即搜索,支持中文/拼音/拼音首字母匹配
- 分类展示:页面(蓝)/功能(绿)/工具(橙)/设置(灰)/内容(紫) 五大分类
- 关键词高亮:匹配部分用主题色高亮显示
- 最近搜索:空查询时显示最近搜索标签,支持点击填入/单条删除
- 键盘导航:↑↓选择 / Enter确认 / ESC关闭
- 快捷键提示栏
动画效果:
- 入场:遮罩渐入 + 搜索框弹性滑入(过冲曲线 Cubic(0.34, 1.56, 0.64, 1.0))
- 结果列表:flutter_staggered_animations 交错入场
- 选中项:AnimatedContainer 背景渐变
- 清除按钮:fadeIn + scale 动画
技术实现:
SpotlightSearchOverlay— 搜索浮层主组件(showGeneralDialog + BackdropFilter)SpotlightSearchData— 50+ 搜索项全量索引(PinyinHelper 自动生成拼音)SpotlightSearchNotifier— Riverpod 状态管理(搜索/导航/历史持久化)- 使用
flutter_animate+flutter_staggered_animations实现动画 - 动态主题适配(AppTheme.ext(context))
🛡️ 改进 — LoginGuardWidget 扩展部署
退出登录后信息清理覆盖更多页面
新增部署页面:
signin_page.dart— 签到页面(替换自定义 _showLoginPrompt 弹窗)note_list_page.dart— 笔记页面(替换自定义 _buildLoginPrompt)achievement_page.dart— 成就中心daily_fortune_page.dart— 每日运势reading_report_page.dart— 阅读报告
保留原有设计的页面:
- 收藏/点赞/足迹页面 — 保留 sync banner 设计(本地数据仍可见)
- 用户中心/个人资料 — 保留自有 auth 处理(核心页面需始终可访问)
修改文件
lib/features/mine/profile/presentation/spotlight_search/spotlight_search_overlay.dart— 新增搜索浮层lib/features/mine/profile/presentation/spotlight_search/spotlight_search_data.dart— 新增搜索数据索引lib/features/mine/profile/presentation/spotlight_search/spotlight_search_provider.dart— 新增搜索状态Providerlib/features/mine/profile/presentation/profile_page.dart— 添加搜索按钮入口lib/features/mine/signin/presentation/signin_page.dart— 部署LoginGuardWidgetlib/features/note/presentation/note_list_page.dart— 部署LoginGuardWidgetlib/features/mine/achievement/presentation/achievement_page.dart— 部署LoginGuardWidgetlib/features/daily_fortune/presentation/daily_fortune_page.dart— 部署LoginGuardWidgetlib/features/reading_report/presentation/reading_report_page.dart— 部署LoginGuardWidget
[v6.20.14] - 2026-06-07
🔐 新功能 — 忘记密码重置页面
新增:未登录用户可通过密保问题/验证码/联系客服三种方式重置密码
页面功能:
- 三种重置方式切换:密保问题、验证码、联系客服
- 密保问题方式:输入账号 → 选择密保问题 → 输入答案 → 设置新密码 → 提交
- 验证码方式:输入邮箱/手机号 → 发送验证码 → 输入验证码 → 设置新密码 → 提交
- 联系客服方式:展示需提交给客服的信息列表和联系方式
技术实现:
- 使用
CupertinoSlidingSegmentedControl实现三种方式切换 - iOS 风格
CupertinoPageScaffold+GlassContainer毛玻璃卡片 - 动态主题支持
AppTheme.ext(context) - 使用项目统一组件:
AppSpacing、AppRadius、AppTypography、GlassContainer - 调用
UserSecurityService.resetPassword()/sendEms()/secQuestions()接口
路由:
- 新增路由
AppRoutes.forgotPassword = '/forgot-password' - 登录页"忘记密码"按钮改为导航至新页面(原为弹窗提示)
国际化:
TAuth新增17个翻译键:forgotPasswordTitle, forgotPasswordSubtitle, resetBySecQuestion, resetByVerifyCode, resetByContactService, newPasswordHint, resetCodeAccountHint, resetPasswordSuccess, resetPasswordFailed, contactServiceTitle, contactServiceSubtitle, contactServiceInfoAccount, contactServiceInfoEmail, contactServiceInfoDevice, contactServiceInfoDescription, contactServiceMethod, contactServiceMethodDetail- 全部14种语言文件已更新
修改文件
lib/features/auth/presentation/forgot_password_page.dart— 新增忘记密码页面lib/core/router/app_routes.dart— 新增 forgotPassword 路由常量lib/core/router/route_registry.dart— 注册 forgot-password 路由lib/features/auth/presentation/login_page.dart— "忘记密码"按钮改为导航至新页面lib/l10n/types/t_auth.dart— 新增17个翻译键lib/l10n/languages/*.dart— 全部14种语言文件更新
[v6.20.13] - 2026-06-07
🌐 国际化 — 通用设置页面 i18n 支持
新增:通用设置页面全量多语言翻译键,替换所有硬编码中文文本
翻译键新增:
TCommon: searchHistory, gotIt, featureUnavailable, featureNotSupported, inDevelopment, nAvailable, appName, exportFailedTSettings(flat): featureExtension, plugin, pluginSubtitle, dailyReminder, dailyReminderSubtitle, reminderTime, reminderTimeSubtitle, developer, logLevel, logLevelSubtitleTSettingsInteraction: sfxFeedback, sfxFeedbackSubtitle, sfxStyle, sfxStyleSubtitle, shakeToSwitch, shakeToSwitchSubtitleTSettingsDisplay: screenAlwaysOn, screenAlwaysOnSubtitle, screenAlwaysOnOff, screenAlwaysOnReading, screenAlwaysOnAlways, screenAlwaysOnTitle, reopenOnboarding, reopenOnboardingSubtitle, navBarPosition, navBarPositionSubtitle, navBarPositionLeft, navBarPositionTitle, splitViewRatio, splitViewRatioSubtitle, splitViewRatioTitle, splitViewEnabled, splitViewEnabledSubtitle, shaderBackground, shaderBackgroundSubtitleTSettingsPrivacy: nearbyDiscovery, nearbyDiscoverySubtitleTSettingsAdvanced: otherSettings, otherSettingsSubtitle
语言文件更新: 全部14种语言 (zh_cn, zh_tw, en, ja, ko, fr, de, es, it, pt, ru, ar, hi, bn)
源文件替换: general_settings_page.dart, general_settings_sections.dart, general_settings_pickers.dart, general_settings_actions.dart 中所有硬编码中文文本已替换为 t.settings.xxx / t.common.xxx 翻译调用
向后兼容: T根类和TSettings类新增 @Deprecated flat getters,保持旧代码兼容
修改文件
lib/l10n/types/t_common.dart— 新增8个通用翻译键lib/l10n/types/t_settings.dart— 新增10个flat键 + deprecated getterslib/l10n/types/t_settings_interaction.dart— 新增6个交互翻译键lib/l10n/types/t_settings_display.dart— 新增18个显示翻译键lib/l10n/types/t_settings_privacy.dart— 新增2个隐私翻译键lib/l10n/types/t_settings_advanced.dart— 新增2个高级翻译键lib/l10n/types/t_root.dart— 新增deprecated flat getterslib/l10n/languages/*.dart— 全部14种语言文件更新lib/features/mine/settings/presentation/general/general_settings_page.dart— 替换硬编码文本lib/features/mine/settings/presentation/general/general_settings_sections.dart— 替换硬编码文本lib/features/mine/settings/presentation/general/general_settings_pickers.dart— 替换硬编码文本lib/features/mine/settings/presentation/general/general_settings_actions.dart— 替换硬编码文本
[v6.20.12] - 2026-06-07
🐛 Bug修复 — 密保问题注册显示"服务器内部错误"
修复:跳过邮箱验证+密保问题注册时,点击完成注册显示"服务器内部错误"
后端根因:
tool_user表缺少gold字段,setInc('gold', 50)抛出未捕获PDOException → HTTP 500sec_question/sec_answer通过$extend传入User::create(),若字段不存在则INSERT失败- 注册后操作(验证状态/积分/金币)无try-catch保护,任何异常导致500
后端修复 (UserSecurity.php v10.2.1):
sec_question/sec_answer不再放入$extend,改为注册成功后单独UPDATE(带try-catch)gold字段操作增加容错:检测字段是否存在,不存在则跳过- 注册后所有操作包裹在整体try-catch中,确保任何失败不影响注册结果
- 数据库迁移:
tool_user表新增gold INT(10) UNSIGNED DEFAULT 0字段
客户端修复:
UserSecurityService.register()新增on ApiException catch分支,捕获ApiClient转换后的异常- 当检测到服务端内部错误(500/内部/服务器错误)时,自动尝试用注册凭据登录
- 若登录成功,确认注册已完成,返回用户信息(注册视为成功)
- 若登录也失败,才抛出原始错误
_handleRegister()区分"已注册"和"服务器内部错误"两种错误场景
影响范围: 注册流程(跳过邮箱验证+密保问题注册场景)
修改文件
docs/toolsapi/application/api/controller/UserSecurity.php— 后端注册接口修复docs/toolsapi/application/admin/command/Install/migrate_v10_2.sql— gold字段迁移lib/features/auth/services/user_security_service.dart— register()新增ApiException捕获+自动登录恢复逻辑lib/features/auth/presentation/register_section.dart— 区分已注册/服务器错误处理
[v6.20.11] - 2026-06-07
🐛 Bug修复 — RenderChartFadeTransition disposed 回归修复(第二版)
修复:SafeChartWidget 改用 didChangeDependencies 监听路由
- v6.20.11 初版问题: 在
build()中检查ModalRoute.of(context)?.isCurrent无效—— CupertinoPageRoute 的 pop 动画通过 overlay 级 SlideTransition 实现,页面内容 widget 的 build() 不会在动画期间被调用,因此 isCurrent 变化不会触发重建 - 最终方案: 改用
didChangeDependencies监听_ModalScopeStatusInheritedWidget 变化ModalRoute.of()内部依赖_ModalScopeStatus,当 isCurrent 变化时通知所有依赖方didChangeDependencies在 pop 开始时立即触发(build 阶段之前),此时 setState 将图表替换为占位符- 图表在 pop 动画开始前就被移出 widget 树,后续 dispose/unmount 时已无 Syncfusion 元素
- 同时处理路由恢复场景(子页面 pop 后当前路由重新变为 current),恢复图表渲染
- 影响范围: 所有使用 SafeChartWidget 的页面(40+处)
修改文件
lib/shared/widgets/charts/safe_chart_widget.dart— 新增 didChangeDependencies 路由监听
[v6.20.10] - 2026-06-07
🐛 Bug修复 — 双重回归: RenderChartFadeTransition disposed + 卡片收起无反应
修复1:数据管理页面 "disposed RenderObject was mutated: RenderChartFadeTransition"
- 根因: v6.20.9 移除 deactivate 的 setState 后,标志位虽然变了但 build 未被触发,chart widget 仍在 element tree 中直到 unmount。Syncfusion 内部 Ticker 在 RenderObject 被 dispose 后仍尝试 markNeedsLayout
- 修复: deactivate 中用
addPostFrameCallback调度 setState,异步触发 rebuild 把 chart 替换为 placeholder- 不在 build 阶段同步 setState(避免 "setState called during build" + GlobalKey 重复)
- 保证 chart 在 dispose 前被替换(避免 "disposed RenderObject mutated")
- 影响范围: 所有使用 SafeChartWidget 的页面(数据管理、字体管理、缓存分析等)
修复2:每日心情卡片展开后点击收起无反应
- 根因:
FortuneState.copyWith的expandedDate: clearExpanded ? null : (expandedDate ?? this.expandedDate)在传null时被null ?? this.expandedDate回退到旧值,导致收起时 expandedDate 永远不会被清空 - 修复: toggleExpanded 中显式设置
clearExpanded: shouldClear走清空分支 - 影响范围: 每日心情页面所有卡片的展开/收起交互
修改文件
lib/shared/widgets/charts/safe_chart_widget.dart— deactivate 调度 postFrameCallbacklib/features/daily_fortune/providers/fortune_provider.dart— toggleExpanded 传 clearExpanded
[v6.20.9] - 2026-06-07
🐛 Bug修复 — 数据管理返回后双重错误 + 每日心情卡片展开/收起 ParentDataWidget
修复1:数据管理页面返回后 "Duplicate GlobalKeys" + "setState called during build" 双重错误
- 根因:上一版 v6.20.8 修复图表 disposed 时,在
SafeChartWidget.deactivate()中增加setState(() {})强制重建。该方案存在两个隐患:deactivate可能被框架在 build 阶段触发 → 抛 "setState() or markNeedsBuild() called during build"- 错误的 dirty 标记污染 widget tree → 引发 "Duplicate GlobalKeys detected in widget tree"
- 修复:移除
deactivate()中的setState调用,仅设置_deactivated = true和_ready = false标志位,下次 build 自动渲染占位符(无需重建) - 影响范围:所有使用 SafeChartWidget 的页面
修复2:每日心情页面卡片展开/收起 "ParentDataWidget Expanded(flex: 1)" 错误
- 根因:
_buildActionButton内部返回Expanded(child: GestureDetector(...)),分享按钮处用AnimatedScale > AnimatedOpacity > _buildActionButton(...)包裹。AnimatedScale/AnimatedOpacity均为 RenderObjectWidget(RenderAnimatedScale / RenderAnimatedOpacity),它们会截断 RenderFlex 父级链。当Expanded试图给子 RenderObject 应用FlexParentData时,发现父级是 RenderAnimatedOpacity 而非 RenderFlex,触发 "ParentData of incompatible type" 错误 - 修复:
- 重构
_buildActionButton不再包Expanded,由调用方决定是否用Expanded包裹 - 在
_buildActionButtons中显式使用Expanded作为 Row 的直接子节点,分享按钮的AnimatedScale/AnimatedOpacity仅包裹按钮内容 - 顺手为按钮文本添加
Flexible+maxLines: 1+overflow: ellipsis防止长文本溢出
- 重构
- 影响范围:每日心情页面卡片展开后的分享按钮交互
修改文件
lib/shared/widgets/charts/safe_chart_widget.dart— 移除 deactivate 中的 setStatelib/features/daily_fortune/presentation/daily_fortune_page.dart— 重构 _buildActionButton,去除 Expanded 内嵌
[v6.20.8] - 2026-06-06
🐛 Bug修复 — 每日心情卡片展开收起 + 图表disposed增强保护
修复1:每日心情卡片展开后无法收起 + ParentDataWidget Expanded + Duplicate GlobalKeys
- 根因:
AnimatedCrossFade/AnimatedSize在动画期间同时保留新旧两个子 widget 树,导致:1)Expanded的FlexParentData被应用到非 Flex 的 RenderObject;2)flutter_animate的.animate()内部使用 GlobalKey,在 SliverList 回收重建时产生 Duplicate GlobalKeys - 修复:
- 移除
AnimatedCrossFade,改用直接条件渲染(isExpanded ? expanded : collapsed),从根本上避免两个子 widget 同时存在 - 移除
.animate()入场动画,消除 flutter_animate GlobalKey 冲突 - 移除
RepaintBoundary上的GlobalKey,改用visitChildElements查找RenderRepaintBoundary实现分享截图
- 移除
- 影响范围:每日心情页面卡片展开/收起、分享截图功能
修复2:数据管理页面返回后 RenderChartFadeTransition disposed 报错(增强保护)
- 根因:
SafeChartWidget的deactivate()仅设置_ready = false,但未触发setState重建,导致 Syncfusion 图表 widget 在 unmount 阶段仍存在于 element tree 中 - 修复:在
deactivate()中增加setState(() {})调用,强制 element 在 unmount 前重建为占位符 - 影响范围:所有使用 SafeChartWidget 的页面
修改文件
lib/features/daily_fortune/presentation/daily_fortune_page.dart— 移除 AnimatedCrossFade,改用条件渲染;移除 .animate();移除 GlobalKeylib/shared/widgets/charts/safe_chart_widget.dart— deactivate 中增加 setState 强制重建 =======
[v6.20.8] - 2026-06-06
🛡️ 后端API返回值类型安全修复
问题
后端API返回的JSON数值字段可能是 int、double 或 String 类型,使用 as int? 强转会在遇到非int类型时抛出 TypeError,导致应用崩溃。
修复规则
json['field'] as int? ?? 0→(json['field'] as num?)?.toInt() ?? 0data['field'] as int? ?? 0→(data['field'] as num?)?.toInt() ?? 0data?['field'] as int? ?? 0→(data?['field'] as num?)?.toInt() ?? 0json['field'] as int?(无默认值) →(json['field'] as num?)?.toInt()
修复范围(30+文件)
- auth/models/ —
user_model.dart(UserModel/UserTitle/UserVerification/UserVip/UserCloudSpace/UserDevice/UserExtra) - auth/services/ —
user_security_service.dart(code/expireTime/expireSeconds/id字段) - mine/user_center/models/ —
user_center_models.dart(PublicProfileModel/InteractionRecord/HeatmapEntry/DashboardModel) - mine/user_center/presentation/ —
public_profile_page.dart,learning_center_page.dart,learning_heatmap.dart - mine/user_center/providers/ —
coin_provider.dart,interaction_provider.dart,learning_progress_provider.dart,tag_cloud_provider.dart - mine/user_center/services/ —
user_center_service.dart,account_insights_service.dart - mine/achievement/ —
achievement_models.dart,badge_provider.dart,achievement_service.dart,achievement_page.dart,checkin_page.dart - mine/settings/ —
permission_management_page.dart - core/network/ —
api_interceptor.dart - core/services/ —
token_service.dart,permission_service.dart,settings_export_service.dart,feature_flag_service.dart,image_cache_metadata_service.dart,ip_location_service.dart - core/services/readlater/ —
readlater_device_sync_service.dart,readlater_collab_service.dart,readlater_sync_service.dart,safe_sharing_receiver.dart - discover/ —
hot_api_service.dart,rss_service.dart,tool_search_page.dart,tool_list_page.dart,china_colors_page.dart,ocr_tool_page.dart,readlater_folder_service.dart,chat_migration_service.dart,chat_message.dart,hot_item.dart,custom_translate_api.dart,hanzi_result.dart,chat_sentence_card_bubble.dart - file_transfer/ —
ws_p2p_service.dart,transfer_signaling_handler.dart,usb_transport_service.dart,webrtc_service.dart,ws_relay_service.dart,ws_relay_resume_handler.dart,ws_relay_chunk_assembler.dart,tcp_socket_service.dart,transfer_api_service.dart,transfer_task.dart,transfer_message.dart,transfer_device.dart,signaling_service.dart,ip_location_service.dart,ip_location_result.dart,voice_message_data.dart,cloud_cache_record.dart,offline_queue_item.dart,cloud_cache_service.dart,delivery_receipt_service.dart,localsend_dto.dart,canvas_document.dart,stroke.dart,qr_pairing_service.dart,file_transfer_device_actions.dart - home/providers/readlater/ —
readlater_provider.dart
特殊处理
ip_location_result.dart— 字段名num与Dart类型名冲突,改用_parseIntField()辅助方法
Stashed changes
[v6.20.7] - 2026-06-06
<<<<<<< Updated upstream
🐛 Bug修复 — 图表disposed全量修复 + 每日心情GlobalKey冲突 + 搜索页返回按钮
修复1:全量替换 DeferredBuilder → SafeChartWidget,彻底解决 RenderChartFadeTransition disposed 报错
- 根因:项目中9个文件(20处图表)仍使用保护不足的
DeferredBuilder,缺少_tearingDown标志。页面返回/切换时 Syncfusion 内部CustomLayoutBuilderElement.unmount触发已 disposed 的RenderChartFadeTransition.markNeedsLayout - 修复:将所有
DeferredBuilder替换为SafeChartWidget,其三重保护机制(延迟渲染 + RepaintBoundary + dispose前替换)可有效防止此类错误 - 影响范围:数据管理、权限管理、成就中心、闲情逸致、翻译插件、稍后读统计、内容查重、收藏/积分/学习统计等9个页面的20处图表
修复2:每日心情页面 GlobalKey 重复 + ParentDataWidget Expanded 报错
- 根因:
RepaintBoundary使用GlobalKey,在AnimatedSize展开/收起动画期间,旧 widget 尚未完全卸载而新 widget 已挂载,导致同一 GlobalKey 同时存在于两个 Column 中 - 修复:移除
RepaintBoundary上的GlobalKey,改用visitChildElements遍历 element tree 查找RenderRepaintBoundary实现分享截图,从根本上避免 GlobalKey 冲突 - 影响范围:每日心情页面卡片展开、分享截图功能
修复3:搜索页面缺少返回按钮
- 根因:搜索页面使用自定义搜索栏,只有"取消"文字按钮,没有返回箭头按钮,不符合 iOS 导航规范
- 修复:在搜索栏左侧添加
AdaptiveBackButton返回按钮 - 影响范围:搜索页面导航
修改文件
lib/features/mine/settings/presentation/data_management_page.dart— DeferredBuilder → SafeChartWidgetlib/features/mine/settings/presentation/privacy/permission_management_page.dart— DeferredBuilder → SafeChartWidgetlib/features/mine/achievement/presentation/achievement_page.dart— DeferredBuilder → SafeChartWidgetlib/features/tool_center/leisure/presentation/pages/leisure_settings_sections.dart— DeferredBuilder → SafeChartWidgetlib/features/mine/settings/presentation/plugin/translate_plugin_page.dart— DeferredBuilder → SafeChartWidgetlib/features/discover/presentation/pages/readlater_stats_page.dart— DeferredBuilder → SafeChartWidget(6处)lib/features/check/presentation/check_page.dart— DeferredBuilder → SafeChartWidgetlib/features/tool_center/statistics/presentation/widgets/favorite_stats_tab.dart— DeferredBuilder → SafeChartWidget(3处)lib/features/tool_center/statistics/presentation/widgets/coin_stats_tab.dart— DeferredBuilder → SafeChartWidget(3处)lib/features/tool_center/statistics/presentation/widgets/learning_stats_tab.dart— DeferredBuilder → SafeChartWidget(2处)lib/features/daily_fortune/presentation/daily_fortune_page.dart— 移除 GlobalKey,改用 visitChildElements 查找 RepaintBoundarylib/features/search/presentation/search_page.dart— 添加 AdaptiveBackButton =======
🌐 UserCenter子组件国际化 & Catcher2弹窗优化
问题1: UserCenter子组件硬编码中文
account_section.dart— 5处硬编码中文(账户与数据/账户设置/离线模式/缓存管理/调试信息)profile_header_row.dart— 12处硬编码中文(审核中/编辑/编辑资料/修改用户名/修改昵称/修改签名/修改头像/用文字点亮生活的每一刻等)edit_field_bottom_sheet.dart— 9处硬编码中文(取消/修改xxx/保存/请输入xxx/成功/失败/好的/xxx修改成功/修改失败)public_profile_page.dart— 40处硬编码中文(用户主页/返回/用户不存在/重试/匿名用户/积分/签到/文章/收藏/关注/私信/分享主页/屏蔽用户/个人简介/头衔等级/新手/学徒/熟练工/专家/大师/当前积分/活跃数据/签到x次/笔记x篇/点赞x次/评论x条/浏览x次/稍后读x等)
修复1
- t_profile.dart — 新增40个翻译键(accountAndData/editProfile/edit/editBio/save/pleaseInput/modifySuccess/modifyFailed/userProfile/goBack/userNotExist/retry/anonymousUser/articles/follow/followed/theUser/privateMessage/gotIt/shareProfile/blockUser/personalBio/titleLevel/currentPoints/activeData/beginner/apprentice/skilled/expert/master/signInCount/noteCount/likeCount/commentCount/viewCount/readLaterCount/modifyField/pleaseInputField/fieldModifySuccess/fieldModifyFailed/debugInfo/defaultBio)
- 14种语言文件 — zh_cn/en/zh_tw/ja/ko/fr/de/es/it/pt/ru/ar/hi/bn 均已添加对应翻译
- 4个组件文件 — 全部替换硬编码中文为
tp.xxx翻译键引用
问题2: Catcher2溢出捕获弹窗优化
- 错误信息显示字数上限300太短,大部分错误信息被截断
- 复制确认弹窗显示冗余信息(错误ID)
- 弹窗中文面向开发者不够通用
修复2
- 显示字数上限 — 从300提升至2000,完整显示大部分错误信息
- 复制确认弹窗 — 简化为"已复制到剪贴板",移除错误ID显示
- 弹窗英文化 — '⚠️ 应用异常'→'App Error'、'📋 复制详情'→'Copy Details'、'忽略'→'Dismiss'、'确认'→'Confirm'、'好的'→'OK'、'时间:'→'Time:'
修改文件
lib/l10n/types/t_profile.dart— 新增40个翻译键+toMap+fromMaplib/l10n/languages/zh_cn.dart— 新增中文翻译lib/l10n/languages/en.dart— 新增英文翻译lib/l10n/languages/zh_tw.dart— 新增繁体中文翻译lib/l10n/languages/ja.dart/ko.dart/fr.dart/de.dart/es.dart/it.dart/pt.dart/ru.dart/ar.dart/hi.dart/bn.dart— 新增英文占位翻译lib/features/mine/user_center/presentation/widgets/account_section.dart— 5处硬编码→翻译键,新增tp参数lib/features/mine/user_center/presentation/widgets/profile_header_row.dart— 12处硬编码→翻译键,新增tp参数lib/features/mine/user_center/presentation/widgets/edit_field_bottom_sheet.dart— 9处硬编码→翻译键lib/features/mine/user_center/presentation/public_profile_page.dart— 40处硬编码→翻译键,新增tp参数lib/features/mine/user_center/presentation/user_center_page.dart— 更新组件调用传递tp参数lib/core/services/catcher2_config_service.dart— 字数上限300→2000、弹窗英文化、复制确认简化
Stashed changes
[v6.20.6] - 2026-06-06
<<<<<<< Updated upstream
🐛 Bug修复 — 日签卡片布局 + TiltController + Syncfusion图表 + 引导页路由
修复1:日签卡片页面 ParentDataWidget 嵌套 Expanded 错误
- 根因:
CardRenderer中4种样式(默认/大字报/中国风/毛玻璃)的内容区域方法返回Expanded > SingleChildScrollView,而外层调用处已经用Expanded包裹,导致Expanded ← Expanded嵌套,两个 ParentDataWidget 竞争同一个 RenderObject - 修复:移除内层
Expanded,让SingleChildScrollView直接作为外层Expanded的子组件 - 影响范围:日签卡片页面4种卡片样式
修复2:首页 TiltController 关闭后仍发送事件崩溃
- 根因:
flutter_tilt包 4.0.2 的TiltController.emit()未检查 StreamController 是否已关闭。当 widget dispose 后仍有 pointer 事件到达时,向已关闭的 StreamController 写入导致Bad state: Cannot add new events after calling close - 修复:在所有
Tilt/Tilt.base组件上设置enableGestureTouch: false,仅保留视觉效果,规避包内部 bug - 影响范围:首页日签卡片、日签卡片页面、文件传输设备卡片
修复3:Syncfusion 图表 disposed RenderObject mutation 错误
- 根因:Syncfusion 内部
CustomLayoutBuilderElement.unmount在 element 卸载阶段调用updateCallback,触发已 disposed 的RenderChartFadeTransition.markNeedsLayout - 修复:在
SafeChartWidget和DeferredBuilder中增加deactivate()生命周期保护,在组件从树中移除时立即停止渲染图表 - 影响范围:所有使用 Syncfusion 图表的页面(学习中心、成就、统计等)
修复4:关于页面点击"使用引导"GlobalKey 断言错误
- 根因:GoRouter redirect 逻辑在引导页完成后拦截
/onboarding路由并重定向到首页,导致 Navigator 栈异常触发 GlobalKey 保留断言 - 修复:新增
AppRoutes.onboardingReview(带?review=true参数),redirect 逻辑对带此参数的请求放行;所有主动导航到引导页的入口改用新路由 - 影响范围:关于页、通用设置页、更多设置页
修改文件
lib/features/daily_card/presentation/widgets/card_renderer.dart— 移除4处内层 Expandedlib/features/home/presentation/home_daily_card.dart— Tilt 添加 enableGestureTouch: falselib/features/daily_card/presentation/daily_card_page.dart— Tilt 添加 enableGestureTouch: falselib/features/file_transfer/presentation/widgets/device_card.dart— Tilt 添加 enableGestureTouch: falselib/shared/widgets/charts/safe_chart_widget.dart— 增加 deactivate 保护lib/shared/widgets/containers/deferred_builder.dart— 增加 deactivate 保护lib/core/router/app_routes.dart— 新增 onboardingReview 路由常量lib/core/router/app_router.dart— redirect 逻辑支持 review 参数放行lib/features/mine/profile/presentation/about_page.dart— 使用 onboardingReviewlib/features/mine/settings/presentation/general/general_settings_page.dart— 使用 onboardingReviewlib/features/mine/settings/presentation/more_settings_page.dart— 使用 onboardingReview =======
🐛 安卓端长按桌面图标快捷方式闪退修复
问题
安卓端长按桌面图标,点击弹出的快捷方式(主题个性化/通用设置),App直接卡死闪退。鸿蒙端和iOS端正常。
根因
quick_actions_android插件在冷启动时,initialize()回调可能在 GoRouter 完全初始化之前被调用- 此时
appRouter.push(route)执行时路由系统未就绪,抛出未捕获异常导致闪退 _handleAction方法同步执行onAction!(route),无延迟和异常保护
修复
_handleAction添加延迟机制 — 使用Future.delayed(500ms)确保路由系统初始化完成后再执行导航_handleAction添加异常捕获 —try-catch包裹onAction!调用,防止未捕获异常闪退app.dart回调添加addPostFrameCallback— 安卓端使用WidgetsBinding.instance.addPostFrameCallback确保首帧渲染完成后再导航app.dart回调添加异常保护 — 整个回调用try-catch包裹,双重保险
修改文件
lib/core/services/device/quick_actions_service.dart—_handleAction延迟+异常捕获lib/app/app.dart—_initQuickActions回调 addPostFrameCallback+异常保护
Stashed changes
[v6.20.5] - 2026-06-06
<<<<<<< Updated upstream
🐛 Bug修复 — 句子详情GlobalKey重复崩溃 + 进度美化LateInitializationError
修复1:句子详情面板GlobalKey重复导致iOS启动卡死崩溃
- 根因:
detailCardKeyProvider是 RiverpodProvider<GlobalKey>,全局只创建一个 GlobalKey 实例。在StatefulShellRoute.indexedStack+KeepAlivePanelWrapper架构下,多个面板实例同时存活时共享同一个 GlobalKey,触发 "Multiple widgets used the same GlobalKey" 错误导致应用崩溃 - 修复:移除
detailCardKeyProvider全局 Provider,改为在SentenceDetailPanel的 State 中创建实例级 GlobalKey,通过参数传递给SentenceDetailContent和SentenceDetailActions - 影响范围:句子详情面板、截图分享功能、宽屏分屏布局
修复2:进度美化页面 LateInitializationError
- 根因:
_args声明为late变量,在addPostFrameCallback中初始化,但build()在回调执行前被调用,访问未初始化的_args导致崩溃 - 修复:将
_args改为带默认值的普通变量,在didChangeDependencies()中首次初始化,避免 late 访问异常 - 影响范围:进度美化页面
修复3:objective_c FFI 加载失败(模拟器)
- 根因:
path_provider_foundation依赖的objective_c.framework构建缓存为 iOS 设备架构,模拟器需要 iOS-simulator 架构 - 修复:
flutter clean+ 删除 Pods + 重新构建 - 影响范围:iOS 模拟器上的路径获取、缓存操作
修改文件
lib/features/home/presentation/panels/sentence_detail_provider.dart— 移除detailCardKeyProviderlib/features/home/presentation/panels/sentence_detail_panel.dart— 新增实例级_cardKey,传递给子组件lib/features/home/presentation/panels/sentence_detail_content.dart— 接收cardKey参数替代全局 Providerlib/features/home/presentation/panels/sentence_detail_actions.dart— 接收cardKey参数替代全局 Providerlib/features/progress/presentation/progress_beautify_page.dart— 修复_argslate 初始化错误 =======
🐛 鸿蒙端多场景卡死修复
问题
- SearchType.validateAll 逐条日志导致鸿蒙端IDE卡死 — 每个不支持的类型单独调用
Log.w(),产生大量日志输出(11条重复格式警告),在鸿蒙端debug模式下导致IDE卡死 - MissingPluginException 卡死 —
checkPendingManageStorage方法在鸿蒙端没有原生实现,调用时抛出MissingPluginException - 个人中心页面卡死 —
_loadDashboard()静默吞掉异常;_dashboardData?['score'] as int?后端返回String时抛TypeError;UserStatsBar中同样存在类型安全问题;debug日志在鸿蒙端加剧卡死
修复
- SearchType.validateAll 合并日志输出 — 将逐条
Log.w()改为合并为单条日志输出,避免鸿蒙端debug模式IDE卡死 - 鸿蒙端跳过数据管理通道初始化 —
_initDataManagementChannel()在鸿蒙端直接 return,避免MissingPluginException - _loadDashboard() 异常日志 —
catch (_)改为catch (e, st)并调用Log.e()记录异常,便于排查 - score 类型安全 —
_dashboardData?['score'] as int?改为(_dashboardData?['score'] as num?)?.toInt(),兼容后端返回String/int/double - UserStatsBar 类型安全 — 所有 dashboard 数据访问改为
(data['key'] as num?)?.toInt() ?? defaultValue,防止类型转换崩溃 - 删除 UserStatsBar debug 日志 — 移除每次构建时的
Log.d()调用,减少鸿蒙端日志输出压力
修改文件
lib/features/discover/models/search_type.dart— validateAll 合并日志lib/app/app.dart— 鸿蒙端跳过数据管理通道lib/features/mine/user_center/presentation/user_center_page.dart— 异常日志 + score类型安全lib/features/mine/user_center/presentation/widgets/user_stats_bar.dart— 类型安全 + 删除debug日志
Stashed changes
[v6.20.4] - 2026-06-06
<<<<<<< Updated upstream
🐛 Bug修复 — 设备在线数量显示0 + 每日运势GlobalKey崩溃
修复1:设备概览在线数量始终显示0
- 根因:后端
is_online字段5分钟无活动即置0,isActiveRecently要求is_online==1且7天内活跃,导致所有设备均不满足条件,在线计数为0 - 修复:
UserDevice新增getIsActiveByTime前端兜底getter,根据lastActiveTime判断7天内是否活跃 - 策略:
DeviceState.onlineCount优先后端isActiveRecently,后端全部返回0时用前端时间兜底 - 影响范围:设备概览卡片、设备列表分组、当前在线计数
修复2:每日运势页面GlobalKey重复导致崩溃
- 根因:
_fortuneCardKey为单一 GlobalKey,展开/收起切换时旧卡片未卸载新卡片已挂载,同一 key 同时存在于两个 Column - 修复:将单一
_fortuneCardKey改为Map<String, GlobalKey>按日期索引,每个 FortuneRecord 拥有独立 GlobalKey - 影响范围:运势卡片展开/收起、分享截图功能
修改文件
lib/features/auth/models/user_model.dart— 新增getIsActiveByTimegetterlib/features/mine/user_center/providers/device_provider.dart—onlineCount添加前端兜底lib/features/mine/user_center/presentation/devices/device_overview_card.dart— currentDevice 获取添加兜底lib/features/mine/user_center/presentation/my_devices_page.dart— 设备分组逻辑添加兜底lib/features/daily_fortune/presentation/daily_fortune_page.dart— GlobalKey 改为按日期索引的 Map =======
🐛 引导页相关Bug修复
修复
- 鸿蒙端/安卓端通用设置"重新打开引导页"无效 — 鸿蒙端 onboarding 路由未在 OHOS 路由注册表中注册,
appGo导航失败。改为鸿蒙端直接使用Navigator.push推送OnboardingPage,安卓端保持原有路由导航 - 鸿蒙端杀后台重启后引导页重复弹出 —
OhosAppShell._checkOnboarding()未检查KvStorage.isReady,Hive 未初始化完成时isFirstLaunch/shouldShowOnboarding默认返回 true,导致引导页每次都弹出。添加isReady检查,未就绪时延迟 300ms 重试
修改文件
lib/features/mine/settings/presentation/general/general_settings_page.dart—_reopenOnboarding()增加鸿蒙端平台判断lib/core/layout/ohos_app_shell.dart—_checkOnboarding()添加KvStorage.isReady检查
Stashed changes
[v6.20.3] - 2026-06-06
<<<<<<< Updated upstream
🧹 依赖清理 — 移除8个未使用的三方库
移除的依赖
| 依赖名 | 原用途 | 移除原因 |
|---|---|---|
animations |
Material过渡动画 | lib/中0处导入 |
animate_do |
常用入场/出场动画 | lib/中0处导入 |
value_layout_builder |
值变化触发布局重建 | lib/中0处导入 |
flutter_advanced_canvas_editor |
高级画布编辑器 | lib/中0处导入 |
flutter_blue_plus |
蓝牙BLE通信 | lib/中0处导入(仅ohos端有) |
http_cache_file_store |
Dio文件缓存存储 | lib/中0处导入/引用 |
dartx |
集合扩展方法 | lib/中0处导入(firstOrNull/lastOrNull已为Dart 3.0+内置) |
vector_math |
向量数学运算 | lib/中0处导入(Flutter传递依赖,无需显式声明) |
保留的边界依赖
json_annotation— json_serializable代码生成需要hive_ce— hive_flutter传递依赖,显式声明做版本锁定
文档更新
iOS_macOS_Developer_Guide.mdv9 — 删除差异对照表中flutter_blue_plus/flutter_nfc_kit过时条目
修改文件
pubspec.yaml— 移除7个未使用依赖pubspec.ohos.yaml— 移除8个未使用依赖(含flutter_blue_plus)pubspec.macos.yaml— 移除7个未使用依赖iOS_macOS_Developer_Guide.md— 更新差异对照表和版本日志 =======
🔧 鸿蒙端快捷方式修复 + 布局溢出弹窗静默处理 + 权限管理修复 + 注册弹窗多语言 + 日志精简
修复
- 鸿蒙端桌面长按快捷方式不生效 —
module.json5中 metadata name 从ohos.shortcut.config修正为ohos.ability.shortcuts(符合华为官方文档规范) - shortcuts.json 缺少 moduleName — 两个快捷方式的 wants 中补充
moduleName: "entry"字段,确保鸿蒙系统能正确解析快捷方式目标 - 冷启动快捷方式不跳转 —
EntryAbility.ets的configureFlutterEngine末尾增加待处理快捷方式检查,冷启动时也能正确通知 Flutter 侧跳转 - 布局溢出错误弹窗干扰 — Catcher2 的
_ConsoleLogHandler和CopyableDialogReportMode均增加 overflow/RenderFlex 错误过滤,溢出错误不再弹窗、不打印详情,静默处理 - 鸿蒙端权限管理页面点击相机无反应/定位卡死 —
isPlatformRelevant鸿蒙端过滤不支持的权限(location/storage);checkStatus()和requestPermission()添加鸿蒙端超时保护(3秒/5秒) - 注册页面弹窗多语言 —
_showExperimentalFeatureDialog()和_showRegisterInfo()中7处硬编码中文替换为翻译键,14种语言文件同步更新 - 日志量精简 —
appLoggerprinter 改为简洁模式(关闭颜色/emoji/调用栈);LogCategory默认级别提高(ui/network/router/storage/device/search/provider/onboarding/general 从debug/info提高到warning,chart/haptic/push提高到error)
修改文件
ohos/entry/src/main/module.json5— metadata name 修正ohos/entry/src/main/resources/base/profile/shortcuts.json— 补充 moduleNameohos/entry/src/main/ets/entryability/EntryAbility.ets— 冷启动快捷方式通知lib/core/services/catcher2_config_service.dart— 布局溢出错误静默处理lib/core/services/auth/permission_service.dart— isPlatformRelevant 鸿蒙端过滤 + 超时保护lib/features/auth/presentation/login_page.dart— 注册弹窗多语言lib/l10n/types/t_auth.dart— 新增7个翻译键lib/l10n/languages/*.dart— 14种语言文件同步更新lib/core/utils/logger.dart— 日志精简
Stashed changes
[v6.20.2] - 2026-06-06
📱 鸿蒙端占位页面体验优化 — 友好提示 + 功能介绍
优化
- 占位页面全面重构 — 将5个鸿蒙端占位页面(协作画布/屏幕共享/传输聊天/快速卡片/编辑器子页面)从简陋的"暂不支持"提示升级为完整的功能介绍页面
- 统一占位页面风格 — 提取
_OhosFeaturePlaceholder通用组件,统一emoji图标 + 功能名称 + 适配状态徽章 + 功能介绍 + 特性列表 + 返回按钮的布局 - 适配状态徽章 — 使用黄色圆点 + "该功能正在适配中" 替代原来的"鸿蒙端暂不支持XXX",语气更友好
- 功能介绍文案 — 每个占位页面增加功能描述和3-4条特性说明,让用户了解该功能的用途
- 编辑器子页面差异化 — 图片预览/图片裁剪/图片画廊/3D模型预览各自显示不同的emoji和功能介绍
- OhosNotFoundWidget 升级 — 404页面同步升级为统一设计风格
- 使用设计系统令牌 — 所有占位页面使用 AppTheme/AppSpacing/AppTypography/AppRadius 统一设计令牌,支持深色模式
鸿蒙端功能可行性分析
- 协作画布 — 依赖 flutter_webrtc(不支持鸿蒙),CRDT纯Dart可运行但无传输通道,保留占位
- 屏幕共享 — 依赖 flutter_webrtc + InAppScreenCapture(均不支持鸿蒙),保留占位
- 传输聊天 — Socket/WebSocket理论上可用,但文件传输依赖 nearby_service/localsend 等原生库不支持鸿蒙,保留占位
- 快速卡片 — 核心为纯Flutter组件,理论上可运行,但TTS/屏幕常亮/相册保存需降级处理,当前保留占位待验证
- 编辑器子页面 — 图片预览(photo_view)/画廊可能可用,裁剪(extended_image)/3D(flutter_3d_controller)需验证,保留占位
修改文件
lib/core/router/ohos_placeholders.dart— 全面重构占位页面,提取通用组件,增加功能介绍
[v6.20.1] - 2026-06-06
🔧 跨平台编译修复 — Web/iOS/macOS三端编译通过
修复
- quill_native_bridge_windows 与 win32 6.x 不兼容 — 添加
dependency_overrides指向本地修补版packages/quill_native_bridge_windows(已适配win32 6.x API),解决macOS编译失败 - nearby_service_adapter 条件导出 — 拆分为
nearby_service_adapter_io.dart(原生平台)+nearby_service_adapter_web.dart(Web桩实现),解决Web编译时nearby_connections和dart:io不可用问题 - oauth_service.dart 平台抽象 —
Platform.isIOS/Platform.isMacOS替换为pu.isIOS/pu.isMacOS(项目平台抽象层),解决Web编译时dart:io不可用问题 - 缺失4个依赖包 — 在
pubspec.yaml/pubspec.macos.yaml/pubspec.ohos.yaml中补充nearby_connections/flutter_web_auth/google_sign_in/sign_in_with_apple
新增文件
lib/features/file_transfer/services/transport/nearby_service_adapter_io.dart— 原生平台nearby_service适配器实现lib/features/file_transfer/services/transport/nearby_service_adapter_web.dart— Web平台桩实现(所有方法返回false/空)lib/features/file_transfer/services/transport/nearby_connections_web.dart— Web平台nearby_connections类型桩lib/features/file_transfer/services/transport/dart_io_stub.dart— Web平台dart:io桩(备用)
编译结果
- ✅ Web:
build/web编译成功(341.5s) - ✅ iOS:
build/ios/iphoneos/Runner.app(100.5MB) 编译成功 - ✅ macOS:
build/macos/Build/Products/Release/xianyan.app(200.2MB) 编译成功
修改文件
pubspec.yaml— 补充4个依赖 + quill_native_bridge_windows path overridepubspec.macos.yaml— 同步补充4个依赖 + quill_native_bridge_windows path overridepubspec.ohos.yaml— 同步补充4个依赖lib/features/file_transfer/services/transport/nearby_service_adapter.dart— 改为条件导出lib/features/auth/services/oauth_service.dart— dart:io → 平台抽象层
[v6.20.0] - 2026-06-05
📱 文件传输 — 集成nearby_connections实现P2P近场传输
新增
- nearby_connections P2P传输引擎 — 在NearbyServiceAdapter中集成Google Nearby Connections库,实现蓝牙发现+Wi-Fi Direct传输双引擎
- 附近设备发现入口 — 设备配对页面"其他"标签新增"📱 附近设备"卡片(仅Android/iOS显示)
- PairingMethod.nearbyP2p — 新增配对方式枚举值,标识nearby_connections P2P连接
- DegradationManager.nearbyP2p — 新增平台能力检测,非Android/iOS平台自动降级提示
- P2P传输进度流 — NearbyP2pTransferProgress类,实时跟踪文件传输进度
- P2P设备发现流 — NearbyP2pDeviceInfo类,管理设备发现/连接/断开状态
- 14种语言翻译 — 新增nearbyDiscovery/nearbyDiscoveryDesc翻译键
修复
- NearbyConnections API调用修正 —
NearbyConnections()→Nearby()(nearby_connections包的正确单例类名) - PayloadStatus枚举修正 —
PayloadTransferUpdateStatus→PayloadStatus,COMPLETED→SUCCESS(匹配包实际API) - P2P权限请求修正 — 使用permission_handler替代不存在的Nearby权限方法,支持位置/蓝牙/附近Wi-Fi设备权限
- startDiscovery参数修正 — 第一个参数为userNickName而非serviceId
- OnEndpointLost回调修正 — endpointId参数类型为
String?(可空) - requestConnection回调补全 — 添加必需的onConnectionInitiated/onConnectionResult/onDisconnected回调
- Switch穷举补全 — device_discovery_provider/pairing_service中补充PairingMethod.nearbyP2p分支
新增依赖
nearby_connections: ^4.1.1— Google Nearby Connections(蓝牙发现+Wi-Fi Direct传输,仅Android/iOS)
修改文件
lib/features/file_transfer/services/transport/nearby_service_adapter.dart— 双引擎架构(nearby_service + nearby_connections)lib/features/file_transfer/presentation/pages/device_pairing_page.dart— 新增附近设备发现入口lib/features/file_transfer/models/transfer_enums.dart— 新增PairingMethod.nearbyP2plib/features/file_transfer/services/degradation_manager.dart— 新增nearbyP2p平台能力lib/features/file_transfer/providers/device_discovery_provider.dart— 补充nearbyP2p switch分支lib/features/file_transfer/services/pairing_service.dart— 补充nearbyP2p switch分支lib/l10n/types/t_profile.dart— 新增nearbyDiscovery/nearbyDiscoveryDesc字段lib/l10n/languages/*.dart— 14种语言文件新增翻译pubspec.yaml— 新增nearby_connections依赖
[v6.19.4] - 2026-06-05
🔧 App Store审核修复 — 移除NFC/蓝牙/Web登录,修复注册流程
审核被拒问题修复
- Guideline 2.1 — NFC功能需演示视频 → 移除全部NFC功能代码、权限声明和依赖(flutter_nfc_kit、ndef)
- Guideline 4 — 登录跳转外部浏览器 → 移除"Web登录"按钮(原跳转
https://tools.wktyl.com/web-login至系统浏览器) - Guideline 2.1(a) — 注册收不到验证码 → 修复注册流程:点击"下一步"进入验证码步骤时自动发送邮件验证码并启动倒计时,无需手动点击"重新发送"
- 蓝牙功能移除 → 蓝牙仅用于设备发现(非数据传输),已有6种替代配对方式,同步移除全部蓝牙代码、权限声明和依赖(flutter_blue_plus)
新增
- 注册页面Header区域增加 ℹ️ 提示按钮,点击显示温馨提示对话框:
- 闲言保持开放性,即使不登录也能体验大部分功能
- 服务器偶尔异常可能导致注册流程失败
- 我们会在后续更新中完善注册验证流程
移除功能
- NFC句子分享(NfcShareService)— 删除服务、Provider、UI按钮
- NFC设备配对(NfcPairingService)— 删除服务、配对入口
- 蓝牙BLE配对(BluetoothPairingService)— 删除服务、配对入口
- 附近用户发现(NearbyDiscoveryService + NearbyUsersSheet)— 删除服务、UI
- Web登录(跳转外部浏览器)— 删除登录页按钮和相关方法
移除的权限声明
- iOS: NFCReaderUsageDescription、com.apple.developer.nfc.readersession.formats、NSBluetoothAlwaysUsageDescription
- Android: NFC权限/特性、全部蓝牙权限(BLUETOOTH/BLUETOOTH_ADMIN/BLUETOOTH_SCAN/BLUETOOTH_CONNECT/BLUETOOTH_ADVERTISE/bluetooth_le)
- HarmonyOS: ACCESS_BLUETOOTH权限、permission_nfc_reason、permission_bluetooth_reason
移除的依赖
- flutter_nfc_kit ^3.6.0
- ndef
- flutter_blue_plus ^2.1.0
修改文件(主要)
lib/features/auth/presentation/register_section.dart— 自动发送验证码 + 提示对话框lib/features/auth/presentation/login_page.dart— 移除Web登录按钮lib/features/file_transfer/— 移除NFC/蓝牙配对服务和UIlib/core/services/nfc/— 整个目录删除lib/core/services/bluetooth/— 整个目录删除lib/features/home/presentation/nearby_users_sheet.dart— 删除- iOS/Android/HarmonyOS 权限配置文件 — 移除NFC/蓝牙权限
- 14种语言文件 — 移除NFC/蓝牙翻译字符串
- 协议HTML文件 — 移除NFC/蓝牙权限说明(permission-usage V6.6、privacy-policy V6.7、app-introduction V6.6)
[v6.19.3] - 2026-06-05
📝 文档更新 — 移除NFC和蓝牙相关协议引用
变更说明
因NFC和蓝牙功能已从应用中移除,同步更新所有协议HTML文件中的相关引用:
- permission-usage.html — 移除"蓝牙权限"章节(原第五节),重新编号后续章节(附近设备权限→第五节,网络权限→第六节,权限管理原则→第七节,权限变更→第八节,联系方式→第九节,法律适用→第十节),版本号 V6.5 → V6.6
- privacy-policy.html — 业务功能映射表中"文件传输助手"的权限从"蓝牙/位置/附近设备权限"更新为"位置/附近设备权限",版本号 V6.6 → V6.7
- app-introduction.html — 文件传输助手功能列表移除"蓝牙传输",新增"二维码配对传输",更新日期
未修改文件(无NFC/蓝牙引用)
- beginner-guide.html、disclaimer.html、user-service-agreement.html、account-agreement.html、member-benefits.html、children-privacy.html、dev-team.html、index.html
[v6.19.2] - 2026-06-05
🐛 Bug修复 — macOS 编译运行关键问题修复
修复问题
- Hive 初始化失败导致 KvStorage 全部降级 — 根因:
HiveSafeAccess使用hive_flutter的Hive.initFlutter()初始化,但用hive_ce的Hive.openBox()打开 Box,两个包的 Hive 单例不同,导致所有 Box 打开失败:- 统一所有代码使用
hive_flutter包,替换全部hive_ce引用 - 涉及 8 个文件的 import 替换
- 统一所有代码使用
- KvStorage 未初始化警告 —
GeneralSettingsNotifier.build()同步调用约 48 次KvStorage.getBool/getString/getInt,当 Hive 初始化失败时产生大量警告:- 改为延迟加载模式(与
ThemeSettingsNotifier一致),先返回默认值,再通过Future.microtask从存储加载
- 改为延迟加载模式(与
- macOS Release 构建签名失败 —
Release.entitlements中keychain-access-groups需要开发者证书签名:- 设置
CODE_SIGN_IDENTITY = "-"(ad-hoc 签名) - 移除
keychain和keychain-access-groupsentitlements
- 设置
- macOS Impeller 未启用 —
LiquidGlassLayer需要 Impeller 渲染引擎,macOS 默认使用 Skia:- 在
Info.plist中添加FLTEnableImpeller = true启用 Impeller
- 在
- MissingPluginException: checkPendingManageStorage — 数据管理 MethodChannel 仅鸿蒙平台实现:
_initDataManagementChannel()添加!pu.isOhos判断,非鸿蒙平台跳过
- RenderFlex overflow 弹窗 — 布局溢出错误在 debug 模式下显示红色溢出指示器:
main.dart中FlutterError.onError拦截overflowed错误,仅打印日志不弹窗
- platformVersionImpl 导出冲突 —
platform_io_stub.dart和platform_io_native.dart都导出了platformVersionImpl:- 在
utils.dart的 export hide 列表中添加platformVersionImpl
- 在
修改文件
lib/core/storage/hive_safe_access.dart— 统一使用hive_flutter,移除hive_ce引用lib/core/services/data/backup_service.dart— import 替换hive_ce→hive_flutterlib/features/discover/services/rss_service.dart— import 替换lib/core/services/error/crash_monitor.dart— import 替换lib/features/tool_center/leisure/providers/leisure_bookmark_provider.dart— import 替换lib/features/mine/settings/presentation/data_management_export_mixin.dart— import 替换lib/features/mine/settings/presentation/data_management_backup_mixin.dart— import 替换lib/features/discover/services/exchange_rate_service.dart— import 替换lib/core/storage/database/app_database.dart— import 替换lib/features/mine/settings/providers/general_settings_provider.dart— 延迟加载模式lib/main.dart— FlutterError.onError 拦截 overflow 错误lib/app/app.dart— 数据管理通道添加平台判断lib/core/utils/utils.dart— 修复 platformVersionImpl 导出冲突macos/Runner.xcodeproj/project.pbxproj— CODE_SIGN_IDENTITY 设置 ad-hocmacos/Runner/Release.entitlements— 移除 keychain 权限macos/Runner/Info.plist— 启用 Impeller
[v6.19.1] - 2026-06-05
🐛 Bug修复 — FontSyncService API返回数据类型解析错误
修复问题
- FontSyncService 类型转换崩溃 —
fetchOnlineFonts()中result['data'] as List<dynamic>?抛出异常:- API
/api/font_sync/list返回data: {"fonts": [...], "count": N},data是Map而非List - 修复为兼容 Map 和 List 两种格式,优先从
data.fonts取字体列表 - 修复前:iPad运行时抛出
type '_Map<String, dynamic>' is not a subtype of type 'List<dynamic>?' in type cast,导致字体同步失败回退到本地数据
- API
修改文件
lib/features/mine/settings/services/font_sync_service.dart— 修复data字段类型解析逻辑
[v6.19.0] - 2026-06-05
📋 结构化日志 — LogCategory 按模块控制日志级别
新增功能
- LogCategory 枚举 — 在
logger.dart中新增LogCategory枚举,支持 17 个模块分类:- UI、网络、路由、存储、设备、认证、传输、搜索、图表、触觉、状态、服务、同步、离线、引导、推送、通用
- 每个分类有独立的默认日志级别(如 chart/haptic 默认 warning 减少噪音)
- 分类级别控制 — 支持动态调整每个分类的日志级别:
LogCategory.setLevel()设置单个分类级别LogCategory.setAllLevels()批量设置所有分类级别LogCategory.resetLevels()重置为默认级别LogCategory.exportCustomLevels()/importCustomLevels()支持持久化
- Log 方法扩展 —
Log.d/i/w/e/f方法新增可选LogCategory? category参数:- 向后兼容:不传 category 默认为
LogCategory.general - 日志输出自动添加分类标签(如
[网络],[路由]) - 分类级别过滤:低于分类当前级别的日志不输出到控制台(仍记录到内存缓冲区)
- 向后兼容:不传 category 默认为
- LogEntry 扩展 —
LogEntry新增category字段,支持按分类筛选 - 日志查看器分类筛选 — 日志查看器页面新增分类过滤栏,支持按模块筛选日志
- 日志级别设置页面 — 在通用设置"开发者"分组中新增"日志级别"入口:
- 展示所有分类及其当前级别
- 点击分类弹出级别选择器
- 提供"全部Debug"和"重置默认"快捷操作
- 自定义级别标记"自定义"标签
修改文件
lib/core/utils/logger.dart— 添加 LogCategory 枚举、修改 Log 方法签名、LogEntry 添加 categorylib/core/router/app_router.dart— Log 调用添加 LogCategory.routerlib/core/router/ohos_nav_bridge.dart— Log 调用添加 LogCategory.routerlib/core/router/ohos_route_types.dart— Log 调用添加 LogCategory.router/authlib/core/services/device/haptic_service.dart— Log 调用添加 LogCategory.hapticlib/core/services/device/device_info_service.dart— Log 调用添加 LogCategory.device/networklib/features/home/providers/home_provider.dart— Log 调用添加 LogCategory.providerlib/features/file_transfer/providers/transfer_notifier.dart— Log 调用添加 LogCategory.transferlib/main.dart— Log 调用添加对应分类(general/storage/haptic/ui/device/router/service/network/onboarding)lib/features/mine/settings/presentation/general/general_settings_sections.dart— 添加"开发者"分组lib/features/mine/settings/presentation/general/general_settings_page.dart— 添加 log_level 导航处理lib/features/mine/settings/presentation/general/log_level_settings_page.dart— 新建,日志级别设置页面lib/features/mine/settings/presentation/privacy/log_viewer_page.dart— 添加分类过滤栏和分类标签显示
[v6.18.0] - 2026-06-05
♿ 无障碍适配 — VoiceOver/TalkBack 支持
新增功能
- 无障碍服务 — 创建
AccessibilityService单例,管理系统无障碍状态检测、语义调试开关、语义标注辅助方法 - 通用设置-无障碍分组 — 在通用设置页面"显示"分组后新增"♿ 无障碍"分组,包含:
- 语义调试开关(开发者选项,可手动切换)
- 高对比度指示(跟随系统,只读)
- 减少动画指示(跟随系统,只读)
- 粗体文本指示(跟随系统,只读)
- 关键页面Semantics标注 — 为以下组件添加
Semantics(label/hint/value)标注,支持 iOS VoiceOver 和鸿蒙 TalkBack:- 首页句子卡片(
SentenceCard)— 朗读句子内容、作者、互动状态 - 排行榜项卡片(
RankItemCard)— 朗读排名、用户名、等级、数值 - 日签卡片页面(
DailyCardPage)— 朗读日签内容,保存/分享按钮标注
- 首页句子卡片(
- App初始化集成 —
app.dart中初始化 AccessibilityService,build 时同步系统无障碍状态
修改文件
lib/core/services/accessibility/accessibility_service.dart— 新建,无障碍服务lib/core/services/accessibility/accessibility_export.dart— 新建,导出文件lib/features/mine/settings/providers/default_settings.dart— 添加semanticsDebugEnabled默认值lib/features/mine/settings/providers/sub/general_fields_provider.dart— 添加semanticsDebugEnabled字段及持久化lib/features/mine/settings/providers/general_settings_provider.dart— 添加 getter/setterlib/features/mine/settings/presentation/general/general_settings_sections.dart— 添加无障碍分组lib/features/mine/settings/presentation/general/general_settings_page.dart— 处理语义调试开关事件lib/features/home/presentation/home_sentence_card.dart— 添加 Semantics 标注lib/shared/widgets/cards/rank_item_card.dart— 添加 Semantics 标注lib/features/daily_card/presentation/daily_card_page.dart— 添加 Semantics 标注lib/app/app.dart— 初始化 AccessibilityService + build 时同步状态
[v6.18.0] - 2026-06-05
🏗️ 架构增强 — 5项核心重构
1. PlatformCapability 接口抽象
- 新增
lib/core/utils/platform/platform_capability.dart— 平台能力注册表 - 定义 19 项能力键(localAuth/flutterVibrate/nfcShare/quickActions/homeWidget/backdropFilter/liquidGlass/heavyAnimation/pushNotification/filesystem/usbTransfer/bluetoothDiscovery/shareSheet/fileExport/gpu3d/gallerySave/webView3d/localNotification/calendar)
PlatformCapabilities.init()在 app 启动时根据平台注册能力supports(key)查询 +fallbackDescription(key)降级说明- 重构 11 个文件:my_devices_page/haptic_service/nfc_share_service/quick_actions_service/local_notification_service/notification_init_stub/glass_container/account_insights_sheet/home_widget_service/widget_provider/plugin_update_service
2. LogCategory 结构化日志
- 新增
LogCategory枚举,17 个模块分类(ui/network/router/storage/device/auth/transfer/search/chart/haptic/provider/service/sync/offline/onboarding/push/general) - 每个分类独立日志级别,chart/haptic 默认 warning 减少噪音
Log.d/i/w/e/f新增可选category参数,完全向后兼容- 日志输出自动添加分类标签(如
[网络]、[路由]) - 新增
lib/features/mine/settings/presentation/log_level_settings_page.dart— 日志级别配置页面 - 通用设置"开发者"分组新增"日志级别"入口
- 日志查看器新增分类筛选栏
3. SafeChartWidget 封装
- 新增
lib/shared/widgets/charts/safe_chart_widget.dart— 安全图表包装组件 _disposed+_ready双标志位保护 + RepaintBoundary 隔离重绘- 替换 10 个图表页面的 DeferredBuilder → SafeChartWidget(learning_center/coin_log/learning_progress/transfer_stats/statistics/history/favorite/trend_chart/transfer_speed_chart/learning_charts)
4. WebSocket P2P 文件传输
- 新增
lib/features/file_transfer/services/transport/ws_p2p_service.dart— WebSocket P2P 直连服务 - 服务端/客户端双模式、分块传输、心跳保活、自动重连
TransportType新增wsP2p,同局域网优先推荐 P2P(confidence 0.93)- 配对码页面新增 P2P 状态指示区域
5. 无障碍适配
- 新增
lib/core/services/accessibility/accessibility_service.dart— 无障碍服务 - 通用设置新增"♿ 无障碍"分组(语义调试开关 + 系统状态指示)
- 关键组件添加 Semantics 标注:句子卡片/排行榜项/日签卡片
- App 初始化时恢复语义调试状态
[v6.17.0] - 2026-06-05
🔧 多平台问题批量修复 — 鸿蒙端 + Web端 + 通用问题
鸿蒙端修复
- 1.1 工具中心部分页面显示"不支持此页面" — 为缺少ohosBuilder的路由添加鸿蒙端页面构建器
- 1.2 长按桌面图标无快捷按钮 — module.json5添加shortcuts配置(主题个性化+通用设置)
- 1.3 我的设备下线/移除报错"验证未通过" — 鸿蒙端跳过LocalAuthentication生物识别,直接弹确认对话框
- 1.7 账户洞察鸿蒙端设备识别异常提示 — 鸿蒙端显示"部分设备可能会出现识别异常"蓝色提示条
- 1.9 HapticService降级警告 — 鸿蒙端直接跳过flutter_vibrate检测,日志降级为debug级别
- 1.11 鸿蒙端设备显示"未知设备" — 增加manufacturer/hardware/device字段回退链,Web端精确识别浏览器
通用修复
- 1.5 句子详情外部搜索内容为空 — 使用_resolveDisplayText()获取最合适的搜索文本
- 1.8 重新打开引导页没反应 — 先重置onboarding完成状态再导航
- 1.10/1.12 RenderChartFadeTransition disposed错误 — DeferredBuilder添加disposed标志+图表页面mounted检查
- 2 工具中心搜索类型不支持 — 更新搜索类型映射与API一致
- 2.1 预置词搜索 — ToolListPage/ToolSearchPage/HanziToolPage添加热门搜索标签
- 3 文章广场点击文章不显示内容 — 清除旧数据+完善错误状态展示
- 4 RenderFlex overflow弹窗改为日志 — overflow错误仅记录Log.w不传递给原始处理器
- 6 引导页完成按钮loading优化 — loading状态动态切换文字(正在准备/加载/初始化/即将完成)
- 7 日签卡片保存分享按钮移到appbar — 保存分享移到navigationBar trailing
- 8 文件传输配对码页面缺少Appbar — 替换为始终可见的返回按钮
- 9 减少不必要的日志打印 — 缓冲区减半+Log.i节流5秒+路由日志降级
- 10 排行榜隐私保护 — 所有排行类型<50人时显示隐私提示,序号用*代替
- 11 离线模式/收藏页面重复图标 — 移除dialog重复icon+修复双emoji问题
Web端修复
- 5.1 引导页协议链接不跳转 — 使用rootNavigator确保跨ShellRoute导航
- 5.2 Web端浏览器精确识别 — 基于WebBrowserInfo识别Chrome/Edge/Safari/QQ浏览器等
修改文件
ohos/entry/src/main/module.json5— shortcuts配置lib/core/services/device/device_info_service.dart— 鸿蒙设备回退+Web浏览器识别lib/core/services/device/haptic_service.dart— 鸿蒙端跳过flutter_vibratelib/core/services/error/global_error_handler.dart— overflow静默处理lib/core/utils/logger.dart— 缓冲区减半+节流机制lib/core/layout/app_shell.dart— 移除高频日志lib/core/router/app_router.dart— 日志降级lib/core/router/route_registry.dart— ohosBuilder+预置词传递lib/core/router/ohos_placeholders.dart— 预置词传递lib/features/mine/user_center/presentation/my_devices_page.dart— 鸿蒙端跳过生物识别lib/features/mine/user_center/presentation/widgets/account_insights_sheet.dart— 鸿蒙端提示lib/features/mine/settings/presentation/general/general_settings_page.dart— 引导页重开修复lib/features/home/presentation/providers/sentence_detail_sheet.dart— 外部搜索修复lib/features/home/presentation/providers/offline_page.dart— 移除重复iconlib/features/home/presentation/favorite_page.dart— 修复双emoji+disposed保护lib/features/onboarding/presentation/pages/welcome_page.dart— Web端协议链接修复lib/features/onboarding/presentation/pages/personalization_page.dart— loading动态文字lib/features/daily_card/presentation/daily_card_page.dart— 保存分享移到appbarlib/features/file_transfer/presentation/pages/device_pairing_page.dart— 返回按钮修复lib/features/article/presentation/article_detail_page.dart— 文章内容显示修复lib/features/article/providers/article_provider.dart— 清除旧数据lib/features/rank/presentation/rank_page.dart— 隐私保护逻辑lib/shared/widgets/containers/deferred_builder.dart— disposed保护lib/l10n/types/t_account_insights.dart+ 14个语言文件 — 鸿蒙端提示翻译
[v6.16.9] - 2026-06-05
🔧 工具中心三合一修复 — 鸿蒙端路由 + 搜索类型 + 预置词搜索
问题
- 鸿蒙端工具中心部分页面显示"不支持此页面" —
hanzi-tool、calc-tool、tool-list三个关键路由缺少ohosBuilder,导致 OhosNavBridge 无法匹配路由,显示"鸿蒙端暂不支持此页面" - 搜索类型不支持 —
SearchType.changshi的值为'cs'(对应 searchall 接口),但 hanzi/search 接口实际支持changshi类型,导致搜索返回"不支持的搜索类型" - 缺少预置词搜索 — 工具中心页面无热门搜索词引导,用户需要手动输入关键词,体验不佳
修复
- 鸿蒙端路由 — 为
hanzi-tool、calc-tool、tool-list三个路由添加ohosBuilder,新增/tool/nick路由 - 搜索类型映射 —
changshi从SearchApiType.searchAll/'cs'改为SearchApiType.hanziSearch/'changshi';新增cs枚举值保留 searchall 接口;新增 25 个 searchall 独有类型 - 预置词搜索 —
ToolNavConfig新增presetKeywords字段;所有工具配置预置词;HanziToolConfig新增presetKeywords;ToolListPage/ToolSearchPage/HanziToolPage添加热门搜索标签UI
修改文件
lib/core/router/route_registry.dart— tool-list builder 传递 presetKeywordslib/core/router/ohos_placeholders.dart— buildToolListOhosWidget/buildNickToolOhosWidget 传递 presetKeywordslib/core/router/app_routes.dart— 新增 nickTool 路由常量lib/features/discover/models/search_type.dart— changshi 改用 hanziSearch,新增 searchall 独有类型lib/features/discover/models/tool_item.dart— ToolNavConfig 新增 presetKeywords,所有工具配置预置词lib/features/discover/presentation/pages/tool_list_page.dart— 新增 presetKeywords 属性和热门搜索标签UIlib/features/discover/presentation/pages/tool_search_page.dart— 新增 presetKeywords 属性和热门搜索标签UIlib/features/discover/presentation/pages/tool/hanzi_tool_page.dart— HanziToolConfig 新增 presetKeywords,_buildQuickActions 使用配置预置词lib/features/discover/presentation/widgets/tool/tool_navigation_helper.dart— 传递 presetKeywords 给 HanziToolConfig 和 listExtra
[v6.16.9] - 2026-06-05
🔧 Windows构建修复 — sqlite3预编译DLL + win32离线构建回退
问题
- sqlite3_flutter_libs无法从sqlite.org下载 — CMake构建时尝试从sqlite.org下载SQLite源码,因网络不可达导致构建失败
- win32包无法从GitHub下载预编译DLL — native assets构建钩子尝试从
github.com/halildurmus/win32下载win32_windows_x64.dll,因网络限制导致SocketException,整个构建失败
修复
- sqlite3预编译DLL — 修改
sqlite3_flutter_libs的CMakeLists.txt,使用本地预编译的sqlite3.dll和sqlite3.lib(来自NuGet包SQLite.Native),跳过源码下载和编译 - win32离线构建回退 — 修改
win32包的build.dart钩子,在下载失败时自动回退到本地C编译构建,而非直接抛出异常
举一反三
- 所有依赖外部网络下载的构建步骤都应有离线回退方案
- 预编译二进制文件应优先使用本地缓存或镜像源
- Flutter native assets构建钩子应处理网络异常,提供本地构建备选
修改文件:
packages/win32/hook/build.dart— 添加try-catch回退到本地C构建E:\cache\pub\hosted\pub.flutter-io.cn\sqlite3_flutter_libs-0.5.42\windows\CMakeLists.txt— 使用预编译sqlite3.dll
[v6.16.8] - 2026-06-05
🛡️ main()初始化异常捕获修复
问题
_appMain()未捕获异常 —_appMain()是返回Future<void>的异步函数,在main()中直接调用未await也未捕获异常。若初始化过程中发生未处理的异步异常(如windowManager初始化失败、Catcher2配置异常等),会导致顶层未处理的Future异常,整个应用崩溃且无日志记录。
修复
- catchError兜底 — 在
main()中为_appMain()调用添加.catchError(),捕获所有未处理的异步异常并记录日志,防止静默崩溃
举一反三
- 所有异步入口函数调用必须处理Future异常(catchError或try-catch)
- 即使内部各步骤已有try-catch,顶层仍需兜底保护,防止遗漏
修改文件: lib/main.dart
[v6.16.7] - 2026-06-05
🌐 Web端编译+运行修复 — Platform兼容+Zone mismatch+path_provider保护
问题
Platform._operatingSystem不支持 — Web端dart:io的Platform类不可用,多个文件直接使用Platform.isAndroid/Platform.isIOS等导致运行时Unsupported operation异常path_providerMissingPluginException — Web端getApplicationSupportDirectory()/getTemporaryDirectory()等无原生实现,多个文件直接调用导致异常- Catcher2 Zone mismatch —
main()中runZonedGuarded与 Catcher2 内部runZonedGuarded嵌套导致 Zone 不一致警告 - Catcher2 navigator key 缺失 —
Catcher2构造时未传入navigatorKey,导致对话框报告模式无法使用
修复
- Platform.xxx → pu.xxx — 将30+个文件中的
Platform.isAndroid/isIOS/isMacOS/isWindows/isLinux/pathSeparator/operatingSystem替换为pu.isAndroid/isIOS/...抽象,Web端自动使用 stub 实现 - kIsWeb 保护 — 为20+个文件添加
if (kIsWeb) return/throw保护,防止 Web 端调用path_provider和dart:ioAPI - Zone mismatch — 移除
main()中的外层runZonedGuarded,由 Catcher2 内部统一管理 zone - Catcher2 navigatorKey — 传入
rootNavigatorKey,修复对话框报告模式 - platformVersion — 新增
pu.platformVersion抽象(permission_service.dart需要)
举一反三
- 所有
Platform.xxx调用必须通过platform_utils.dart的pu.xxx抽象,禁止直接使用dart:io的Platform - 所有
path_provider调用必须添加kIsWeb保护 Platform.pathSeparator统一替换为'/'(Dart 在所有平台都支持正斜杠)- Catcher2 与
runZonedGuarded不可嵌套使用
修改文件(30+):
lib/main.dart— 移除外层 runZonedGuardedlib/core/services/catcher2_config_service.dart— 添加 navigatorKeylib/core/services/device/device_info_service.dart— Platform → pulib/core/utils/platform/ohos_compatibility_helper.dart— kIsWeb 保护lib/core/utils/platform/platform_io_native.dart— 新增 platformVersionImpllib/core/utils/platform/platform_io_stub.dart— 新增 platformVersionImpllib/core/utils/platform/platform_utils.dart— 新增 platformVersionlib/core/services/crash_log_service.dart— kIsWeb 保护lib/core/storage/hive_safe_access.dart— kIsWeb 保护lib/core/utils/logger.dart— kIsWeb 保护lib/core/services/data/backup_service.dart— kIsWeb 保护lib/core/services/data/settings_export_service.dart— kIsWeb 保护lib/core/services/data/image_cache_metadata_service.dart— kIsWeb 保护lib/core/network/api_client.dart— kIsWeb 保护lib/shared/widgets/display/appbar_date_display.dart— Platform → pulib/features/home/presentation/date_config_sheet.dart— Platform → pulib/core/services/notification/notification_service.dart— Platform → pulib/core/services/notification/local_notification_service.dart— Platform → pulib/features/home/presentation/home_sentence_card.dart— kIsWeb 保护lib/features/onboarding/presentation/widgets/mesh_gradient_background.dart— Platform → pulib/core/services/auth/permission_service.dart— Platform → pulib/shared/widgets/media/safe_cached_image.dart— kIsWeb 保护lib/features/home/services/cache_service.dart— pathSeparator → '/'lib/shared/widgets/feedback/share_sheet.dart— Platform → pulib/features/tool_center/leisure/presentation/widgets/leisure_share_sheet.dart— Platform → pulib/features/mine/settings/presentation/image_cache_grid.dart— pathSeparator → '/'lib/features/mine/settings/presentation/image_cache_detail_page.dart— pathSeparator → '/'lib/features/mine/settings/services/font_download_service.dart— pathSeparator → '/'lib/features/mine/settings/presentation/font_management_notifier.dart— pathSeparator → '/'lib/core/services/readlater/sharing_receiver_service.dart— pathSeparator → '/'- 以及其他10+个文件的 kIsWeb 保护
[v6.16.6] - 2026-06-05
🖥️ Windows端编译+运行修复 — 登录闪退+编译错误+平台兼容
问题
- 登录闪退 — Windows端输入账户密码后点击登录,应用崩溃闪退
- 根因:
FlutterSecureStorageWindows.write()中_backwardCompatible.delete()未 await,在 Windows 上MethodChannelFlutterSecureStorage未注册原生实现,抛出MissingPluginException成为未处理异步异常 - 次因:
SecureStorage缺少 Windows 降级方案(macOS 有 SharedPreferences 替代,Windows 没有)
- 根因:
- 编译错误 — 多个文件使用
kIsWeb但未导入package:flutter/foundation.dart - 语法错误 —
more_settings_page.dart工厂重置方法中多余}导致 try-catch 结构破坏 - 平台兼容 —
Platform.isAndroid在progress_share_card.dart中未通过pu封装使用 - 桌面端兼容 —
QuickActionsService在桌面端调用移动端 API - 设备注册 —
AuthNotifier.login()中registerDeviceIfNeeded()未 await,异常无法捕获
修复
- FlutterSecureStorageWindows —
write()中_backwardCompatible.delete()添加 await + try-catch - SecureStorage — Windows 与 macOS 统一使用 SharedPreferences 降级方案(
_useSharedPreferences) - AuthNotifier —
registerDeviceIfNeeded()添加 await + try-catch(login 和 register 两处) - QuickActionsService — 桌面端跳过初始化(
if (pu.isDesktop) return) - progress_share_card.dart —
Platform.isAndroid/IOS→pu.isAndroid/isIOS - more_settings_page.dart — 修复多余
}导致的 try-catch 结构错误 - 6个文件 — 添加
import 'package:flutter/foundation.dart'修复kIsWeb未定义:general_settings_provider.dartgeneral_fields_provider.dartchat_file_service.dartdata_export_service.dartchat_audio_service.dartreadlater_device_sync_service.dart
修改文件:
packages/flutter_secure_storage_windows/lib/src/flutter_secure_storage_windows_ffi.dartlib/core/storage/secure_storage.dartlib/features/auth/providers/auth_provider.dartlib/core/services/device/quick_actions_service.dartlib/features/progress/presentation/progress_share_card.dartlib/features/mine/settings/presentation/more_settings_page.dartlib/features/mine/settings/providers/general_settings_provider.dartlib/features/mine/settings/providers/sub/general_fields_provider.dartlib/features/discover/services/chat_file_service.dartlib/core/services/data/data_export_service.dartlib/features/discover/services/chat_audio_service.dartlib/core/services/readlater/readlater_device_sync_service.dart
[v6.16.5] - 2026-06-05
🌐 Web平台兼容性修复 — kIsWeb守卫保护文件系统操作
问题
多个服务文件直接使用 dart:io 的 File/Directory 和 path_provider 的 getTemporaryDirectory() 等API,
在Web平台运行时会抛出 MissingPluginException 或编译错误,导致应用崩溃。
修复
为所有涉及文件系统操作的公共方法添加 kIsWeb / pu.isWeb 早期守卫:
- logger.dart —
exportToFile()添加if (kIsWeb) throw UnsupportedError(...);shareLogs()添加if (kIsWeb) return; - backup_service.dart —
getBackupList()返回空列表;performBackup()抛出 UnsupportedError;deleteBackup()返回 false;deleteAllBackups()/getTotalBackupSize()早期返回 - settings_export_service.dart —
shareSettings()添加if (kIsWeb) return;;_writeTempFile()抛出 UnsupportedError - image_cache_metadata_service.dart —
indexFile()/indexFromCacheManager()/autoCleanExpired()/rebuildIndex()均添加if (kIsWeb) return; - api_client.dart —
createFormData()添加if (kIsWeb) throw UnsupportedError(...)
修复原则
- 所有
getTemporaryDirectory()、getApplicationDocumentsDirectory()、getApplicationSupportDirectory()、getLibraryDirectory()调用前,均需if (kIsWeb)保护 - 保留
import 'dart:io';因为非Web端仍需要 - 添加
import 'package:flutter/foundation.dart' show kIsWeb;
修改文件:
lib/core/utils/logger.dartlib/core/services/data/backup_service.dartlib/core/services/data/settings_export_service.dartlib/core/services/data/image_cache_metadata_service.dartlib/core/network/api_client.dart
[v6.16.4] - 2026-06-04
🐛 鸿蒙端编译修复 — Form小组件不兼容API清理
问题
鸿蒙端 flutter build hap 编译失败,81个错误,根因:
- Form小组件使用了不支持的API —
bindContextMenu、MenuItem、Placement、onLongPress、vibrator在鸿蒙Form(卡片)环境中不可用 - 缺少图标资源 —
ic_refresh、ic_copy、ic_open_app、ic_save、ic_share、ic_check、ic_open在ohos/entry/src/main/resources/base/media/中不存在
修复
- 移除6个Form页面不兼容API — SolarTermFormPage、CheckinFormPage、DailySentenceFormPage、ReadlaterFormPage、DailyCardFormPage、FortuneFormPage
- 移除
@Builder MenuBuilder()+MenuItem(Form不支持菜单组件) - 移除
.bindContextMenu()(Form不支持上下文菜单) - 移除
.onLongPress()+vibrator.vibrate()(Form不支持长按和震动) - 移除
pasteboard.setData()/promptAction.showToast()(Form不支持剪贴板和Toast) - 保留
.onClick()+postCardAction()跳转主APP功能
- 移除
- 添加7个占位图标资源 — 复制
icon.png作为占位,避免资源引用缺失错误
举一反三
- 鸿蒙Form(卡片)有严格API限制,仅支持基础UI组件和
postCardAction交互 - 任何需要复杂交互(菜单、长按、震动、剪贴板)的操作应通过
postCardAction跳转到主APP执行 - Form页面的功能操作应通过
router/call/message三种postCardAction类型实现
修改文件:
ohos/entry/src/main/ets/formability/pages/SolarTermFormPage.etsohos/entry/src/main/ets/formability/pages/CheckinFormPage.etsohos/entry/src/main/ets/formability/pages/DailySentenceFormPage.etsohos/entry/src/main/ets/formability/pages/ReadlaterFormPage.etsohos/entry/src/main/ets/formability/pages/DailyCardFormPage.etsohos/entry/src/main/ets/formability/pages/FortuneFormPage.etsohos/entry/src/main/resources/base/media/(7个图标资源)
[v6.16.3] - 2026-06-04
🛡️ 系统性稳定性加固与审计修复(v6.16.0 ~ v6.16.3 合并)
审计修复 — 5类系统性风险26处加固
基于验收审计发现的87个潜在问题,优先修复26处高危问题:
- gal插件ArgumentError捕获(5处)— iOS模拟器objective_c库异常时降级为友好提示
- path_provider异常降级(8处)— 失败时降级使用
Directory.systemTemp - Hive.openBox ArgumentError捕获(2处)— 降级打开fallback box
- addPostFrameCallback mounted检查(6处)— 回调开头添加mounted保护
- 页面级pop canPop()保护(5处)— 不可pop时降级导航到首页
Hive系统级联崩溃根因修复(v6.16.2 + v6.16.3)
- 根因:
Hive.initFlutter()在iOS模拟器因objective_c库问题失败后,导致整个Hive系统瘫痪 - 影响范围: KvStorage、WallpaperFavoriteService、WallpaperHealthService、SettingsChangeLogger等全部初始化失败
- 修复:
HiveSafeAccess.ensureInitialized()— 失败时降级使用Hive.init()+手动路径获取;各服务添加全异常捕获优雅降级
引导页 & 小部件修复(v6.16.1)
- 引导页重复显示 — 将判断从
initialLocation移到redirect回调,改用isOnboardingCompleted - 桌面小部件framework断言 —
CupertinoSliverNavigationBar补充largeTitle参数
修改文件:
hive_safe_access.dart,kv_storage.dart,wallpaper_favorite_service.dart,wallpaper_health_service.dart,settings_change_logger.dartshare_sheet.dart,leisure_share_sheet.dart,progress_share_card.dart,chat_video_bubble.dart,china_colors_page.dartexport_io_native.dart,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.dartprogress_beautify_page.dart,signin_page.dart,app_lock_pattern_setup.dart,image_cache_page.dart,chat_flow_page.dart,weather_settings_page.darthot_search_page.dart,security_question_page.dart,change_password_page.dart,sentence_detail_sheet.dartapp_router.dart,widget_management_page.dart
[v6.15.0] - 2026-06-04
🐛 10项Bug修复 + 验收审计举一反三
| # | 问题 | 根因 | 修改文件 |
|---|---|---|---|
| 1 | 了解我们页面微信搜索无法单独操作 | 标签合并导致 | learn_us_widgets.dart |
| 2 | 权限管理摇一摇开关关闭无反应 | refresh()销毁开关组件 | permission_management_page.dart, permission_service.dart |
| 3 | 日签卡片一直转圈loading | API请求无超时保护 | daily_card_provider.dart, daily_card_service.dart |
| 4 | 进度保存图片失败 | objective_c库gal抛ArgumentError | export_io_native.dart, progress_beautify_page.dart |
| 5 | 数据管理页文档目录异常 | safeAppDirPath null无降级 | backup_service.dart, data_management_page.dart |
| 6 | 缓存管理AppBar标题多余"图片" | 翻译文案问题 | zh_cn.dart, zh_tw.dart |
| 7 | 个人中心Hive缓存报错 | HiveCacheStore打开Box异常 | cache_config.dart |
| 8 | iOS长按App icon无返回按钮 | QuickActions用go()替换路由 | app.dart(3处go→push) |
| 9 | 清理后台重开显示引导页 | 路由判断用isFirstLaunch误判 | app_router.dart, onboarding_provider.dart |
| 10 | 桌面小部件framework断言 | initState异步访问ref | widget_management_page.dart |
🔍 验收审计 - 举一反三分析
| 风险类别 | 高危 | 中危 | 低危 | 合计 |
|---|---|---|---|---|
| 异步生命周期(mounted保护) | 11 | 20 | 9 | 42 |
| Hive/Path/Gal缺少ArgumentError捕获 | 9 | 10 | 4 | 29 |
| 路由导航(go应改push) | 4 | 4 | 2 | 10 |
| KvStorage关键标志位默认值 | 4 | 2 | 0 | 6 |
注:v6.16.0已修复上述审计建议的高危问题
[v6.14.0] - 2026-06-04
🎴 日签卡片 AR 3D 展示效果 (Issue #9)
采用伪AR方案 — Flutter 3D变换 + 设备传感器模拟AR体验:
- 3D卡片渲染 — Matrix4透视投影变换,设备感应倾斜偏移(
sensors_plus) - 景深效果 — RadialGradient深空背景 + 动态星空粒子 + ShaderMask暗角
- 光影动画 — 4秒周期LinearGradient光影流动覆盖层
- 截图分享 — RepaintBoundary截取PNG →
share_plus系统分享 - 6套AR主题 — 宇宙深空🌌 / 极光幻境🌈 / 落日余晖🌅 / 森林秘境🌿 / 深海探幽🌊 / 水晶殿堂💎
- 手势控制 — 拖拽旋转 / 双击重置(触觉反馈) / 捏合缩放(0.6x-2.0x)
- Cupertino风格控制面板 — GlassContainer底部面板(截图/主题切换/自动旋转/重置)
新增文件: lib/features/daily_card/presentation/daily_card_ar_view.dart
修改文件: daily_card_page.dart, app_routes.dart, route_registry.dart
[v6.13.0] - 2026-06-04
🔧 鸿蒙原生层修复 + iOS Widget深度定制 + 基础设施
A. 鸿蒙原生层修复 (Issue #2)
- 所有FormPage添加
.bindContextMenu()长按上下文菜单(6个卡片页面各自定制操作菜单) - 日签卡片保存按钮OHOS兼容 — gal不支持OHOS,降级为系统分享方案
B. iOS Widget深度定制 — AppIntent交互式按钮 (Issue #8)
- 新增7种AppIntent定义(刷新/点赞/分享/切换/签到/打开页面/保存卡片)
- 6个Widget View添加iOS 17+
Button(intent:)交互式按钮,iOS 14-16降级为Link方式 - Flutter端更新
home_widget_service.dart处理新Intent类型
C. 基础设施 (Issue #3, #4)
- Hive安全访问单例 — 新建
hive_safe_access.dart,统一lazy-init守卫、Box缓存、并发锁、重试机制;KvStorage/CrashMonitor/CacheConfig/RssService全部接入 - 设备发现去重增强 — deviceId+IP组合键去重 + 30秒心跳超时清理定时器
新增文件: hive_safe_access.dart, XianyanWidgetIntents.swift
修改文件: 6个FormPage.ets, XianyanWidget.swift, home_widget_service.dart, export_io_native.dart, ohos_compatibility_helper.dart, kv_storage.dart, lan_discovery_service.dart, device_discovery_provider.dart
[v6.11.0] - 2026-06-04
📷 集成真实扫码SDK + 鸿蒙端全面修复
扫码功能完善
- 创建通用扫码页面
qrcode_scanner_page.dart,集成mobile_scanner: ^7.1.4 - 完整流程:相机权限 → 动画扫描线 → URL/文本/Email/电话/WiFi/vCard分类处理 → 智能结果处理
- 闪光灯开关、相册识别辅助功能,Cupertino风格界面支持动态主题
鸿蒙端兼容性修复(9项)
- ✅ 相机权限缺失 → AndroidManifest.xml添加CAMERA
- ⚠️ 文件传输设备列表重复 → 已有去重逻辑,建议增加IP组合键
- ⚠️ 长按桌面图标无按钮列表 → 鸿蒙原生限制需改.ets代码
- ✅ HiveError Box not found → OhosCompatibilityHelper.safeOpenBox()
- ⚠️ 日签保存无反应 → gal不支持OHOS,降级为分享
- ✅ 输入框不弹输入法 → requestKeyboardFocus()增强方法
- ✅ 数据管理显示0B → safeGetDirectorySize()安全读取
- ✅ 设备信息unknown → getEnhancedPlatform()/getEnhancedDeviceModel()
- ✅ OhosCompatibleState Mixin快速集成
新增文件: qrcode_scanner_page.dart, ohos_compatibility_helper.dart
修改文件: profile_page.dart, app_routes.dart, route_registry.dart, AndroidManifest.xml
[v6.10.5] - 2026-06-02
🏗️ 架构优化 + 多语言全覆盖 + 构建修复(v6.10.0 ~ v6.10.5 合并)
架构优化 (v6.10.0)
- MacosPlatformService统一 — 分散MethodChannel统一为新服务,Swift端扩展为10个方法处理器
- 二维码WebSocket长连接 — QrcodeWsService双通道架构(WS优先+HTTP轮询降级)+ 中继服务器
- RSS全文阅读 — Readability算法提取全文 + 图片画廊阅读模式
- 灵动岛倒计时聚焦模式 — startCountdownActivity/update/endCountdownActivity
- 自定义Lint规则 — double_angle_brackets / hardcoded_color / hardcoded_chinese
- 应用图标和名称 — 全平台图标更新,iOS/macOS名称改为中文「闲言」
多语言全覆盖 (v6.10.3 + v6.10.4)
- 6页面全量i18n — 账户设置(18key)、数据管理(33key)、来源(40key)、收藏(68key)、离线(67key)
- 翻译字段补全 — roleNative + 7个分发渠道字段,12种语言补全
- 覆盖14种语言 — zh_cn/en/ja/zh_tw/ko/de/it/es/ar/bn/hi/pt/ru/fr
构建修复 (v6.10.1 + v6.10.2 + v6.10.5)
- Syncfusion Chart崩溃 — DeferredBuilder包裹35处图表延迟渲染,21个文件
- 扫码登录自动跳转 — HTTP轮询(3s) + WebSocket双通道监听 + 自动tokenLogin
- pubspec.yaml双模板 — 拆分pubspec.ohos.yaml/pubspec.macos.yaml,tools/setup_pubspec.ps1自动生成
- AppBar标题/返回按钮修复 — 7个页面统一CupertinoNavigationBar风格
涉及文件: macos平台服务、路由注册、扫码登录、多语言系统(5新模块+14语言)、图表组件、pubspec模板、7个页面导航栏
[v6.9.28] - 2026-06-01
🏗️ 路由架构重构 + 基础设施建设(v6.9.19 ~ v6.9.51 合并)
路由架构重构 (v6.9.28) — Single Source of Truth
- 新增统一路由注册表
route_registry.dart(~1000行),消除6-8个文件手动同步鸿蒙配置 - 自动生成GoRoute和OhosRouteEntry,ohos_nav_bridge从1188行缩减至245行
- 新增5个核心文件:route_def/route_registry/route_builders/ohos_route_types/ohos_placeholders
数据同步架构 (v6.9.23) — DataSyncEventBus
- 统一事件总线替代分散StreamController,零破坏性迁移(compat兼容层)
- 支持readlater/favorite两种事件类型,source追踪便于调试
Supabase SDK移除 (v6.9.41) — 全面切换自建API
- 移除supabase_flutter依赖,5个服务重写为ApiClient调用
- PHP后端新增22个接口(Readlater 15 + FontSync 2 + PluginUpdate 5)
- Admin管理后台新增5组CRUD模块(FastAdmin)
句子详情面板重构 (v6.9.47 + v6.9.48)
- 1252行拆分为3个文件(panel/content/actions),Riverpod Notifier消除prop drilling
- TTS关闭按钮、相关推荐、卡片分享图片、AnimatedSwitcher过渡动画
主题系统 & UI修复 (v6.9.22 + v6.9.36)
context.isDark/context.ext便捷扩展;Sheet/Dialog硬编码颜色全面修复(7个文件)- 21项批量UI修复:emoji清理、按钮溢出、协作画布绘制bug、Android快捷方式、16KB页面支持
多语言 & 功能 (v6.9.27 + v6.9.33 + v6.9.34 + v6.9.37 + v6.9.49)
- 登录/注册95key i18n(TAuth)、会话流100key i18n(TChatFlow)、备案信息i18n
- 功能分级标准FeatureAccessLevel(localOnly/cloudWithCloudSync/cloudRequired)
- 贡献者头像墙首字占位、阅读报告本地化、内容纠错邮箱验证码
鸿蒙适配 & 开发工具 (v6.9.20 + v6.9.24 + v6.9.38 + v6.9.40 + v6.9.42 + v6.9.51)
- module.json5权限审计(移除9个system级权限)、schema校验修复、receive_sharing_intent配置
- bitsdojo_window→window_manager迁移、win32 6.x API迁移、Swift条件编译修复
- Android配置一致性检查脚本、翻译覆盖率检测Python脚本(1304键基准)、CanvasProvider单元测试(42用例)
🏷️ 软件特性功能 (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