Files
xianyan/CHANGELOG.md
Developer 9ea8d3d606 chore: 汇总批量提交的功能优化与bug修复
本次提交包含多项迭代优化和问题修复:
1. 新增缩略图图片组件、数字格式化工具类,补充多语言翻译类型与本地化支持
2. 优化底部导航栏主题色统一使用动态accent色值
3. 修复多处图表动画、路由跳转、API请求相关问题
4. 简化服务器公告文案,调整默认分屏状态为关闭
5. 新增安卓/iOS桌面快捷方式配置
6. 重构多处状态管理类使用SafeNotifierInit统一异常保护
7. 替换硬编码蓝色为主题色,更新版本号获取方式为动态读取
8. 优化缓存预加载逻辑,移除无用代码
9. 调整默认设置项,优化用户体验细节
2026-05-31 12:24:05 +08:00

84 KiB
Raw Blame History

Changelog

所有重要变更均记录于此文件。格式基于 Keep a Changelog


[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-catchFeed 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.darts.createdAt?. 多余的 null-aware 操作符警告
  • 移除 FavoriteRepository 中未使用的 _ref 字段

修改文件

  • lib/features/home/presentation/providers/readlater/readlater_provider.dart
  • lib/features/home/presentation/providers/readlater_page.dart
  • lib/features/home/providers/favorite_provider.dart
  • lib/features/home/providers/home_interaction_mixin.dart
  • lib/features/home/repositories/favorite_repository.dart
  • lib/app/app.dart

[v6.9.18] - 2026-05-31

📦 了解我们页「其他产品」改为弹窗展示

功能变更

  • learn_us_sections.dartOfficialSiteSection 中「其他产品」从链接导航改为 CupertinoModalPopup 弹窗
    • 移除 LinkItemData(url: 'https://s2ss.com/products') 链接项
    • 新增独立 GestureDetector 行,带 chevron_right 图标,点击打开产品弹窗
    • 弹窗包含两个产品卡片:情景诗词🌤️、小妈厨房🍳
    • 产品卡片点击后通过 launchAboutUrl 打开对应 URL
    • 新增 _ProductData_ProductCard 私有类

i18n 新增翻译键

  • TAbout 新增 4 个字段:productPoetryproductPoetryDescproductKitchenproductKitchenDesc
  • 14 种语言全部添加翻译zh_cn / zh_tw / en / ja / ko / de / fr / es / it / pt / ru / ar / hi / bn

[v6.9.17] - 2026-05-31

🌍 语言选择页协同翻译描述改为动态翻译信息

i18n 新增翻译键

  • TSettings 新增 lastTranslation(上次翻译)和 translationVersion(版本)字段
  • 14 种语言全部添加翻译zh_cn / zh_tw / en / ja / ko / de / fr / es / it / pt / ru / ar / hi / bn

页面修改

  • language_settings_page.dart:协同翻译卡片描述从"帮助完善更多语言翻译"改为动态文本
    • 新文本格式:上次翻译202606, 版本v{AppVersion.version}
    • 版本号通过 AppVersion.version 动态读取,不再硬编码
    • 新增 app_constants.dart 导入

[v6.9.16] - 2026-05-31

🌍 主题个性化页面 i18n 国际化支持

新增 TTheme 翻译类型

  • 新建 lib/l10n/types/t_theme.dart,定义 145 个翻译键(含 4 个补充键)
  • T 根类型中添加 theme 字段(t_root.dart
  • t.dart 桶文件中导出 TTheme
  • TTheme 支持 toMap() / fromMap() 序列化与 fallback 机制

14 种语言翻译全部添加

  • zh_cn简体中文、en英语、zh_tw繁体中文、ja日语
  • ko韩语、de德语、it意大利语、es西班牙语
  • fr法语、pt葡萄牙语、ru俄语、ar阿拉伯语
  • hi印地语、bn孟加拉语

主题页面硬编码中文替换

  • theme_settings_page.dart:页面标题 '主题个性化't.theme.title
  • theme_sections_basic.dart7 个区块标题 + 所有选项标签 + 对话框文本 + 字体预览文本
    • 新增 10 个 i18n 辅助函数themeModeLabel, autoDarkModeLabel, accentColorName, fontSizeLabel, fontWeightLabel, fontStyleLabel, glassIntensityLabel, animationIntensityLabel, presetName
  • theme_sections_style.dart6 个区块标题 + 所有选项标签 + 壁纸/渐变/纯色/权限/重置对话框
    • 新增 6 个 i18n 辅助函数cornerRadiusLabel, cardStyleLabel, tabExpressionLabel, tabCharacterLabel, bubbleStyleLabel, wallpaperPresetName
  • theme_sections_preview.dart:预览区标题/文本 + 分享区按钮 + 导出/导入对话框 + 预览信息栏前缀
    • 导入 basic/style 文件以复用辅助函数

设计决策

  • Provider 中的 const 数据类AppThemeMode, AccentColorOption 等)保留硬编码 label通过 UI 层辅助函数switch-based ID→翻译映射实现运行时国际化避免破坏 const 构造函数

[v6.9.15] - 2026-05-31

🔧 灵感页下拉修复 & 发现页网络状态横幅

Issue 6: 禁用灵感页下拉打开工具中心

  • 移除 inspiration_page.dart 中下拉触发 toolCenterProvider.openPanel() 的逻辑
  • 移除 _triggerThreshold_isProcessing_toolCenterSubscription 等工具中心相关状态
  • 移除 tool_center_provider.dart import
  • 灵感页下拉现在仅触发刷新,不再打开工具中心面板
  • 刷新阈值从 30px 调整为 60px下拉体验更自然

Issue 6.1: 发现页添加网络状态横幅

  • 新增 NetworkStatusBanner 组件(offline_banner.dart),支持双状态检测:
    • 离线状态:显示"📡 网络未连接"(橙色)
    • DNS异常显示"⚠️ 网络异常,部分功能可能不可用"(黄色)
  • 复用现有 connectivityProvider(离线检测)+ connectivityCheckProviderDNS检测
  • 横幅可手动关闭(点击 ✕ 按钮)
  • 网络恢复时自动隐藏并重置关闭状态
  • iOS 风格使用项目主题系统AppSpacing/AppTypography
  • 保留原有 OfflineBannerOfflineIndicator 向后兼容
  • discover_page.dart 搜索栏下方集成 NetworkStatusBanner

[v6.9.14] - 2026-05-31

🍅 番茄钟页面全面修复与增强

3.0 设置面板动画修复

  • 设置图标点击后使用 AnimatedSize 包裹设置面板,实现平滑展开/收起动画350ms cubic
  • 设置图标添加 AnimatedRotation展开时旋转90°颜色变为主题色
  • 移除旧的 if (_showSettings) 条件渲染,改用 SizedBox.shrink() + AnimatedSize

3.1 计时器显示增强

  • 圆环尺寸从 240→260emoji 从 32→36更醒目
  • 运行时新增外圈脉冲光晕(_GlowPainter + MaskFilter.blur呼吸式 fadeIn 动画
  • 状态标签改为胶囊样式phaseColor 半透明背景 + 圆角pill
  • 主按钮颜色跟随阶段色(专注=accent, 短休息=green, 长休息=blue
  • 运行时按钮阴影增强blurRadius 24, spreadRadius 2
  • 播放/暂停图标使用 AnimatedSwitcher 平滑切换

3.2 阶段选择器修复

  • 移除 onTap: null 禁用逻辑,改为始终可点击
  • 空闲/完成状态:直接切换阶段
  • 运行/暂停状态:弹出 CupertinoAlertDialog 确认对话框
  • 每个阶段使用对应颜色高亮(非统一 accent
  • 添加 margin 间距,非选中项添加 bgCard 边框

3.3 设置UI完善

  • 新增「🔄 长休息间隔」滑块2-8轮
  • 新增「 自动开始休息」CupertinoSwitch 开关
  • 新增「🎯 自动开始专注」CupertinoSwitch 开关
  • 分隔线区分滑块区和开关区
  • 统计区标题改为「今日统计」,右侧显示连续天数
  • 新增 _formatFocusTime() 智能格式化(<60分钟显示"X分钟"≥60显示"Xh Xm"
  • CupertinoSwitch activeColoractiveTrackColor(适配 Flutter 3.24+

[v6.9.13] - 2026-05-31

🔄 发现页今日诗词导航重定向至工具中心

1. 今日诗词点击行为变更

  • 发现页「今日诗词」会话条目点击 → 原先导航至 /poetry 独立页面 → 现改为打开工具中心面板
  • 使用 ref.read(toolCenterProvider.notifier).openPanel() 打开工具中心
  • 工具中心内包含「古诗词」工具项id: poetry),用户可在面板中找到并使用

修改文件:

  • lib/features/discover/presentation/pages/home/discover_page.dart_onSessionTap 方法新增 session.id == 'poetry' 判断,调用 _openToolCenter() 并 return

[v6.9.12] - 2026-05-31

🌤️ 天气详情布局优化 — 左右对齐

1. 天气详情项布局改为左右对齐

  • _buildWeatherDetailItem 从 Column 垂直布局 → Row 水平布局emoji+标签在左,数值在右)
  • _buildDetailGridItem 从 Column 垂直布局 → Row 水平布局emoji+标签在左,数值在右)
  • GridView childAspectRatio 从 2.2 → 3.5 适配水平布局高度

效果示例:

💧 湿度                    65%
🌬️ 风向                    东南风
💨 风力                    3级

[v6.9.11] - 2026-05-31

🌐 发现页多语言架构优化 — 11项改进实施

1. TDiscover 拆分为子模块(单一职责)

  • TDiscoverBase — 基础翻译(浏览/点赞/收藏/灵感等)
  • TChatFlow — 会话流翻译(分类/附件/隐藏会话等)
  • TChatSettings — 聊天设置翻译(外观/数据/同步/回收站/主题色等)
  • TToolCenter — 工具中心翻译(搜索/拖拽/收藏/置顶等)
  • TToolStats — 工具统计翻译(使用次数/评分/版本等)
  • TDiscover 保留 @Deprecated 向后兼容 getter

2. translation_io_service 自动序列化

  • _importDiscover 从 220 行手动字段映射 → 10 行 toMap()/fromMap() 自动序列化
  • 新增翻译键不再需要手动维护 _importXxx 方法

3. 时间格式化国际化timeago

  • 添加 timeago: ^3.7.0 依赖
  • tool_stats_sheet.dart_formatDate 硬编码中文 → timeago.format() 自动适配14种语言
  • 支持 zh_CN/zh_TW/ja/ko/de/fr/es/it/pt/ru/ar/hi 语言

4. 高优先级语言翻译补全

  • ja日语110个 TDiscover 键全部填入
  • ko韩语110个 TDiscover 键全部填入
  • zh_TW繁体中文110个 TDiscover 键全部填入
  • ar阿拉伯语112个 TDiscover 键全部填入

5. ConsumerWidget 性能优化

  • build 链路中 ref.read()ref.watch()17处需响应语言切换
  • 回调/一次性操作中保持 ref.read()3处避免不必要的重建

6. 在线翻译API服务

  • 新增 auto_translate_service.dartGoogle Translate 免费API
  • 支持批量翻译、速率限制、翻译缓存、进度回调
  • autoTranslateProvider Riverpod 集成

7. 复数/性别规则TFunc

  • 新增 plural() — 复数选择CLDR标准
  • 新增 gender() — 性别选择
  • 新增 format() — 模板插值(替代 .replaceAll('{0}', ...)
  • 补全 ko/de/it 语言映射
  • 迁移4处 .replaceAlltFunc.format()

8. 工具搜索栏语音输入按钮修复

  • 🎤 按钮从 prefix左侧移至 suffix右侧符合 iOS HIG

9. RTL布局确认

  • app_locale.dart 已有完整 RTL 支持ar/he/fa/ur
  • Directionality widget 包裹整个应用
  • 阿拉伯语翻译补全后可验证 RTL 布局

10. ARB格式迁移方案规划

  • 📋 长期建议:从手写翻译类型迁移到 Flutter 官方 ARB 代码生成方案
  • 📋 当前架构已具备 toMap()/fromMap() 序列化,为 ARB 迁移铺平道路

[v6.9.10] - 2026-05-31

🌐 新增 — 阿拉伯语(ar)翻译补全 + RTL布局确认

1. 阿拉伯语翻译补全 — TDiscover模块空字符串全部填入

  • 🆕 TChatFlow28个空字符串全部填入阿拉伯语翻译会话流、分类、附件、隐藏会话等
  • 🆕 TChatSettings47个空字符串全部填入阿拉伯语翻译外观、数据、同步、回收站、危险区域等
  • 🆕 TToolCenter30个空字符串全部填入阿拉伯语翻译工具中心、搜索、拖拽移除等
  • 🆕 TToolStats7个空字符串全部填入阿拉伯语翻译使用统计、趋势、版本等
  • ✏️ TDiscoverBase:优化已有翻译,使其更准确自然(如 loginToSync、comingSoon、changeGroup 等)

2. RTL布局支持确认

  • app_locale.dart 已实现 _rtlLanguageCodesar/he/fa/ur+ isRTL + textDirection
  • appTextDirectionProvider 已实现系统语言RTL自动检测
  • app.dart 已使用 Directionality(textDirection: textDirection) 包裹整个应用
  • supportedLocales 包含 arlocalizationsDelegates 包含 GlobalCupertinoLocalizations.delegate
  • 📝 Flutter RTL 自动生效,无需额外修改

[v6.9.9] - 2026-05-31

🌐 新增 — TFunc 复数/性别/模板插值通用方法

1. TFunc 增强 — 通用翻译函数

  • 🆕 plural() — 通用复数选择,基于 CLDR 标准,支持 zero/one/two/few/many/other 全部复数类别
  • 🆕 gender() — 性别选择,支持 male/female/other 三种性别形式
  • 🆕 format() — 模板插值别名,语义更清晰(底层调用 interpolate
  • 🆕 _locale 映射补全:新增 ko(韩语)、de(德语)、it(意大利语) 支持
  • 📝 用法示例:
    • tFunc.plural(count, one: '1 item', other: '$count items')
    • tFunc.gender('male', male: '他', female: '她', other: 'TA')
    • tFunc.format(t.discover.toolRemoved, {'0': tool.name})

2. 代码迁移 — replaceAll 统一为 tFunc.format

  • ♻️ tool_panel_sections.dart3处 .replaceAll('{0}', ...)translationsFuncProvider.format(..., {'0': ...})
  • ♻️ readlater_page.dart1处 .replaceAll('{0}', ...)translationsFuncProvider.format(..., {'0': ...})
  • 📝 search_engine_service.dart 中的 replaceAll('{query}', ...) 为URL模板非i18n场景保持不变

[v6.9.8] - 2026-05-31

🌐 新增 — 自动翻译服务 (AutoTranslateService)

1. AutoTranslateService — 在线翻译API自动补全空翻译字符串

  • 🆕 新增 auto_translate_service.dartlib/l10n/services/
  • 🆕 使用 Google Translate 免费APItranslate.googleapis.com)翻译空字符串
  • 🆕 translate() — 单文本翻译,支持缓存命中
  • 🆕 fillEmptyTranslations() — 批量翻译空字符串分批处理每批10条速率限制500ms间隔
  • 🆕 fillEmptyTranslationsBySection() — 按section分组翻译整个T对象
  • 🆕 countEmpty() / countEmptyBySection() — 统计空翻译数量
  • 🆕 翻译缓存机制(内存缓存,避免重复请求)
  • 🆕 autoTranslateProvider — Riverpod Provider自动释放HttpClient资源
  • 📦 使用 dart:io HttpClient不依赖http包
  • 📝 进度回调 onProgress 支持UI展示翻译进度

[v6.9.7] - 2026-05-31

🐛 修复 — 工具搜索栏语音输入按钮不可见

1. 语音按钮位置修正(符合 iOS 规范)

  • 🐛 tool_search_bar.dartVoiceInputButton 从 prefix左侧移至 suffix右侧
  • 🆕 prefix 改为搜索图标 CupertinoIcons.search(左侧放大镜,符合 iOS 搜索栏规范)
  • 🆕 suffix 区域同时展示语音按钮 + 清除按钮(有文本时),布局更直观
  • 📝 原因:语音输入按钮放在搜索栏左侧,用户无法找到,不符合 iOS HIG 搜索栏设计规范

[v6.9.6] - 2026-05-31

🚀 新增 — 主屏幕快捷操作 (Quick Actions)

1. QuickActionsService — 跨平台快捷操作服务

  • 🆕 新增 quick_actions_service.dartlib/core/services/device/
  • 🆕 两个快捷操作:主题个性化 + 通用设置
  • 🆕 iOS通过 UIApplicationShortcutItemsInfo.plist 配置)
  • 🆕 Android通过 App Shortcutsshortcuts.xml + AndroidManifest.xml 配置)
  • 🆕 鸿蒙:通过 module.json5 shortcuts + EntryAbility.ets MethodChannel 自行实现
  • 🆕 QuickActionCallback 回调机制,在 app.dart 中注册导航逻辑
  • 🆕 handlePendingAction() 在 App 恢复前台时处理待执行的快捷操作
  • 📦 依赖:quick_actions: ^1.1.0pub.dev 官方版,支持 iOS + Android

2. 平台配置变更

  • 🆕 Androidres/xml/shortcuts.xml(快捷操作定义)
  • 🆕 AndroidAndroidManifest.xml 添加 android.app.shortcuts meta-data
  • 🆕 Androidstrings.xml 添加快捷操作标签文本
  • 🆕 iOSInfo.plist 添加 UIApplicationShortcutItems 数组
  • 🆕 鸿蒙:module.json5 添加 shortcuts 配置2个快捷操作
  • 🆕 鸿蒙:string.json 添加快捷操作标签资源
  • 🆕 鸿蒙:EntryAbility.ets 添加快捷操作 MethodChannel 通知

[v6.9.5] - 2026-05-31

📡 新增 — 网络连接状态检测 Provider

1. ConnectivityProvider — 网络状态监听与离线提示

  • 🆕 新增 connectivity_provider.dartlib/core/providers/
  • 🆕 ConnectionType 枚举wifi / mobile / ethernet / vpn / none / other
  • 🆕 ConnectivityState 数据类isConnected + connectionType + copyWith
  • 🆕 ConnectivityNotifier:初始化检查 + 实时监听网络变化,自动更新状态
  • 🆕 connectivityProviderRiverpod NotifierProvider全局可 watch
  • 📦 依赖connectivity_plus本地化鸿蒙适配版已在 pubspec.yaml 中)
  • 📝 日志:网络连接/断开时通过 Log.i/Log.w 输出追踪

[v6.9.5] - 2026-05-31

🐛 关键修复

1. connectivityProvider 全局接入

  • app.dart 中全局监听 connectivityProvider
  • 网络断开时顶部显示 CupertinoBanner 提示
  • 提示文案:「网络已断开,部分功能可能不可用」

2. 小组件导航跨 Isolate 修复

  • _pendingNavigationRoute 静态变量改为 KvStorage 持久化存储
  • 后台 Isolate 写入的路由在主 Isolate 中可见
  • consumePendingNavigation() 改为从 KvStorage 读取并清空

3. ScrollableChipList 深色模式优化

  • 渐变遮罩从 2 层改为 3 层(透明→半透明→不透明)
  • 遮罩宽度从 28px 增加到 40px
  • 列表右侧 padding 从 24px 增加到 32px
  • 确保深色/浅色模式下遮罩均清晰可见

🏗️ 架构改进

4. DefaultSettings 与 Freezed @Default 同步

  • SplitViewState@Default(false) 改为 @Default(DefaultSettings.splitViewEnabled)
  • build() 中的 fallback 也引用 DefaultSettings.splitViewEnabled
  • 消除 Freezed 注解与 DefaultSettings 的手动同步需求

5. 离线缓存策略联动

  • ConnectivityState 增加 shouldUseCache(cacheStrategyId) 方法
  • ConnectivityState 增加 shouldFetchNetwork(cacheStrategyId) 方法
  • 支持 4 种策略always / wifi_only / smart / never
  • 增加 isWifi / isMobile 便捷属性
  • 使用方式:connectivity.shouldUseCache(settings.cacheStrategyId)

[v6.9.4] - 2026-05-31

🔧 性能优化 — translationsProvider 响应式修正

1. ref.read → ref.watch 修正build 链路中需响应语言切换)

  • home_daily_card.dart_buildCardContentref.readref.watchbuild 链路调用)
  • home_sentence_card.dart_buildSentenceTextref.readref.watch(空内容占位符需响应语言切换)
  • home_sentence_card.dart_buildActionRowref.readref.watch(作者前缀需响应语言切换)
  • tool_grid_item.dart — build 中 4 处 ref.readref.watchSemantics 标签/提示 + 新角标文本)
  • tool_panel_sections.dart — build 链路中 9 处 ref.readref.watch(头部/收藏/搜索/垃圾桶区域文本和 Semantics
  • tool_recent_section.dart_RecentCard.buildref.readref.watch(使用次数文本)

2. 保持 ref.read 的场景(回调/一次性操作,无需响应语言切换)

  • home_sentence_card.dart_shareAsImage/_shareAsText 回调中保持 ref.read
  • tool_panel_sections.dartonAcceptWithDetails 回调中保持 ref.read
  • home_sentence_list_section.dartonPressed 回调中保持 ref.read

[v6.9.4] - 2026-05-31

🏗️ 架构重构 — 默认值统一管理

1. DefaultSettings 常量类

  • 新增 default_settings.dart,集中定义所有设置项默认值
  • 消除 const 构造函数 / fromStorage fallback / resetAll 三处分散定义
  • 未来修改默认值只需改一处

2. 所有 Provider 统一引用 DefaultSettings

  • SoundSettingsState — 5 个字段
  • PrivacySettingsState — 4 个字段
  • DisplaySettingsState — 9 个字段
  • NetworkSettingsState — 5 个字段
  • PerformanceSettingsState — 5 个字段
  • DeveloperSettingsState — 6 个字段
  • GeneralFieldsState — 16 个字段
  • ThemeSettingsState — 19 个字段(含 _loadFromStorage + resetAll
  • OnboardingState — shakeEnabled / soundEnabled 引用 DefaultSettings
  • SplitViewState — @Default(false) 已确认正确

🎨 UI/UX 优化

3. ThemeOptionChip 统一迁移

  • 移除 expand 参数,简化组件 API
  • 所有 Row + ThemeOptionChip 改为 ScrollableChipList(水平滑动 + 渐变遮罩)
  • 新增 ScrollableChipList 组件,右侧渐变遮罩提示可滑动
  • 影响区块:外观模式/定时深色/字体大小/字体粗细/毛玻璃/动画/圆角/卡片样式

4. 主题预设与默认值一致

  • 新增「墨黑」预设id: ink与 ThemeSettingsState 默认值完全一致
  • 预设列表:墨黑 / 薰衣草 / 暖阳 / 薄荷 / 极夜 / 樱花

5. 开源许可体验优化

  • 对话框展示 10 个主要开源库标签Wrap 流式布局)
  • 底部"以及更多开源依赖…"提示
  • "查看完整许可"按钮跳转 Flutter 原生 License 页面

📡 功能增强

6. connectivity_plus 网络状态检测

  • 新增 connectivity_provider.dart
  • ConnectivityState — isConnected + ConnectionType
  • ConnectivityNotifier — 初始化检查 + 持续监听网络变化
  • 依赖已存在于 pubspec.yaml鸿蒙适配版

7. 桌面小部件交互修复

  • 抽取 _widgetRouteMap 静态常量映射表,消除路由映射重复
  • registerInteractivityCallback() 同时调用 handleWidgetClick()
  • init() 末尾自动注册交互回调
  • 修复前台点击丢失和回调未注册问题

[v6.9.3] - 2026-05-31

🔧 UI/UX 修复与默认值调整

1. 语言选择 — 繁体中文国旗修正

  • 繁体中文国旗由 🇹🇼 改为 🇨🇳(中国国旗)

2. 主题个性化 — 卡片样式/外观模式支持左右滑动

  • ThemeModeSection 外观模式选项改为水平滑动列表
  • CardStyleSection 卡片样式选项改为水平滑动列表
  • ThemeOptionChip 增加 expand 参数,支持在 ListView 中使用

3. 引导页 — 摇一摇/音效反馈默认关闭

  • OnboardingState.shakeEnabled 默认值 true → false
  • OnboardingState.soundEnabled 默认值 true → false

4. 通用设置 — 多项功能默认关闭

  • 声音 soundEnabled 默认值 true → false
  • 音效反馈 sfxEnabled 默认值 true → false
  • 分屏功能 splitViewEnabled 默认值 true → false
  • 剪切板读取 clipboardReadEnabled 默认值 true → false
  • 摇一摇换句 shakeToSwitch 已为 false确认

5. 主题个性化 — 默认值调整

  • 卡片样式默认值 standardios(闲言)
  • 强调色默认值 purplenoir(墨黑)

6. 编辑器 — 实验性功能文案与跳转

  • 「实验性功能」→「实验中的功能」
  • 对话框增加「查看实验功能」按钮,跳转实验中的功能页面
  • pro_editor_page.darteditor_bottom_toolbar_v2.dart 同步修改

7. 桌面小部件 — 文案与跳转

  • 「功能开发中」→「实验中的功能」
  • 对话框增加「查看实验功能」按钮,跳转实验中的功能页面

8. 软件信息 — 开源许可增强

  • 开源许可点击后先弹出自定义对话框
  • 对话框底部增加「查看原始信息」按钮,跳转 Flutter 原生 License 页面

[v6.9.2] - 2026-05-31

🌍 发现页多语言支持 — 会话流 + 工具中心硬编码消除

1. TDiscover 新增 110 个翻译键

  • 🆕 会话流chatFlow/chatSettings/defaultConversation/searchMessages
  • 🆕 分类categoryAll/Hot/Love/Nature/Motivate/Literature/Movie + expandCategories/collapseCategories
  • 🆕 附件attachmentGallery/Camera/Video/Audio/File/Location/Link/RichText
  • 🆕 隐藏会话hiddenSessions/noHiddenSessions/swipeToHide/unhide/hidden
  • 🆕 聊天设置appearance/backgroundImage/themeColor/data/exportMessages/importMessages/sync等
  • 🆕 主题色预设defaultPurple/oceanBlue/mintGreen/warmOrange/roseRed/skyCyan/brownCoffee/silverGrey
  • 🆕 回收站recycleBin/viewDeletedMessages/recycleBinEmpty/restore/permanentDelete等
  • 🆕 工具中心toolCenter/discoverMoreHelpers/myFavorites/recentlyUsed/recommendedTools/searchTools等
  • 🆕 工具交互dragToRemove/releaseToRemove/cancelFavorite/pinToTop/newBadge等
  • 🆕 工具统计usageCount/lastUsed/never/rating/noRating/usageTrend/version

2. 会话流页面硬编码替换5个文件

  • chat_flow_page.dart — 导航栏标题、previousPageTitle
  • chat_settings_page.dart — 40+处硬编码(外观/数据/分类/回收站/危险操作/主题色预设/导出导入等)
  • hidden_sessions_page.dart — 隐藏会话标题、空状态、取消隐藏、已隐藏
  • chat_flow_top_bar.dart — 分类栏从const改为动态函数、搜索占位符、展开/收起
  • chat_flow_input_bar.dart — 输入占位符、8个附件类型标签、快捷分类栏

3. 工具中心页面硬编码替换8个文件

  • tool_panel.dart — Semantics标签
  • tool_panel_sections.dart — 头部标题/副标题/工具计数/收藏区/搜索结果/垃圾桶区域
  • tool_recent_section.dart — 最近使用/开始使用/查看全部/使用次数StatelessWidget→ConsumerWidget
  • tool_recommend_section.dart — 推荐工具/换一批StatelessWidget→ConsumerWidget
  • tool_bottom_bar.dart — 编辑布局/导入工具/敬请期待/设置
  • tool_search_bar.dart — 搜索占位符/搜索历史/清空
  • tool_grid_item.dart — 收藏/置顶/分享/新角标/无障碍标签StatefulWidget→ConsumerStatefulWidget
  • tool_stats_sheet.dart — 使用次数/最后使用/评分/使用趋势/版本StatelessWidget→ConsumerWidget

4. 全部14种语言翻译数据更新

  • zh_CN / en 完整翻译其他12种语言回退到zh_CN

5. translation_io_service.dart 同步更新

  • _importDiscover 方法补充110个新键的导入逻辑

[v6.9.1] - 2026-05-31

🌍 首页多语言支持 — 消除硬编码中文字符串

1. THomeBase 新增 24 个翻译键

  • 🆕 dailyRecommendation — 每日推荐
  • 🆕 findingNewSentences — 正在为你寻找新句子...
  • 🆕 gettingTodayRecommendation — 正在获取今日推荐...
  • 🆕 createCard — 创作卡片
  • 🆕 editThisSentence — 编辑此句
  • 🆕 noSentences — 暂无句子
  • 🆕 pullDownToRefresh — 下拉刷新试试
  • 🆕 networkConnectionFailed — 网络连接失败
  • 🆕 clickToRetry — 点击重试
  • 🆕 sentenceCopied — 已复制句子
  • 🆕 offlineMode — 离线模式 — 展示缓存数据
  • 🆕 quoteSquare📖 句子广场
  • 🆕 dragToSort📖 拖动排序
  • 🆕 sortNewest/sortHot/sortClassic — 最新/热门/经典
  • 🆕 noContent📋 暂无内容
  • 🆕 recentlyOpened🕐 最近打开
  • 🆕 selectCustomTool🔧 选择自定义工具
  • 🆕 collapse — 收起
  • 🆕 openAnyPageAutoRecord — 打开任意页面\n自动记录
  • 🆕 longPressToSet — 长按设置
  • 🆕 shareAppSignature — — 闲言APP
  • 🆕 shareFailed — 分享失败

2. TCommon 新增 4 个通用翻译键

  • 🆕 done — 完成
  • 🆕 all — 全部
  • 🆕 refresh — 刷新
  • 🆕 retry — 重试

3. 首页组件硬编码替换8个文件

  • home_daily_card.dart — 每日推荐、加载提示、默认句子、作者前缀
  • home_sentence_card.dart — 作者前缀、分享签名、分享失败、暂无内容
  • home_square_header.dart — 句子广场、拖动排序、完成、全部、排序选项改为ConsumerStatefulWidget
  • home_tool_center.dart — 最近打开、选择工具、收起、自动记录、长按设置
  • home_offline_banner.dart — 离线模式提示改为ConsumerWidget
  • home_empty_daily_card.dart — 每日推荐、重试、获取推荐提示改为ConsumerWidget
  • home_action_buttons.dart — 创作卡片、编辑此句改为ConsumerWidget
  • home_sentence_list_section.dart — 暂无句子、刷新、网络失败、重试、已复制改为ConsumerStatefulWidget

4. 全部14种语言翻译数据更新

  • zh_CN / en / ja / zh_TW / ko / fr / de / es / it / pt / ru / ar / bn / hi

5. translation_io_service.dart 同步更新

  • _importCommon 和 _importHome 方法补充新键的导入逻辑

[v6.9.0] - 2026-05-31

🛠️ 鸿蒙端页面导航全面修复 — 路由注册/空安全/参数补全/深度链接

1. context.push() → context.appPush() 统一导航

  • 🐛 related_recommend_section.dart — 关联推荐点击文章详情无法打开鸿蒙端GoRouter不可用
  • 🐛 inspiration_category_grid.dart — 搜索入口按钮无法跳转搜索页
  • 🐛 daily_read_card.dart — 今日一读推荐芯片点击文章详情无法打开
  • 🐛 sharing_receiver_service.dart — 分享接收后导航到稍后读会话页失败appRouter.push→ctx.appPush

2. OhosNavBridge 缺失路由补全10个路由

  • 🆕 /about/app-info → AppInfoPage
  • 🆕 /about/learn-us → LearnUsPage
  • 🆕 /data-collection-info → DataCollectionInfoPage
  • 🆕 /settings/image-cache → ImageCachePage
  • 🆕 /settings/experimental-features → ExperimentalFeaturesPage
  • 🆕 /leisure → LeisureTimelinePage
  • 🆕 /leisure/settings → LeisureSettingsPage
  • 🆕 /tool/rss_reader → RssReaderPage
  • 🆕 /tool/exchange_rate → ExchangeRatePage
  • 🆕 /tool-center/settings → ToolCenterSettingsPage

3. OhosNavBridge.go() 非Tab路由导航修复

  • 🐛 go() 方法原来只处理Tab切换/home, /discover, /profile非Tab路由被忽略
  • 现在非Tab路由会通过 _resolveRoute 解析并 push 到具体页面
  • 深度链接和 context.appGo() 对具体页面(如 /weather, /poetry现在可正常导航

4. CalcToolPage/HanziToolPage 空安全修复

  • 🐛 extra 为 null 时 as CalcToolConfig 强制转换导致白屏/闪退
  • 改为 as CalcToolConfig? + null 检查缺失时显示友好404页面

5. ToolListPage 参数补全

  • 🐛 缺少 searchTypeshowSearchdetailDesc 三个参数
  • 与 GoRouter 版本对齐,补全所有参数
  • extra 为 null 时显示友好404页面而非崩溃

6. CategoryDetailPage icon 参数补全

  • 🐛 鸿蒙端分类详情页缺少 iconname 参数
  • extra Map 中提取 nameicon,与 GoRouter 版本对齐

7. NotFoundPage 返回首页按钮修复

  • 🐛 context.go(AppRoutes.home) 在鸿蒙端无效依赖GoRouter
  • 改为 context.appGo(AppRoutes.home),鸿蒙端可正常返回首页

8. appReplace 返回值修复

  • 🐛 非鸿蒙端 pushReplacement 返回值被忽略
  • 修正为 Future<T?>.value() 明确返回类型

[v6.8.9] - 2026-05-31

🚀 稍后读页面全面增强 — 搜索/筛选/排序/批量操作/已读/富详情/性能优化

1. 删除死代码

  • 🗑️ 删除 readlater_repository.dart(与 ReadLaterNotifier 逻辑重复,无任何外部引用)

2. 模型增强

  • 🆕 ReadLaterEntry 增加 isRead 字段 + copyWith 方法
  • 🆕 新增 ReadLaterSortMode 枚举timeDesc/timeAsc/type/size

3. Provider 增强

  • 🆕 ReadLaterState 增加 searchQuery/filterType/sortBy/selectedIds 字段
  • 🆕 filteredEntries getter — 搜索+筛选+排序一体化计算
  • 🆕 unreadCount/isSelectMode getter
  • 🆕 Notifier 新增方法: setSearchQuery/setFilterType/setSortBy/toggleRead/markAllRead/toggleSelection/clearSelection/selectAll/removeSelectedEntries/markSelectedRead

4. 通用缩略图组件提取 + 性能优化

  • 🆕 shared/widgets/media/thumbnail_image.dart — 通用 ThumbnailImage 组件
  • 网络图片使用 SafeCachedImage 替代 Image.network(缓存+降级)
  • 本地文件用异步 File.exists() + _fileExistsCache 缓存替代 existsSync() 阻塞
  • ChatFileService 路径解析结果缓存,避免列表滚动时重复 FutureBuilder
  • 🗑️ 删除旧的 ImageThumbnailWidget,统一使用 ThumbnailImage

5. 已读/未读标记 UI

  • 🆕 未读条目左侧显示小蓝点accent色圆点
  • 🆕 已读条目透明度降低至 0.55
  • 🆕 导航栏标题旁显示未读数 badge
  • 🆕 导航栏"全部标记已读"按钮 + 确认弹窗

6. 搜索栏 + 类型筛选 Chip + 排序

  • 🆕 CupertinoSearchTextField 搜索栏(实时搜索标题/副标题/文件名/链接)
  • 🆕 横向滚动类型筛选 Chip全部/📖/🖼️/🎬/📄/🔗/📑/📝
  • 🆕 排序 CupertinoActionSheet时间倒序/时间正序/按类型/按大小)

7. 批量操作模式

  • 🆕 长按条目进入选择模式
  • 🆕 选择模式导航栏:取消 + 已选数量 + 全选
  • 🆕 选择模式条目显示勾选圈
  • 🆕 底部批量操作栏:批量删除 + 批量标记已读

8. 富详情弹窗

  • 🔄 Feed详情BottomSheet + 完整内容 + 复制/分享/取消稍后读操作按钮
  • 🔄 链接详情BottomSheet + 标题+URL + 复制链接/浏览器打开/分享
  • 🔄 通用详情BottomSheet + emoji+类型标签+大小+mimeType标签 + 复制/分享/取消稍后读
  • 🆕 链接打开使用 ExternalLinkDialog 安全确认弹窗

9. 国际化

  • 🆕 TReadLater 新增23个翻译键搜索/筛选/排序/批量/已读/操作等)
  • 14个语言文件全部更新中/繁/日/韩/法/德/西/意/葡/俄/阿拉伯/印地/孟加拉/英)
  • 🆕 THome 新增向后兼容 getter

10. 其他

  • 🔄 Share.shareSharePlus.instance.share修复废弃API警告
  • 🔄 CupertinoIcons.bookmark_slashCupertinoIcons.bookmark(修复不存在的图标)

[v6.8.8] - 2026-05-31

🌍 国际化增强 — 统一插值函数 + authorPrefix/numberThousand翻译键

任务1: 统一插值函数 interpolate

  • 🆕 TFunc 新增 interpolate(template, args) 方法,统一处理 {0}, {1}, {key} 模板插值
  • 🔄 readlater_page.dartt.home.readLaterCountFormat.replaceAll('{0}', ...)tFunc.interpolate(t.home.readLaterCountFormat, {'0': ...})
  • 🔄 sentence_detail_sheet.dartt.home.searchQuery.replaceAll('{0}', ...)tFunc.interpolate(t.home.searchQuery, {'0': ...})
  • 🆕 两个页面均通过 translationsFuncProvider 获取 TFunc 实例

任务2: 中文破折号国际化 — authorPrefix 翻译键

  • 🆕 THomeBase 新增 authorPrefix 字段(中文/日文/韩文: '—— ',欧洲语言: '— ',英文: ''
  • 🔄 sentence_detail_sheet.dart'—— ${sentence.author!}''${t.home.authorPrefix}${sentence.author!}'
  • 14个语言文件全部添加 authorPrefix

任务3: 数字格式化 w/k 国际化 — numberThousand 翻译键

  • 🆕 THomeBase 新增 numberThousand 字段(多数语言: 'k',阿拉伯: 'ألف',孟加拉: 'হাজার',印地: 'हज़ार'
  • 🔄 sentence_detail_sheet.dart'(count/1000)...k''(count/1000)...${t.home.numberThousand}'
  • 14个语言文件全部添加 numberThousand

兼容性修复:

  • 🏗️ THome 新增向后兼容 getter@Deprecated委托到 base/sentenceDetail/readLater 子模块,确保旧代码 t.home.liked 等仍可编译
  • 🏗️ translation_io_service.dart_importHome 方法重构为子模块结构,支持 base/sentenceDetail/readLater 分层导入

[v6.8.7] - 2026-05-31

🏗️ 稍后读页面重构 — 单文件拆分为多文件架构

重构内容:

  • 🏗️ readlater_page.dart (1378行) 拆分为5个文件
    • readlater/readlater_entry.dart — 数据模型 (ReadLaterEntryType + ReadLaterEntry)
    • readlater/readlater_provider.dart — 状态管理 (ReadLaterNotifier + ReadLaterStateRiverpod 3.0 Notifier)
    • readlater/readlater_entry_widgets.dart — 7种条目UI组件 + 缩略图组件 + 分发函数
    • readlater/readlater_utils.dart — 工具方法 (mimeTypeToEmoji, docTypeConfig, DocDisplayConfig)
    • readlater_page.dart — 主页面 (精简至289行)
  • 🔄 状态管理从 StatefulWidget+setState 升级为 Riverpod 3.0 Notifier
  • 🔗 readlater_repository.dart 重复的 ReadLaterEntry/ReadLaterEntryType 定义移除,改为引用统一模型
  • 所有功能100%保留7种条目类型、双数据源合并、离线缓存、滑动删除、下拉刷新、滚动加载、3种详情弹窗
  • Flutter analyze 0 error

[v6.8.6] - 2026-05-31

🐛 关键Bug修复 — SearchType与后端API类型不匹配

问题: 前端 SearchType 枚举的 value 与后端PHP实际接受的 type 参数不一致导致歌词和常识搜索API调用失败。

修复:

  • 🐛 SearchType.lyric.value'changshilyric' 修正为 'lyric'(后端 Hanzi.php searchMap 使用 'lyric'
  • 🐛 SearchType.changshi.value'changshi' 修正为 'cs'(后端 Searchall.php sourceMap 使用 'cs'
  • _validateSearchTypes() 后端支持列表与实际PHP代码完全对齐
  • 新增5个单元测试后端API一致性校验、旧值不再匹配验证、fromValue新值验证
  • 测试总数 57 → 62全部通过

后端对照来源PHP源码

  • Hanzi.php $searchMap 支持17种type: poetry/brainteaser/couplet/wisdom/story/saying/riddle/xiehouyu/zuowen/why/drug/food/herbal/pianfang/tisana/changshi/lyric
  • Searchall.php $sourceMap 支持44种type + 'all',前端使用的: cs/zgjm/illness/surname/jieqi/nation/joke

[v6.8.5] - 2026-05-31

🌍 首页/发现/我的页面多语言支持 — 硬编码中文全面迁移至翻译系统

核心变更:

  • 🆕 新增 THome 翻译类型65个翻译键覆盖首页句子详情Sheet、稍后读页面、电池提示等所有硬编码文本
  • 🆕 扩展 TDiscover 翻译类型(+12个翻译键覆盖关联推荐、今日一读、灵感分类、朗读等
  • 🆕 扩展 TProfile 翻译类型(+6个翻译键覆盖扫码方式、实验功能、审核状态等
  • 🆕 扩展 TAbout 翻译类型(+34个翻译键覆盖关于页面分区标题、菜单项、评分对话框、检查更新等
  • 🆕 更新 t_root.dart 根类型,新增 home 模块
  • 🆕 更新 translation_io_service.dart,新增 _importHome 方法和扩展导入方法

语言文件更新14种语言全覆盖

  • zh_CN / en / ja / zh_TW / ko / de / it / es / fr / ru / pt / ar / bn / hi

页面硬编码替换:

  • home_page.dart — 电池提示、默认句子4处
  • sentence_detail_sheet.dart — 点赞/收藏/稍后读/分享/书签/标签/搜索/NFC/编辑/屏蔽/搜索标题/数字单位30处
  • readlater_page.dart — 稍后读页面全部UI文本31处typeLabel getter改造为方法
  • related_recommend_section.dart — 关联推荐标题、不感兴趣3处
  • daily_read_card.dart — 今日一读、换一组、关联推荐、空状态4处
  • inspiration_detail_sheet.dart — 灵感标签、朗读4处
  • inspiration_category_grid.dart — 灵感分类、搜索、加载更多3处
  • profile_page.dart — 扫码方式、实验功能、审核状态6处
  • about_page.dart — 基础信息/互动反馈/法律信息/开发者分区、评分对话框、检查更新、邮箱提示38+处)
  • app_locale.dart — 繁体中文国旗 🇹🇼🇨🇳

[v6.8.4] - 2026-05-31

🏗️ 架构增强与质量提升6项

1. 版本号统一管理 — 移除硬编码运行时从pubspec获取

  • app_constants.dart — 移除 AppConstants.version/buildNumber 硬编码,AppVersion 成为唯一版本号来源
  • AppVersion 回退值与 pubspec.yaml 同步6.5.103 / 260510301
  • main.dart — 新增 AppVersion.init() 调用,启动时从 PackageInfo 获取真实版本号
  • 全局 10 处 AppConstants.versionAppVersion.version2 处 AppConstants.buildNumberAppVersion.buildNumber

2. API搜索类型校验机制

  • search_type.dart — 新增 SearchApiType 枚举hanziSearch/searchAll每个 SearchType 绑定所属API
  • 新增 isSupportedBy()/forApi()/valuesForApi() 工具方法
  • 新增 validateAll() 运行时校验,启动时自动检查前端类型与后端是否一致
  • tool_center_provider.dart — build() 中调用 _validateSearchTypes() 启动校验

3. 灵感页面手势优化:

  • inspiration_page.dart — 用 ScrollController 替代 _lastScrollPixels 差值法
  • iOS 弹性滚动 scrollDelta 为 null 时,通过 ScrollController 差值精确计算下拉手势

4. Hive缓存增强

  • kv_storage.dart — 新增按工具ID隔离的搜索历史getToolSearchHistory/setToolSearchHistory/addToolSearchHistory/clearToolSearchHistory
  • kv_storage.dart — 新增工具排序偏好持久化getToolSortOrder/setToolSortOrder
  • tool_center_provider.dart — 新增 saveToolSortOrder/recordToolSearch/getToolSearchHistory/clearToolSearchHistory 方法
  • tool_list_page.dart — 搜索提交时自动记录工具搜索历史
  • _loadPersistedData 中加载并应用工具排序偏好

5. App Links深度链接

  • tool_item.dart — 新增 deepLink/universalLink getter每个工具可生成分享链接
  • app_router.dart_resolveToolPath 新增 37 个工具路由映射
  • tool_list_page.dart — 分享功能使用深度链接xianyan://tool/

6. 补充单元测试57个测试全部通过

  • test/features/discover/models/search_type_test.dart — 22个测试枚举值/fromValue/isSupportedBy/forApi/valuesForApi/validateAll
  • test/features/discover/models/tool_item_test.dart — 28个测试构造/copyWith/recordUse/needsNetwork/deepLink/universalLink/defaultTools
  • test/features/discover/services/tool_api_service_test.dart — 7个测试SearchType与ToolItem一致性校验/API方法存在性

[v6.8.3] - 2026-05-31

🔧 综合Bug修复与功能优化13项

0. 版本号引用重构:

  • 全局将 AppConstants.version 替换为 AppVersion.version8处
  • 全局将 AppConstants.buildNumber 替换为 AppVersion.buildNumber2处
  • 涉及文件about_page, general_settings_page, account_export_info_sheet, learn_us_sections, learn_us_page, app_info_sections, app_info_page, account_section, api_interceptor

1. 工具中心改名 + 按钮溢出修复:

  • tool_item.dart — "游戏中心"改名为"文字迷"
  • tool_grid_item.dart — FittedBox包裹文字防溢出

2. 灵感页面下拉 + 返回自动打开工具中心:

  • inspiration_page.dart — scrollDelta为null时使用回退值initState中关闭已打开面板

3. 删除阅读历史 + 合并番茄钟倒计时:

  • tool_item.dart — 删除history和countdown合并为"专注计时"(pomodoro_timer)

4. 歌词大全搜索后点击结果卡死:

  • tool_list_page.dart — 限制详情弹窗条目数(take 20)和文本长度(200字符截断)

5. 工具中心部分工具搜索报错:

  • search_type.dart — lyric的value改为'changshilyric'
  • tool_item.dart — changshi从hanzi_search改为searchall接口

6. 导入工具按钮改次要色 + 敬请期待:

  • tool_bottom_bar.dart — 按钮颜色改为textHint点击显示toast"敬请期待"

7. 创作卡片内容未在编辑卡片显示:

  • home_page.dart — 空字符串判断改为isNotEmpty检查
  • quick_card_sheet.dart — initialText空值处理
  • sentence_detail_sheet.dart — 新增"创作卡片"按钮

8. 精灵角色气泡背景透明:

  • character_tip_bubble.dart — 背景改为bgCard高不透明度(0.95/0.88)+毛玻璃效果

9. 闲言工作室改名 + 版本号硬编码:

  • 14种语言文件companyName统一改为'Micro storm studio'
  • about_page.dart / general_settings_page.dart — 版本号改用AppConstants.version

10. 去评价改toast

  • about_page.dart — _onRateApp改为AppToast.showInfo('未找到应用商店')

11. 收集信息增加下载按钮:

  • data_collection_info_page.dart — 新增"下载我的信息"按钮仅登录显示点击弹出导出Sheet

[v6.8.1] - 2026-05-31

🌍 首页/发现/我的页面多语言支持 — 硬编码中文全面迁移至翻译系统

核心变更:

  • 🆕 新增 THome 翻译类型43个翻译键覆盖首页句子详情Sheet、电池提示、默认句子等所有硬编码文本
  • 🆕 扩展 TDiscover 翻译类型(+12个翻译键覆盖关联推荐、今日一读、灵感分类、朗读等
  • 🆕 扩展 TProfile 翻译类型(+6个翻译键覆盖扫码方式、实验功能、审核状态等
  • 🆕 扩展 TAbout 翻译类型(+29个翻译键覆盖关于页面分区标题、菜单项、评分对话框、邮箱提示等
  • 🆕 更新 t_root.dart 根类型,新增 home 模块
  • 🆕 更新 translation_io_service.dart,新增 _importHome 方法和扩展导入方法

语言文件更新14种语言全覆盖

  • zh_CN / en / ja / zh_TW / ko / de / it / es / fr / ru / pt / ar / bn / hi

页面硬编码替换:

  • home_page.dart — 电池提示、默认句子4处
  • sentence_detail_sheet.dart — 点赞/收藏/稍后读/分享/书签/标签/搜索/NFC/编辑/屏蔽等28处
  • related_recommend_section.dart — 关联推荐标题、不感兴趣3处
  • daily_read_card.dart — 今日一读、换一组、关联推荐、空状态4处
  • inspiration_detail_sheet.dart — 灵感标签、朗读4处
  • inspiration_category_grid.dart — 灵感分类、搜索、加载更多3处
  • profile_page.dart — 扫码方式、实验功能、审核状态6处
  • about_page.dart — 基础信息/互动反馈/法律信息/开发者分区、评分对话框、邮箱提示30+处)
  • app_locale.dart — 繁体中文国旗 🇹🇼🇨🇳

[v6.8.0] - 2026-05-31

💡 灵感页面组件拆分与功能增强

1. 组件拆分 — inspiration_widgets.dart 1600行→7文件 ♻️

  • inspiration_widgets.dart → barrel导出文件向后兼容
  • daily_read_card.dart — DailyReadCard + FeedItemChip(compact)
  • inspiration_category_grid.dart — InspirationCategoryGrid
  • inspiration_category_pill.dart — InspirationCategoryPill
  • inspiration_list_card.dart — InspirationListCard
  • inspiration_detail_sheet.dart — InspirationDetailSheet
  • related_recommend_section.dart — RelatedRecommendSection + FeedItemChip(normal)
  • feed_item_chip.dart — 通用FeedItemChip组件合并_DailyRecommendChip+_RecommendCard

2. 代码重复消除 ♻️

  • 🆕 core/utils/data/number_formatter.dart — 提取NumberFormatter.formatCount()消除3处重复_formatCount
  • ♻️ DailyReadCard._stripHtml()StringX.cleanHtml扩展方法复用移除重复HTML清洗逻辑

3. 组件合并 — FeedItemChip 🆕

  • 🆕 FeedItemChip 通用推荐芯片组件,支持compact/normal两种尺寸模式
  • 🆕 FeedItemChipMode 枚举控制布局差异
  • 🗑️ 移除_DailyRecommendChip_RecommendCard两个私有重复组件

4. 点击交互补全 🔧

  • DailyReadCard 整体卡片添加PressableCard包裹,点击跳转文章详情页
  • 关联推荐芯片添加onTap跳转文章详情页
  • 灵感分类搜索入口按钮,点击跳转搜索页面

5. 不感兴趣反馈 🆕

  • 🆕 RelatedRecommendSection 推荐卡片长按弹出CupertinoActionSheet
  • 🆕 "不感兴趣"选项调用FeedService.action('dislike'),成功后自动刷新推荐列表

6. TTS朗读功能 🆕

  • 🆕 InspirationDetailSheet 增加"朗读"按钮,调用TtsService实现语音朗读
  • 🆕 朗读状态实时同步(播放/停止切换),弹窗关闭自动停止朗读
  • ♻️ 弹窗内容重构为_DetailSheetContent StatefulWidget以管理TTS生命周期

7. 统一刷新入口 ♻️

  • ♻️ InspirationPage._refreshAll() 统一刷新inspirationProvider+contentDiscoverProvider
  • ♻️ 导航栏刷新按钮和下拉刷新统一调用_refreshAll避免UI闪烁

[v6.7.9] - 2026-05-31

🌍 权限枚举 i18n 重构 — AppPermission/PermissionGroup/AppPermissionStatus 硬编码中文迁移至翻译系统

重构目标:

  • AppPermission 枚举的 label/description/usageScenes 从硬编码中文改为通过翻译系统i18n获取
  • PermissionGroup 枚举的 labelAppPermissionStatus 枚举的 label 同步迁移
  • 新增 denialImpact(BuildContext context) 方法替代原 _getDenialImpact 静态方法,使拒绝影响说明也走翻译系统
  • usageScenes 使用管道符 | 分隔存储在翻译字符串中,运行时 split 为 List<String>

核心变更:

  • permission_service.dart
    • ♻️ AppPermissionStatus.label 从字段改为 String label(BuildContext context) 方法
    • ♻️ PermissionGroup.label 从字段改为 String label(BuildContext context) 方法
    • ♻️ AppPermission.label/description/usageScenes 从字段改为方法(需 BuildContext
    • 🆕 新增 AppPermission.denialImpact(BuildContext context) 方法
    • 🗑️ 移除 _getDenialImpact 静态方法
    • 🆕 新增 _permOf(BuildContext context) 辅助函数,通过 ProviderScope.containerOf 获取翻译
  • t_settings_permission.dart
    • 🆕 新增48个翻译字段12权限 × 4字段label/desc/usage/denial
  • 14种语言文件zh_cn/zh_tw/en/ja/ko/de/fr/es/pt/it/ru/ar/hi/bn
    • 🆕 各新增48个权限翻译值
  • permission_management_page.dart
    • ♻️ 所有 permission.labelpermission.label(context)
    • ♻️ 所有 permission.descriptionpermission.description(context)
    • ♻️ 所有 permission.usageScenespermission.usageScenes(context)
    • ♻️ _buildTopRow/_buildDescription/_buildUsageScenes 方法签名新增 BuildContext context 参数
  • agreement_page.dart
    • ♻️ group.labelgroup.label(context)
    • ♻️ perm.labelperm.label(context)
    • ♻️ perm.descriptionperm.description(context)

[v6.7.8] - 2026-05-31

🔒 外部分享沙箱路径验证与修复

1. readlater_repository.dart metaFilePath 回退缺失 🔴高:

  • 🐛 根因_chatMessageToEntry() 中 Document/Image/Video/File 条目的 filePath/imagePath/videoPath 缺少 metaFilePath 回退
  • 🐛 Document 类型 msg.text 存储的是 fileName 而非文件路径,导致 filePath 回退到文件名而非实际沙箱路径
  • 所有消息类型统一添加 metaFilePath = msg.meta?['filePath'] 回退链:att?.filePath ?? metaFilePath ?? msg.text

2. sharing_receiver_service.dart meta 字段补全 🔴高:

  • 🐛 Image/Video 的 meta 中缺少 filePathfileSize,与 Document/File 类型不一致
  • Image meta 新增 filePath(沙箱相对路径)和 fileSize
  • Video meta 新增 filePathfileSize
  • Document meta 新增 fileSize
  • File meta 新增 fileSize

3. 音频类型处理 🟡中:

  • 🐛 audio/* MIME 类型落入通用文件分支,未使用 ChatMessageService.sendAudio()
  • 新增 mimeType.startsWith('audio/') 分支,调用 sendAudio() 并存储 filePath/fileSize/duration

4. text/ MIME 类型作为文档处理 🟡中:*

  • text/plain 等文本 MIME 类型从通用文件分支移至文档分支,与 application/* 统一处理

5. ChatFileService.getAbsolutePath 绝对路径防御 🔴高:

  • 🐛 根因:若传入已是绝对路径(如旧数据中的 iOS Inbox 路径),会产生 /Documents//var/mobile/Inbox/file.jpg 错误路径
  • 新增 isRelativePath() 判断(以 chat_attachments/ 开头)
  • getAbsolutePath()http// 开头或非相对路径直接返回,避免错误拼接

6. readlater_page.dart 缩略图路径解析优化 🟢低:

  • ♻️ _buildImageThumbnailFile(path).existsSync() 仅对绝对路径(/ 开头)执行,避免对相对路径做无意义同步检查

修改文件:

  • lib/features/home/repositories/readlater_repository.dart — 补全 metaFilePath 回退
  • lib/core/services/readlater/sharing_receiver_service.dart — 补全 meta 字段+音频类型+text/*处理
  • lib/features/discover/services/chat_file_service.dart — getAbsolutePath 绝对路径防御+isRelativePath
  • lib/features/home/presentation/providers/readlater_page.dart — 缩略图路径解析优化

[v6.7.8] - 2026-05-31

🌍 协议内容多语言支持 — 覆盖14种语言

重构目标:

  • 将协议系统从仅支持中英文扩展为支持14种语言
  • 日语(ja)、韩语(ko)、繁体中文(zh_tw)提供章节标题和关键段落翻译
  • 其余9种语言(fr/de/es/pt/it/ru/ar/hi/bn)使用英文内容回退

修改文件:

  • lib/features/agreements/data/agreement_types.dart
    • 🆕 添加 _localizedTitles 映射14种语言的协议标题翻译
    • 🆕 添加 _localizedSubtitles 映射ja/ko/zh_tw副标题翻译其余回退英文
    • ♻️ 重构 titleFor/subtitleFor从二元判断改为Map查找支持任意语言
    • 🗑️ 移除 _subtitleZh getter整合进 _localizedSubtitles
  • lib/features/agreements/data/agreement_data.dart
    • ♻️ _isEnglish_resolveLanguageCode:返回实际语言代码而非布尔值
    • ♻️ getContentswitch表达式路由14种语言_ => _getEnContent 统一回退
    • ♻️ getUpdateDate支持ja/ko/zh_tw日期格式
    • 🆕 _getJaContent/_getKoContent/_getZhTwContent3种语言路由方法
    • 🆕 30个协议内容常量10种协议 × 3种语言包含翻译的章节标题和关键段落

支持的语言14种

语言代码 语言 协议内容状态
zh 简体中文 完整
en English 完整
ja 日本語 📝 章节标题+关键段落
ko 한국어 📝 章节标题+关键段落
zh_tw 繁體中文 📝 章节标题+关键段落
fr Français 🔄 英文回退
de Deutsch 🔄 英文回退
es Español 🔄 英文回退
pt Português 🔄 英文回退
it Italiano 🔄 英文回退
ru Русский 🔄 英文回退
ar العربية 🔄 英文回退
hi हिन्दी 🔄 英文回退
bn বাংলা 🔄 英文回退

[v6.7.7] - 2026-05-31

♻️ 互动数据流重构 — 本地持久化与服务端同步解耦

重构目标:

  • HomeInteractionMixintoggleLike/toggleFavorite/toggleReadLater 三个方法的"本地持久化"和"服务端同步"逻辑解耦为独立方法
  • 统一三者的执行流程为乐观更新UI → 本地持久化 → 服务端同步

提取方法:

  • ♻️ toggleLike_persistLikeLocally + _syncLikeToServer
  • ♻️ toggleFavorite_persistFavoriteLocally + _syncFavoriteToServer
  • ♻️ toggleReadLater_persistReadLaterLocally + _syncReadLaterToServer

修改文件:

  • lib/features/home/providers/home_interaction_mixin.dart — 三个toggle方法解耦重构提取6个私有方法

[v6.7.6] - 2026-05-31

💡 灵感页面 iOS 26 风格全面重写

1. 今日一读卡片视觉升级 🔴高:

  • 🎨 头部区域新增渐变装饰背景,颜色随 FeedType 动态变化
  • 🎨 图标容器尺寸 28→32圆角 8→10视觉更突出
  • 🎨 "换一组"按钮使用 typeColor 着色,与卡片主题统一
  • ♻️ 统计标签从 Row 改为 Wrap防止窄屏溢出
  • ♻️ 关联推荐从纵向列表改为横向滑动芯片,节省纵向空间

2. 灵感分类卡片左侧色条设计 🔴高:

  • 🆕 InspirationListCard 新增左侧4px分类色条颜色映射热门=黄/爱情=粉/励志=绿/自然=青/文学=蓝/影视=紫
  • 🆕 使用 IntrinsicHeight 确保色条与内容等高
  • 🆕 GlassContainer padding=zero + 手动 Padding色条不被内边距影响
  • ♻️ 分类标签颜色从统一 accent 改为各分类独立色,增强视觉区分

3. 关联推荐横向滑动卡片 🔴高:

  • 🆕 RelatedRecommendSection 从纵向列表改为横向滑动卡片
  • 🆕 _RecommendCard 使用渐变背景 + typeColor 边框固定宽度160
  • 🆕 卡片内容:分类标签+标题+作者,紧凑布局

4. 代码质量修复:

  • 🐛 minSize deprecated → minimumSize: Size.zero
  • 🐛 移除 inspiration_page.dart 未使用的 importapp_radius/glass_container
  • 🐛 GlassDepth.base 冗余参数移除
  • 🐛 Text widget 添加 const 修饰

修改文件:

  • lib/features/discover/presentation/pages/home/inspiration_page.dart — 移除未使用import
  • lib/features/discover/presentation/pages/home/inspiration_widgets.dart — 全面重写组件

[v6.7.5] - 2026-05-31

🌐 引导页多语言+协议强调色 & 导出个人信息真实数据

1. 导出个人信息 content/preferences 字段获取真实数据 🔴高:

  • 🐛 根因AccountExportInfoSheetcontentpreferences 字段使用占位文字 "内容数据需从服务端获取" / "偏好设置数据需从服务端获取"
  • 新增 _collectPreferences() 方法:从本地 KvStorage 读取主题模式/字体大小/语言/推送/摇一摇等偏好设置
  • 新增 _collectContentData() 方法:从服务端 API 获取 dashboard/stats/interaction 数据,合并为 content 对象
  • 异常保护API 调用失败时返回 {'error': '...'} 而非崩溃

2. 引导页权限/收集信息/协议多语言化 🔴高:

  • 🆕 新增 TSettingsPermission 翻译类型 — 31个翻译 key权限管理页完整多语言化
  • 🆕 新增 TSettingsDataCollection 翻译类型 — 46个翻译 key数据收集信息页完整多语言化
  • 🆕 TSettings 新增 permissiondataCollection 子类型
  • 🆕 14种语言文件全部新增权限管理+数据收集翻译数据
  • ♻️ PermissionManagementPage 从硬编码中文改为 perm.xxx 翻译引用
  • ♻️ DataCollectionInfoPage 从 StatelessWidget 改为 ConsumerWidget从硬编码中文改为 dc.xxx 翻译引用

3. 协议勾选文字《》书名号强调色+可点击 🔴高:

  • _buildCheckboxRow 使用正则 RegExp(r'《([^》]+)》') 解析《》标记
  • RichText + TextSpan 渲染,《》内文字使用 ext.accent 强调色 + FontWeight.w600
  • TapGestureRecognizer 点击《》内文字跳转到对应协议 Tab 页
  • _onAgreementTap 支持所有14种语言的协议名映射隐私政策/用户协议/权限使用说明)
  • 14种语言文件的 agreeAllCheckboxreadPermissionCheckbox 添加《》标记

新增文件:

  • lib/l10n/types/t_settings_permission.dart — 权限管理页翻译类型31个key
  • lib/l10n/types/t_settings_data_collection.dart — 数据收集信息页翻译类型46个key

修改文件:

  • lib/features/mine/settings/presentation/account/account_export_info_sheet.dart — 真实数据替代占位文字
  • lib/features/onboarding/presentation/pages/agreement_page.dart — 《》强调色+可点击+多语言协议名映射
  • lib/features/mine/settings/presentation/privacy/permission_management_page.dart — 完整多语言化
  • lib/features/mine/settings/presentation/privacy/data_collection_info_page.dart — 完整多语言化
  • lib/l10n/types/t_settings.dart — 新增 permission/dataCollection 子类型
  • lib/l10n/types/t.dart — 新增 export
  • lib/l10n/languages/*.dart — 14种语言新增翻译数据+《》标记

[v6.7.4] - 2026-05-31

📖 稍后读三项核心修复 — 分享文件显示/导航逻辑/句子数据流

1. 外部分享文件在稍后读页面显示占位图修复 🔴高:

  • 🐛 根因SharingReceiverService._handleFile 将外部临时文件路径直接存入数据库App重启后文件不存在稍后读页面无法加载显示占位图
  • 图片分享:使用 ChatFileService.saveImage() 复制到沙箱并生成缩略图,存储相对路径
  • 视频分享:使用 ChatFileService.saveFile() 复制到沙箱,缩略图也一并复制保存
  • 文档分享:使用 ChatFileService.saveFile() 复制到沙箱,meta['filePath'] 存储相对路径
  • 文件分享:同上,meta['filePath'] 存储相对路径
  • 分享后调用 notifyReadlaterRefresh() 触发稍后读页面刷新
  • ReadLaterPage._chatMessageToEntry 增加 meta['filePath'] 回读逻辑,兼容沙箱相对路径

2. 分享后导航到会话流页面弹出"是否离开闲言" 🔴高:

  • 🐛 根因SharingReceiverService._showConfirmDialog 只在主页弹出简单确认框,未导航到会话流页面
  • 新增 _navigateToReadLaterChat 方法:分享成功后导航到稍后读会话流页面(/readlater-chat
  • 弹出 CupertinoAlertDialog 包含"离开闲言"和"留下查看"两个选项
  • 文本/链接分享也统一走导航逻辑

3. 句子详情稍后读在发现页不显示修复 🔴高:

  • 🐛 根因1HomeInteractionMixin.toggleReadLaterfeedId <= 0 时提前返回,跳过了 ChatMessageService.sendReadLaterSentence 数据库写入
  • 🐛 根因2SentenceDetailSheet/SentenceDetailPanel 先调用 interactionProvider.toggleInteraction 再调用 onReadLater导致服务端API重复调用
  • toggleReadLater 将数据库写入移到 feedId 检查之前,确保无论 feedId 是否有效都写入本地数据库
  • SentenceDetailSheet 简化稍后读按钮逻辑:统一走 onReadLater 回调,由 toggleReadLater 统一处理服务端同步+本地写入
  • SentenceDetailPanel 同步简化稍后读逻辑

修改文件:

  • lib/core/services/readlater/sharing_receiver_service.dart — 文件复制到沙箱+导航到会话流+notifyReadlaterRefresh
  • lib/features/home/providers/home_interaction_mixin.dart — toggleReadLater数据库写入移到feedId检查前
  • lib/features/home/presentation/providers/sentence_detail_sheet.dart — 简化稍后读按钮逻辑
  • lib/features/home/presentation/panels/sentence_detail_panel.dart — 同步简化稍后读逻辑
  • lib/features/home/presentation/providers/readlater_page.dart — meta['filePath']回读兼容

[v6.7.3] - 2026-05-31

🛡️ 缓存管理空态修复 & 密保问题状态同步修复

1. 缓存管理存储空间显示0KB修复 🔴高:

  • 🐛 StorageOverviewSection 当缓存为空时显示"0 B"现改为友好的空态UI
  • 空态显示托盘图标 + 提示文案"浏览图片后缓存将自动出现在这里"
  • 有缓存时正常显示统计项、进度条、容量信息

2. 密保问题设置后依旧显示"未验证"修复 🔴高:

  • 🐛 根因:服务端 UserCenter 接口将 sec_question 放在 extra.sec_question.question_id 嵌套路径,客户端 UserModel.fromJson 从顶层 json['sec_question'] 解析导致永远为0
  • UserModel 新增 _parseSecQuestion() / _parseSecQuestionText() 静态方法兼容顶层和嵌套两种JSON路径
  • SecurityQuestionPage._handleSubmit()refreshUser() 添加 await,确保用户数据刷新完成后再返回页面
  • 修复后密保设置成功 → refreshUser() 从服务端获取最新数据 → hasSecQuestion 正确返回 true → 安全评分卡片/账户设置页密保状态正确显示"已设置"

修改文件:

  • lib/features/mine/settings/presentation/image_cache_widgets.dart — StorageOverviewSection空态UI
  • lib/features/auth/models/user_model.dart — fromJson兼容sec_question嵌套路径解析
  • lib/features/mine/settings/presentation/account/security_question_page.dart — refreshUser添加await
  • lib/features/mine/settings/presentation/account/account_security_score_card.dart — 注释更新

[v6.7.2] - 2026-05-31

📱 关于页面修复与增强 — 布局溢出修复/备案迁移/贡献者鸣谢

1. 软件信息页技术栈布局溢出修复 🔴高:

  • 🐛 TechStackSectionWrap + LayoutBuilder 替代 GridView.count,修复小屏溢出
  • 每个技术栈卡片宽度动态计算 (可用宽度 - 间距) / 2,自适应屏幕

2. 备案信息从了解我们迁移至软件信息页 🟡中:

  • ♻️ IcpSectionlearn_us_sections.dart 迁移至 app_info_sections.dart
  • ♻️ AppInfoFooter 移除硬编码备案号(已由 IcpSection 完整展示)
  • 了解我们页面移除 IcpSection替换为 ContributorsSection

3. 了解我们增加贡献者和特别鸣谢 🟡中:

  • 🆕 新增 ContributorsSection — 贡献者入口 + 特别鸣谢入口
  • 🆕 点击贡献者弹出 CupertinoModalPopup 底部 Sheet展示贡献者列表
  • 🆕 点击特别鸣谢弹出底部 Sheet展示 Flutter Team / 开源社区 / QQ群 / 用户
  • 🆕 新增 _ContributorCard 私有组件 + ContributorData 数据类

4. 多语言翻译新增 🌐

  • 🆕 14种语言新增12个翻译 keycontributors/contributorsDesc/specialThanks/specialThanksDesc/contributorRole1-4/thanksFlutter/thanksOpenSource/thanksQQGroup/thanksUsers

修改文件:

  • lib/features/mine/profile/presentation/app_info_sections.dart — TechStackSection用Wrap修复; 新增IcpSection; 新增Clipboard import
  • lib/features/mine/profile/presentation/app_info_page.dart — 新增IcpSection; Footer移除硬编码备案号
  • lib/features/mine/profile/presentation/learn_us_sections.dart — 移除IcpSection; 新增ContributorsSection/_ContributorCard/ContributorData
  • lib/features/mine/profile/presentation/learn_us_page.dart — IcpSection替换为ContributorsSection
  • lib/l10n/types/t_about.dart — 新增12个翻译字段
  • lib/l10n/languages/*.dart — 14种语言新增12个翻译值

[v6.7.1] - 2026-05-31

🌐 引导页语言选择优化 & 语言设置页国旗显示

1. 引导页语言列表展开/收起 🔴高:

  • 🆕 _buildLocaleChips 默认只展示前4种语言第5个位置显示"🌐 更多..."按钮
  • 🆕 点击展开按钮显示全部12种语言按钮变为"收起"+ 上箭头
  • ♻️ WelcomePageConsumerWidget 转为 ConsumerStatefulWidget_localeExpanded 状态持久化
  • 🆕 语言 chip 左侧显示国旗 emoji

2. 引导页语言列表增加繁体中文 🟡中:

  • 🆕 OnboardingConstants.supportedLocales 新增 zh_tw(繁體中文 🇹🇼
  • 🆕 每个语言条目增加 flag 字段(国旗 emoji

3. 语言设置页国旗显示 🟡中:

  • 🆕 AppLocale 枚举增加 flag 字段(国旗 emoji
  • 🆕 language_settings_page.dart 语言列表项左侧显示国旗图标
  • 🌐 "跟随系统"显示 🌐 emoji简体中文 🇨🇳,繁體中文 🇹🇼

修改文件:

  • lib/features/onboarding/data/onboarding_constants.dart — supportedLocales 增加 flag 字段 + 繁體中文
  • lib/features/onboarding/presentation/pages/welcome_page.dart — ConsumerStatefulWidget + 展开/收起 + 国旗
  • lib/l10n/app_locale.dart — AppLocale 枚举增加 flag 字段
  • lib/features/mine/settings/presentation/language_settings_page.dart — 语言列表项显示国旗

[v6.7.0] - 2026-05-31

🏗️ 架构级重构9项核心改进 — 异常保护/类型安全/工具修复/离线缓存

1. AppDatabase 统一异常保护 🔴高:

  • 🛡️ 新增 _safeDb<T> / _safeDbList<T> / _safeDbVoid / _safeDbInt / _safeDbMap 5个安全执行方法
  • 🛡️ 80+ 个 public Future 方法全部包裹 try/catchDB操作失败不再直接崩溃
  • 🛡️ 统一返回默认值null/空列表/0/空MapLog.e 记录异常堆栈

2. Provider 初始化保护 🔴高:

  • 🆕 新增 SafeNotifierInit / SafeAsyncInit / SafeChangeNotifierInit 三个 Mixin
  • 🛡️ 15个 Provider 的 _init() 方法统一使用 safeNotifierInit() 包裹
  • 🛡️ 初始化失败不再导致整个功能不可用,异常被捕获并记录日志

3. 路由逻辑去重 🟡中:

  • 🆕 新增 ToolNavigationHelper 工具类,统一导航逻辑
  • ♻️ tool_panel_navigator.darttool_detail_page.dart 各删除 60+ 行重复代码
  • navigateToTool() / isNavigable() / getStatusMessage() 三个静态方法

4. 搜索类型枚举化 🟡中:

  • 🆕 新增 SearchType 枚举24个值覆盖所有搜索类型
  • 🔒 ToolNavConfig.searchTypeString? 改为 SearchType?,编译期防拼写错误
  • fromValue() 反向查找 + label 中文标签

5. 删除听歌识曲工具 🔴高:

  • 🗑️ 删除 music_recognition_service.dartmusic_recognition_page.dart
  • 🗑️ 删除 tool_routes.dart 中音乐识别路由、app_routes.dart 中路由常量、home_tool_center.dart 中图标映射
  • 原因audd.io API 需付费 Token

6. RSS 启动初始化 🟡中:

  • main.dart 启动时调用 RssService.init(),防止首次打开 RSS 页面 Hive 存储报错

7. 汇率离线缓存 🟢低:

  • 💾 ExchangeRateService 新增 Hive 离线缓存网络不可用时使用缓存数据7天有效期
  • main.dart 启动时调用 ExchangeRateService.init()
  • 🔄 优先网络获取,失败回退缓存

8. RSS OPML 导入导出

  • 📤 exportToOpml() — 生成标准 OPML XML按分类分组
  • 📥 importFromOpml() — 解析 OPML XML正则提取 outline自动去重
  • 🔧 _xmlEscape() / _xmlUnescape() XML 转义处理

9. 修复不可用工具 🔴高:

  • china_colors(中国传统色)— 状态从 maintenance 改为 available使用本地 JSON 数据9分类170色
  • nick_gen(网名生成)— 状态从 maintenance 改为 available新增本地 NickGenService 替代 404 远程 API
  • 🆕 NickGenService — 6种风格古风/清新/霸气/可爱/文艺/搞笑),本地算法生成

新增文件:

  • lib/core/utils/safe_init_mixin.dart — Provider 初始化安全 Mixin
  • lib/features/discover/presentation/widgets/tool/tool_navigation_helper.dart — 路由导航工具类
  • lib/features/discover/models/search_type.dart — 搜索类型枚举
  • lib/features/discover/services/nick_gen_service.dart — 本地网名生成服务

删除文件:

  • lib/features/discover/services/music_recognition_service.dart — 听歌识曲服务
  • lib/features/discover/presentation/pages/tool/music_recognition_page.dart — 听歌识曲页面

修改文件(核心):

  • lib/core/storage/database/app_database.dart — 80+ 方法统一异常保护
  • lib/features/discover/models/tool_item.dart — SearchType枚举化 + 删除音乐识别 + 修复工具状态
  • lib/features/discover/presentation/pages/tool_detail_page.dart — 使用 ToolNavigationHelper
  • lib/features/discover/presentation/widgets/tool/tool_panel_navigator.dart — 使用 ToolNavigationHelper
  • lib/features/discover/services/exchange_rate_service.dart — Hive 离线缓存
  • lib/features/discover/services/rss_service.dart — OPML 导入导出
  • lib/features/discover/presentation/pages/tool/calc_tool_page.dart — nick_gen 使用本地服务
  • lib/main.dart — 启动初始化 RssService + ExchangeRateService
  • lib/core/router/tool_routes.dart — 删除音乐识别路由
  • lib/core/router/app_routes.dart — 删除 musicRecognition 常量
  • lib/features/home/presentation/home_tool_center.dart — 删除音乐识别图标映射

修改文件15个 Provider 应用 SafeNotifierInit

  • chat_provider / chat_session_provider / chat_conversation_provider / chat_attachment_provider
  • content_discover_provider / search_provider / auth_provider / home_provider
  • progress_provider / leisure_timeline_provider / font_management_notifier
  • cloud_cache_provider / device_discovery_provider / live_activity_provider / transfer_notifier

[v6.6.172] - 2026-05-31

🎨 创作卡片Sheet功能完善 — 11项空壳功能全部实现

数据对接(真实数据替换硬编码占位):

  • 📍 地点 — 集成 IpLocationService 获取真实城市,替换 '📍 未知'
  • 👤 用户名 — 集成 authProvider 获取 UserModel.displayName,替换 '👤 匿名'
  • 🌤️ 天气 — 集成 WeatherInfoService 获取天气数据,底部信息栏新增天气行
  • 🔤 拼音 — 使用 PinyinHelper 生成真实拼音注音,替换硬编码 'pīn yīn'
  • 📱 二维码 — 使用 qr_flutter 生成真实二维码,替换占位文字 'QR'

交互功能对接(开关生效):

  • 📳 震动 — 对接 HapticService,开关/按钮操作触发触觉反馈
  • 🔆 常亮 — 对接 ScreenWakeService,开启时保持屏幕常亮,关闭时恢复
  • 🔊 声音 — 对接 SfxService,切换/选择操作播放交互音效
  • 🔊 朗读 — 对接 TtsService,开启时朗读卡片文字,关闭时停止
  • ⏯️ 自动播放 — 实现 AnimationController 打字机动画效果

设置联动:

  • 🔗 初始化时读取 soundSettingsProvider 同步震动/音效开关
  • 🔗 初始化时读取 displaySettingsProvider 同步常亮开关
  • 🔗 Sheet关闭时自动恢复屏幕常亮状态、停止TTS朗读

修改文件:

  • lib/features/home/providers/quick_card_provider.dart — 新增 showWeather/locationText/usernameText/weatherText/autoPlayProgress 字段
  • lib/features/home/presentation/widgets/quick_card_preview.dart — 集成真实拼音/地点/用户名/天气/二维码/自动播放动画
  • lib/features/home/presentation/widgets/quick_card_sheet.dart — 集成 HapticService/ScreenWakeService/SfxService/TtsService/IpLocationService/authProvider/weatherInfoProvider/设置联动

[v6.6.171] - 2026-05-30

🔧 综合审计修复 + 新功能集成

架构优化任务1+5

  • ♻️ tool_detail_page.dart — 删除 _getHanziConfig + _getListExtra 两个冗余方法(~200行_navigateToTool 完全由 navConfig 数据驱动,与 tool_panel_navigator.dart 逻辑统一
  • 新增 _navigateByRoute 兜底方法 + try/catch + AppToast 用户提示

全局异常处理任务2

  • 🛡️ profile_page.dart_refreshUserData() 添加 try/catch
  • 🛡️ favorite_page.dart_loadLocalStats() + _refresh() 添加 try/catch
  • 🛡️ app_lock_settings_page.dart_loadState() 添加 try/catch + _isLoading = false
  • 🛡️ hot_search_page.dart_loadData() 添加 try/catch

API降级+工具状态管理任务3+4

  • 🔧 tool_api_service.darthanziSearch/searchAll/unitConvert 添加 try/catch + _handleHtmlResponse 降级
  • 🏷️ tool_item.dartchina_colors/nick_gen/danci 标记为 ToolStatus.maintenance

新功能任务6-10

  • 🎵 听歌识曲 — 集成 audd.io API支持录音识别/哼唱识别/歌词搜索三种模式
  • 💱 汇率换算 — 集成 exchangerate-api.com支持150+货币实时换算
  • 📡 RSS订阅 — 集成 webfeed支持RSS2.0/Atom格式6个默认源+自定义添加
  • 🍅 番茄钟增强 — flutter_local_notifications 完成通知 + getTodayReport() 统计报告
  • 📊 阅读统计扩展 — 新增30天趋势/阅读时段环形图/Top5类型排行

迁移任务12

  • 倒计时从发现页迁移到工具中心管理分类

接口验证任务11

  • 📝 test_tool_api.py — 新增汇率/音乐识别/RSS源可达性验证全部通过

修改文件:

  • lib/features/discover/presentation/pages/tool_detail_page.dart — 路由映射统一
  • lib/features/discover/services/tool_api_service.dart — API降级处理
  • lib/features/discover/models/tool_item.dart — 工具状态+新入口
  • lib/features/discover/services/music_recognition_service.dart — 新增
  • lib/features/discover/presentation/pages/tool/music_recognition_page.dart — 新增
  • lib/features/discover/services/rss_service.dart — 新增
  • lib/features/discover/presentation/pages/tool/rss_reader_page.dart — 新增
  • lib/features/pomodoro/providers/pomodoro_provider.dart — 通知增强
  • lib/features/discover/presentation/pages/readlater_stats_page.dart — 图表扩展
  • lib/features/discover/presentation/pages/home/discover_page.dart — RSS入口跳转
  • lib/features/discover/providers/chat_session_provider.dart — 移除倒计时会话
  • lib/features/mine/profile/presentation/profile_page.dart — 异常保护
  • lib/features/home/presentation/favorite_page.dart — 异常保护
  • lib/features/mine/settings/presentation/lock/app_lock_settings_page.dart — 异常保护
  • lib/core/router/tool_routes.dart — 新路由
  • lib/features/home/presentation/home_tool_center.dart — 图标映射
  • Scripts/test_tool_api.py — 验证脚本更新

[v6.6.170] - 2026-05-30

新功能RSS订阅阅读器 — 完整实现

核心功能:

  • 📡 RSS订阅源管理 — 支持添加/删除/自动发现RSS/Atom订阅源
  • 📂 分类筛选 — 7种分类标签科技/效率/综合/技术社区/设计/财经/新闻),水平滚动筛选条
  • 📰 文章列表 — 卡片式布局,标题+摘要+来源标签+作者+时间+缩略图
  • 📖 文章详情 — 毛玻璃容器+元信息行+浏览器打开按钮
  • 已读标记 — 点击文章自动标记已读Hive持久化存储
  • 🔄 下拉刷新 — Material风格RefreshIndicator
  • 🗑️ 左滑删除 — Slidable组件确认弹窗防误删
  • 添加订阅弹窗 — URL输入+自动发现+推荐源快捷添加
  • 🏷️ 分类标签 — 订阅源卡片显示分类标签,自动猜测分类

RSS服务增强 (rss_service.dart)

  • 新增 RssCategory 枚举 — 7种分类
  • 新增 RssSubscription — 支持category/addedAt/iconUrl/序列化
  • 新增 RssFeedItem — 支持content/sourceId/sourceTitle/isRead/uid
  • 新增 RssService.discoverFeed() — URL自动发现RSS源
  • 新增 RssService.fetchAllFeeds() — 批量拉取所有源
  • 新增 Hive持久化 — addSubscription/removeSubscription/getSavedSubscriptions
  • 新增已读标记 — markArticleRead/isArticleRead
  • 新增URL标准化和分类自动猜测
  • 默认源增至6个 — 36氪/爱范儿/少数派/知乎日报/阮一峰/V2EX

修改文件:

  • lib/features/discover/services/rss_service.dart — 全面增强RSS服务
  • lib/features/discover/presentation/pages/tool/rss_reader_page.dart — 完整重写RSS阅读器页面
  • lib/features/discover/models/tool_item.dart — 发现分类新增RSS订阅工具入口
  • lib/features/discover/presentation/pages/home/discover_page.dart — RSS入口从"即将推出"改为跳转RSS阅读器

工具配置:

  • id: rss_reader | emoji: 📡 | 分类: 发现 | 类型: 联网 | 推荐:

[v6.6.169] - 2026-05-30

🔧 补全:最近打开面板图标映射 — 汇率换算/听歌识曲/RSS

缺失修复:

  • 💱 汇率换算图标映射home_tool_center.dart ToolCenterIconMap 新增 AppRoutes.exchangeRate💱 汇率换算
  • 🎵 听歌识曲图标映射home_tool_center.dart ToolCenterIconMap 新增 AppRoutes.musicRecognition🎵 听歌识曲
  • 📡 RSS订阅图标映射home_tool_center.dart ToolCenterIconMap 新增 AppRoutes.rssReader📡 RSS

修改文件:

  • lib/features/home/presentation/home_tool_center.dart — ToolCenterIconMap._map 新增3条路由图标映射

[v6.6.168] - 2026-05-30

🎵 新功能:听歌识曲 — 集成audd.io API音乐识别

新增文件:

  • 🆕 lib/features/discover/services/music_recognition_service.dart — 音乐识别服务集成audd.io API
  • 🆕 lib/features/discover/presentation/pages/tool/music_recognition_page.dart — 听歌识曲页面

修改文件:

  • lib/core/router/app_routes.dart — 新增 musicRecognition 路由常量
  • lib/core/router/tool_routes.dart — 新增音乐识别页GoRoute定义
  • lib/features/discover/models/tool_item.dart — 趣味分类新增「听歌识曲」工具入口

🏷️ 软件特性功能 (v6.6.163及更早版本已完成的特性)

  • 🏠 主页 — 每日拾句/句子广场/下拉刷新动画/精灵角色互动/摇一摇换句
  • 🔍 发现 — 会话流AI聊天/稍后读/闲情逸致/灵感/日签卡片/壁纸模板/进度追踪/工具中心
  • 👤 我的 — 个人中心/收藏/历史/设备管理/内容纠错/文件传输
  • ⚙️ 设置 — 主题个性化/通用设置/权限管理/插件系统/实验性功能
  • 🎨 设计系统 — 动态主题(亮/暗/AMOLED)/动态圆角/GlassContainer毛玻璃/统一设计令牌
  • 🔒 隐私合规 — 协议同意后初始化权限/AndroidManifest自启动防护/外部跳转确认弹窗
  • 📱 平台适配 — Android/iOS/鸿蒙/响应式布局/NFC文件传输

已归档版本 v6.6.167(汇率换算) / v6.6.166(异步方法异常保护) / v6.6.165(API降级+工具状态标记) / v6.6.164(倒计时迁移) / v6.6.163(工具中心修复+搜索映射) / v6.6.162(阅读历史loading修复) / v6.6.161(引导页多语言+ko/de/it) / v6.6.160(API降级+工具状态标记) / v6.6.159(倒计时迁移工具中心) / v6.6.158(工具中心修复+搜索映射) / v6.6.157(阅读历史异常保护) / v6.6.156(异步方法异常保护) / v6.6.155(API降级处理+维护标记) / v6.6.154(倒计时迁移) / v6.6.153(工具中心修复) / v6.6.152(阅读历史loading) / v6.6.151(引导页多语言) / v6.6.150(异常保护) / v6.6.149(番茄钟+统计+RSS) / v6.6.148(汇率换算) / v6.6.147(听歌识曲) / v6.6.146(番茄钟通知+统计+RSS) / v6.6.145(综合审计修复) / v6.6.144(RSS订阅阅读器) / v6.6.143(图标映射补全) / v6.6.142(番茄钟+统计+RSS) / v6.6.141(异常保护) / v6.6.140(API降级+工具状态) / v6.6.139(倒计时迁移) / v6.6.138(工具中心修复) / v6.6.137(阅读历史修复) / v6.6.136(引导页多语言) / v6.6.135(灵感暗色渐变) / v6.6.133(预测返回锁定+协议权限修复) / v6.6.132(隐私政策V6.6) / v6.5.131(FeatureFlag远程配置) / v6.5.130(稍后读句子修复) / v6.5.129(图片缓存管理) / v6.5.128(收藏不显示修复) / v6.5.127(纠错布局修复) / v6.5.126(闲情逸致热力图) / v6.5.125(外部跳转确认) / v6.5.124(稍后读图片修复) / v6.5.123(工具面板架构重构) / v6.5.122(导航配置数据驱动) / v6.5.121(引导页多语言) / v6.5.120(实验功能页面) / v6.5.45-v6.5.119(多项功能迭代) / 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