Files
xianyan/CHANGELOG.md
Developer f9c19463f9 chore: 批量更新v6.5.21版本,整合多项功能修复与优化
主要变更:
1. 新增多风格音效资源与管理文档
2. 修复翻译服务空响应处理与Dio日志异常捕获
3. 完善Web端平台适配与路径获取Stub
4. 优化设备配对与文件传输功能
5. 新增角色命名常量与摇一摇检测器
6. 修复Riverpod dispose与鸿蒙导航路由
7. 新增每日通知服务与流体着色器
8. 优化备份服务与数据管理页面
9. 新增隐私设置附近设备发现选项
10. 重构诗词提供者支持历史记录
11. 完善桌面端构建配置与开发脚本
12. 清理旧版工具部署脚本
2026-05-21 00:19:14 +08:00

36 KiB
Raw Blame History

Changelog

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


[v14.56.0] - 2026-05-20

新增 — 文件传输二维码分享功能实现

  • 二维码分享设备_shareDeviceViaQr 方法原先仅显示 Toast "二维码分享功能开发中...",现已完整实现。使用 QrPairingService.generateQrPayload() 生成包含设备 IP、端口、别名、指纹、配对方式的 JSON 载荷,通过 QrImageView 渲染二维码,在 CupertinoAlertDialog 中展示
  • 复制配对信息:弹窗新增"复制配对信息"按钮,将设备名称/IP/端口/指纹以可读格式复制到剪贴板,方便无法扫码时手动配对
  • 二维码有效期提示弹窗内显示二维码有效期5分钟QrPairingService.qrExpiry 保持一致
  • 深色模式适配:二维码背景始终为白色确保可扫描性,前景色根据深色/浅色主题自动切换

[v14.55.0] - 2026-05-20

修复 — 传输设置页面低优先级问题清理

  • 调试模式开关:原先硬编码 value: false, onChanged: (v) {},开关无法切换。现连接 TransferSettings.debugMode provider开启后自动导航到调试面板页面_DebugPanelPage,复用 FileTransferDebugPanel mixin
  • 加密算法选择器:原先只有 AES-256-CBC 一个选项却弹出单选弹窗形同虚设。现改为静态展示Row 布局显示当前算法名),删除 _showEncryptionAlgorithmPicker 方法
  • 信令服务器状态:原先硬编码 wss://tools.wktyl.com:9443状态: 已连接。现从 signalingService.isConnected 动态读取连接状态,显示 🟢 已连接 / 🔴 未连接;服务器地址也从 settings.signalingServerUrl 读取
  • TransferDevice.fromJsonWithDefaults:与 fromJson 几乎完全重复且缺少 isFavorite/userId/ipCity/ipRange/accountAlias 字段。已删除,项目中无其他调用点

[v14.54.1] - 2026-05-20

变更

  • sensors_plus 从远程依赖 ^6.0.0 改为本地鸿蒙适配版本 6.1.0-ohos.1
  • 新增本地包 packages/sensors_plus来源gitcode.com/openharmony-sig/flutter_plus_plugins br_sensors_plus-v6.1.0_ohos 分支)
  • 新增本地包 packages/sensors_plus_ohos(鸿蒙平台传感器实现 v1.0.1
  • 新增本地包 packages/sensors_plus_platform_interface(平台接口 v2.0.0
  • sensors_plus pubspec.yaml 添加 ohos 平台声明 default_package: sensors_plus_ohos
  • pubspec.yaml dependency_overrides 新增 sensors_plus 和 sensors_plus_platform_interface 本地路径覆写

[v14.54.0] - 2026-05-20

修复 — 主页扩展功能审计修复P0/P1/P2

P0 严重修复

  • 互动通知情绪系统链路断裂:HomeInteractionMixintoggleLike/toggleFavorite 未通知 characterMoodProvider,角色情绪永远不会因互动变化。现添加 ref.read(characterMoodProvider.notifier).recordAction() 调用
  • 每日通知调度逻辑缺失:setDailyNotification(true) 仅更新状态值未调用 DailyNotifyService.scheduleDailyNotification(),用户开启提醒后不会收到通知。现接入 DailyNotifyService,设置时间和开关均触发实际调度/取消
  • 音效文件缺失:assets/sounds/sfx/ 目录下无 mp3 文件所有9种音效静默失败。推荐从 Pixabay/Mixkit/JSFXR 下载免费商用音效(详见审计报告)

P1 逻辑修复

  • Tips未关联情绪_generateTimeSlotTip() 仅基于时段,不读取 characterMoodProvider。现根据 mood 调整文案happy→"今天心情不错呢~", bored→"好无聊,来读点什么吧", sleepy→"困了...但还是想陪你"
  • 电池显示硬编码:appbar_date_display.dart 电池项固定显示 🔋85%,现接入 BatteryInfoService.instance.currentLevelisCharging 状态
  • NFC可用性未初始化NfcShareService.instance.isAvailable 默认 false 且从未调用 checkAvailability()NFC分享按钮永远不显示。现于 home_page.dart initState 中调用初始化

P2 体验优化

  • 角色说话动画缺失:CharacterExpression 枚举新增 speaking,嘴巴做开合动画(_expressionController.repeat(reverse:true)TTS 播放时角色同步说话表情,停止后微笑
  • 屏幕常亮阅读模式未实现mode=1阅读时原先与 mode=2始终行为相同。现添加滚动检测滚动停止5秒后启用 wakelock滚动恢复时禁用
  • mounted 字段失效:_mountedfinal bool _mounted = true 永远为 trueif (!mounted) return 永远不触发。现改为可变字段 + markDisposed() 方法,HomeNotifier._onDispose 中调用

[v14.53.3] - 2026-05-20

修复

  • 文件传输发现设备Tab双数据源问题buildDevicesTab 中设备列表来自 deviceDiscoveryProvider.discoveredDevices,但配对状态检查使用 transferProvider.isPairedWith/isPairing/peerStatuses,两个 Provider 各自维护设备列表可能不同步。现以 transferProvider.discoveredDevices 为主数据源,合并 discoveryProvider 中独有设备,确保设备列表展示与配对状态检查来自同一数据源

修复

  • 消息重复插入风险:_localSendMessageSub_nearbyMessageSub 两个监听器可能收到同一条消息并重复插入 state.messages,现新增 _addMessageDedup 方法基于 messageId 去重,重复消息跳过插入并记录警告日志
  • 收藏功能未实现:_setDeviceFavorite 原先仅更新 PeerStatus.connectionStatepaired,并未真正切换 isFavorite 字段。现新增 TransferNotifier.toggleDeviceFavorite 方法,正确切换设备 isFavorite 状态,同步更新内存(discoveredDevices/myDevices和数据库Toast 提示与实际行为一致
  • 数据库层补全:TransferDatabase._rowToDevice 缺少 isFavorite 字段读取,insertDevice 缺少 isFavorite 写入,updateDevice 缺少 isFavorite 参数,均已补全

[v14.53.2] - 2026-05-20

修复

  • 传输设置页"传输记录"交互逻辑错误:点击后误调用 _clearTransferRecords()清除记录改为导航到文件传输页面的记录TabFileTransferPage(initialTab: 2)),长按保留清除记录功能
  • _buildNavigationTile 新增 onLongPress 可选参数支持长按交互
  • FileTransferPage 新增 initialTab 参数支持从外部直接跳转到指定Tab

[v14.53.1] - 2026-05-20

修复

  • 文件传输设备操作:_sendFileToMyDevice 方法原先传入空路径 filePath: '',现改为先调用 FilePicker.platform.pickFiles() 让用户选择文件,用户取消或路径无效则不执行发送
  • 传输聊天页面:prevMsgs.firstWhere((m) => m.id == msg.id)orElse,列表中找不到匹配项时会抛出 StateError,现改用 firstWhereOrNull 并添加 null 检查

[v14.53.0] - 2026-05-20

新增

  • 拾光角色桌面小组件dailyWithCharacter
    • WidgetType 枚举新增 dailyWithCharacter,标题"拾光每日一句",副标题"拾光角色+每日推荐句子"
    • 平台标识Android=DailyWithCharacterProvideriOS=DailyWithCharacterWidget,鸿蒙=dailyWithCharacter
    • 优先级 P1推荐小部件图标 CupertinoIcons.sparklesdeepLink 跳转首页
    • HomeWidgetService 新增4个数据键content/author/id/mood新增 updateDailyWithCharacter() 方法
    • HomeWidgetService 后台回调新增 open_daily_with_character 处理
    • HomeWidgetService.debugGetAllData() 新增拾光角色小组件数据读取
    • HomeFeedMixin 新增 _syncDailyWithCharacterWidget() 辅助方法
    • 每日推荐句子加载成功后fetchDailySentence/refreshDailySentences/fetchDailySentenceFallback自动同步推送到拾光角色小组件
    • 推送时读取角色情绪值character_mood_value转换为 mood 字符串

[v14.52.0] - 2026-05-20

新增

  • F12: 屏幕常亮设置:
    • DisplaySettingsState 新增 screenAlwaysOn 字段0=关闭, 1=阅读时, 2=始终默认0持久化到 KvStorage
    • GeneralSettingsNotifier 新增 setScreenAlwaysOn 方法 + screenAlwaysOn 便捷 getter
    • 通用设置页"显示设置"分组新增"💡 屏幕常亮"选择器CupertinoPicker 三档选择)
    • HomePage 监听 screenAlwaysOn 设置变化,通过 wakelock_plus 控制屏幕常亮
    • HomePage dispose 时自动关闭 wakelock
  • F13: 电池低提醒:
    • 新增 lib/core/services/device/battery_info_service.dart:电池状态监听服务
      • 基于 battery_plus 监听电池状态变化 + 5分钟轮询电量
      • 提供 onBatteryChanged Stream 广播 BatteryInfo(含 isLow/isCritical 判断)
    • CharacterExpression 枚举新增 worried 担忧表情:
      • 眉头皱起(两条短弧线下弯)
      • 嘴巴微张(椭圆)
      • 眼睛略缩0.9倍)
      • 2秒后自动恢复
    • CharacterTipsNotifier 新增 showTip(category, content) 方法,支持外部触发气泡提示
    • HomePage initState 中初始化 BatteryInfoService 并监听低电量事件
    • 低电量时角色显示 worried 表情 + 弹出拾光Tips气泡提醒充电

[v14.51.0] - 2026-05-20

新增

  • 字体对比模式左右分屏对比两种字体的渲染效果FontComparisonPage
    • 支持字号滑块调节12-48px
    • 支持自定义预览文本输入
    • 中英文+数字多维度对比预览
  • FontActiveCard 增加"对比"按钮,点击后弹出字体选择器选择第二个字体
  • FontLocalSection 增加左滑"对比"操作,选择对比目标字体后跳转对比页面
  • 字体切换音效setActiveFont 成功后播放 font_switch.mp3 音效(静默失败,不影响功能)

[v14.50.0] - 2026-05-20

新增

  • 在线字体数据动态化SupabaseFontSyncService 从远程获取字体列表,离线 fallback 到本地硬编码数据
  • Google Fonts 集成:在线字体区增加 Google Fonts 入口,支持输入字体名加载 1500+ 在线字体
  • FontInfo 模型增加 category字体分类和 iconEmoji图标emoji字段
  • 在线字体项改用 font.iconEmoji 替代 onlineFontData[index] 索引访问,避免 Supabase 数据越界

修复

  • 在线字体列表 Supabase 远程数据与本地 fallback 兼容处理
  • FontOnlineItemWidget emoji 显示不再依赖硬编码索引,支持动态数据源

[v14.50.0] - 2026-05-20

新增

  • F15: 本地通知提醒:
    • 新增 lib/core/services/notification/daily_notify_service.dart:每日定时通知服务
      • 单例模式,委托 LocalNotificationService 调度通知,避免重复初始化
      • scheduleDailyNotification(hour, minute, title, body) 调度每日通知
      • cancelAll() 取消所有通知
    • GeneralFieldsState 新增 dailyNotification(默认false) / notifyTimeHour(默认8) / notifyTimeMinute(默认0) 字段,持久化到 KvStorage
    • GeneralSettingsNotifier 新增 setDailyNotification / setNotifyTimeHour / setNotifyTimeMinute 方法
    • 通用设置页"通知设置"分组新增"🔔 每日提醒"开关 + " 提醒时间"选择器
    • 开关开启时调度每日通知(标题"拾光为你选了一句"),关闭时取消
    • 提醒时间选择器支持9个时段06:00/07:00/08:00/09:00/10:00/12:00/18:00/20:00/22:00
  • F17: Shader特效
    • 新增 assets/shaders/fluid.fragFragment Shader流体渐变效果
      • 三层噪声叠加产生流体动画
      • 触摸涟漪交互u_touch uniform
      • 蓝/紫/青三色混合0.6透明度
    • 新增 lib/shared/widgets/shader_card_background.dartShader卡片背景组件
      • ShaderCardBackground StatefulWidget + Ticker 驱动动画
      • 加载失败降级为 LinearGradient 静态渐变
      • _ShaderPainter CustomPainter 绑定 FragmentProgram + 5个 uniform
    • GeneralFieldsState 新增 shaderBackground(默认false) 字段,持久化到 KvStorage
    • GeneralSettingsNotifier 新增 setShaderBackground 方法
    • 通用设置页"显示设置"分组新增" 特效背景"开关
    • SentenceCard 根据 shaderBackground 设置切换背景:开启时使用 ShaderCardBackground关闭时使用原有渐变
    • pubspec.yaml 新增 assets/shaders/ 资源目录

[v14.49.0] - 2026-05-20

新增

  • 字体预览大图 Sheet半屏面板+自定义预览文本+字号滑块+中英文预览)
  • 字体卡片滑动删除AppSlidable替代原有删除按钮
  • 字体搜索/筛选(支持拼音首字母匹配+名称/字体族匹配)
  • 滚动定位到在线字体区(点击"在线字体"按钮自动滚动)
  • 下拉刷新字体列表CustomRefreshIndicator
  • 列表项入场动画flutter_animate fadeIn+slideY 瀑布效果)
  • 字体切换 Hero 过渡动画heroine
  • 字体列表骨架屏加载SkeletonBox+ListItemSkeleton
  • 并发下载控制最多3个同时下载
  • 下载重试机制(失败后显示重试按钮)
  • 下载进度圆环CircularProgressIndicator 替代线性进度条)
  • 字体收藏持久化Hive KV存储+收藏置顶显示+滑动收藏操作)
  • 删除后字体残留处理(记录已删除列表,重启时不加载已删除字体)

修复

  • 自定义字体通过 customFontFamily 传递给全局主题系统,确保全局生效
  • 字体序列化改用 JSON兼容旧 | 分隔符格式自动迁移
  • 鸿蒙端字体功能适配(移除 isOhos 限制,统一字体目录获取)

重构

  • 内置字体映射动态化builtInFontConfigs 替代硬编码 idMap
  • _builtInFonts getter 改为基于 builtInFontConfigs 动态生成

[v14.48.0] - 2026-05-20

新增

  • F9: Lottie动画过渡
    • 频道切换时显示 spin.json Lottie加载动画600ms后自动消失
    • _onChannelSwitch 方法:防重入守卫 + setState切换状态 + 延迟重置
    • _swipeToNextCategory/_swipeToPrevCategory 滑动切换也走 _onChannelSwitch
    • 空状态区域使用 star.json Lottie动画替代静态emojierrorBuilder降级显示📭
    • 空状态新增"下拉刷新试试"副标题
  • F11: 摇一摇换句:
    • 新增 lib/core/services/device/shake_detector.dart:摇一摇检测器单例
      • 监听加速度传感器阈值25.0最小间隔1500ms防抖
      • start/stop/dispose 生命周期管理
    • pubspec.yaml 新增 sensors_plus: ^6.0.0 依赖
    • GeneralFieldsState 新增 shakeToSwitch 字段默认false持久化到 KvStorage
    • GeneralSettingsNotifier 新增 setShakeToSwitch 方法
    • 通用设置页"交互设置"分组新增"🤝 摇一摇换句"开关
    • 开关开启时启动 ShakeDetector关闭时停止
    • HomePage initState 中根据设置自动启动摇一摇监听
    • 摇一摇回调:刷新每日推荐 + 角色dizzy晕眩表情 + 摇铃音效
    • HomePage dispose 中停止 ShakeDetector
  • AppBarCharacterSprite 新增 dizzy 晕眩表情:
    • 眼睛绘制为旋转X形螺旋眼使用 expressionProgress 驱动旋转角度
    • 嘴巴绘制为波浪曲线,使用 expressionProgress 驱动波动幅度
    • 耳朵抖动(repeat) + 脸颊微红 + 整体弹跳(repeat)2秒后自动恢复
    • 新增 triggerExpression 公开方法,供外部触发任意表情

[v14.47.0] - 2026-05-20

新增

  • F5: 自定义下拉刷新(拾光角色)
    • 新增 home_refresh_indicator.dart:拾光角色下拉刷新动画组件
    • 使用 custom_refresh_indicator 包实现自定义刷新指示器
    • 角色表情随下拉进度变化idle(好奇) → surprise(惊讶) → pout(紧张) → blink(决心)
    • 刷新中显示 think(思考) 表情 + "刷新中...",完成后 smile(开心) + "刷新完成 ✓"
    • 48x48 角色精灵 + 进度文字,透明度随拖拽值渐变
  • AppBarCharacterSprite 新增 expression 参数:
    • 外部可强制指定角色表情,didUpdateWidget 时自动触发表情切换
    • 新增 think 表情:微眯双眼 + 侧弯嘴巴 + 鼻子微皱 + 脸颊微红
    • _getBlinkFactor 新增 thinkBlink(0.3 * expressionProgress) 实现思考时微眯眼
  • HomePage 句子列表外层包裹 HomeRefreshIndicator支持下拉刷新

新增

  • F8: 3D倾斜卡片
    • home_daily_card.dart 每日推荐卡片外层包裹 Tilt.base() 组件
    • 使用 flutter_tilt 包实现 3D 倾斜交互效果
    • TiltConfig: angle=8, enableReverse=true, moveDuration=200ms
    • LightConfig: maxIntensity=0.06 微光效果
    • ShadowBaseConfig: 黑色阴影, maxIntensity=0.15, offsetInitial=(0,8)

[v14.46.0] - 2026-05-20

新增

  • 字体预览大图 Sheet 组件FontPreviewSheet
    • 新增 lib/features/settings/presentation/font/font_preview_sheet.dart
    • 半屏面板展示字体大图预览支持拖拽到不同高度40%/70%/100%
    • 自定义预览文本输入框:用户可输入任意文本实时预览
    • 字号滑块12-48sp 可调,实时更新预览
    • 预览区域:自定义文本 + 中文经典(天地玄黄) + 英文(quick brown fox) + 数字符号
    • 字体信息展示:字体族、文件大小、类型(内置/自定义)
    • 使用 AppBottomSheet.showHalf 弹出iOS 26 液态玻璃风格

变更

  • FontItemWidget单击改为弹出字体预览Sheet长按激活字体
  • FontOnlineItemWidgetinfo图标改为预览图标(CupertinoIcons.textformat_size)点击弹出预览Sheet
  • 移除 FontOnlineItemWidget 中已废弃的 _showFontDetail 方法和 _detailRow 辅助方法
  • 移除 font_widgets.dart 中不再使用的 services.dart 导入

[v14.45.0] - 2026-05-20

新增

  • TTS语音朗读公共类TtsService
    • 新增 lib/core/services/audio/tts_service.dart统一TTS语音朗读管理单例模式
    • TtsState枚举idle/speaking/paused/loading 四种状态
    • 跨平台兼容iOS端配置setSharedInstance + IosAudioCategoryAndroid/其他平台自动适配
    • 语音参数持久化speed/pitch/volume 通过 AppKVStore(Hive) 存储
    • 状态流onStateChanged (Stream) + onProgress (Stream<(start, end, word)>)
    • 核心方法speak/stop/pause/setSpeed/setPitch/setVolume/getAvailableVoices
  • TTS朗读播放条组件TtsPlayerBar
    • 新增 lib/shared/widgets/tts_player_bar.dart句子详情Sheet中的朗读控制条
    • 播放/暂停按钮(圆形主题色按钮 + CupertinoIcons
    • 进度条LinearProgressIndicator + 主题色)
    • 状态文字:正在朗读.../已暂停/点击播放
    • 停止按钮(播放中或暂停时显示)
  • 首页角色点击朗读:
    • 单击角色生成Tip + 如果TTS可用且当前有每日推荐朗读每日推荐句子
    • 双击角色生成Tip + 如果正在朗读则停止
  • 句子详情Sheet朗读功能
    • 二级操作栏新增"🔊 朗读"按钮TTS可用时显示
    • 点击朗读按钮显示TtsPlayerBar + 开始朗读句子
    • TtsPlayerBar 位于Sheet底部危险操作栏下方

[v14.44.0] - 2026-05-20

新增

  • 主页工具中心面板HomeToolCenter
    • 新增 home_tool_center.dart下拉快捷工具面板2行3列网格布局
    • 6个快捷入口📷扫一扫、📡传输助手、🔊朗读模式、🌙深色模式、🤝摇一摇、⚙️更多设置
    • 深色模式切换实际调用 themeSettingsProvider.setThemeMode(),可即时切换日/夜模式
    • 传输助手/更多设置点击后关闭Sheet并跳转对应路由页面
    • 扫一扫/朗读模式/摇一摇为预留入口,点击提示"开发中"
  • 句子广场Header新增工具中心入口按钮CupertinoIcons.grid 图标)
  • SquareHeaderContent 新增 onToolCenter 回调参数
  • HomePage 新增 _showToolCenter() 方法,通过 AppBottomSheet.showCustom 弹出工具中心面板

[v14.43.0] - 2026-05-20

新增

  • 角色拾光情绪系统CharacterMood
    • 新增 character_mood_provider.dart:管理角色情绪状态、经验值、等级
    • 6种情绪枚举happy/neutral/bored/sleepy/excited/worried各有 emoji 和能量值
    • CharacterMoodState 数据类:含 moodValue(0.0~1.0)、exp、level、levelProgress
    • CharacterMoodNotifierrecordAction 记录交互like/favorite/read/share/create/daily_checkindecayMood 情绪衰减_checkTimeBasedMood 夜间自动困倦
    • 数据持久化到 AppKVStore (Hive)
  • AppBarCharacterSprite 支持 mood 参数:
    • idle 状态下根据 mood 调整嘴巴曲线happy微笑/excited大笑/bored微撇/worried皱嘴/sleepy微张
    • idle 状态下根据 mood 调整眼睛开合度excited大眼/bored半闭/sleepy闭眼
    • sleepy 情绪自动增加眨眼因子
    • shouldRepaint 新增 mood 比较
  • HomePage 传递 mood 到角色精灵:ref.watch(characterMoodProvider.select((s) => s.mood))
  • DateConfigSheet 角色介绍卡片增强:
    • 角色名右侧新增 "Lv.X" 等级标签(主题色背景)
    • 介绍文案下方新增经验进度条 + EXP 数值显示

[v14.42.0] - 2026-05-20

重构

  • 字体管理页面从单文件(1663行)拆分为4个文件
    • font_models.dart(~120行): FontInfo/FontManagementState/在线字体数据/工具函数
    • font_management_notifier.dart(~480行): FontManagementNotifier 业务逻辑
    • font_widgets.dart(~700行): 所有 UI 组件(私有改公开)
    • font_management_page.dart(~65行): 主页面入口

修复

  • 增强字体管理页面动态主题响应:
    • 主页面增加 ref.watch(themeSettingsProvider) 双保险监听主题变化
    • 所有子组件从 AppTheme.ext(context) 获取主题(而非构造函数参数传入)
    • 弹窗内部使用 AppTheme.ext(ctx) 获取新 context 的主题
    • 替换硬编码 CupertinoColors.systemGreenext.successColor,深色/AMOLED 模式下颜色一致
    • CupertinoTextField 增加 placeholderStyle/style 跟随主题色

[v14.41.0] - 2026-05-20

修复

  • 修复 DateConfigSheet 自定义文案输入框被输入法遮挡:
    • 根因Sheet 底部 SizedBox 仅考虑 viewPadding.bottom,未处理 viewInsets.bottom(键盘高度)
    • 在底部 SizedBox 中加入 MediaQuery.of(context).viewInsets.bottom,键盘弹出时自动推高内容
    • 添加 keyboard_safe_sheet.dart 导入,为后续更细粒度键盘适配预留
  • 加强 AppBarCharacterSprite 角色头部阴影效果:
    • _paintShadow 模糊半径从 2 增大到 4.5,阴影更柔和扩散
    • _paintShadow alpha 从 0.12 增加到 0.25,阴影更深更明显
    • 新增 _paintGroundShadow 底部投影椭圆,模拟地面投影效果,增强角色立体感

[v14.40.0] - 2026-05-20

修复

  • 修复 analysis_options.yamlinclude: package:riverpod_lint/analysis_options.yaml 无效问题:
    • 根因:riverpod_lint 3.x 不再提供供外部 include 的 analysis_options.yaml,该文件仅用于包内部开发
    • 3.x 版本的 lint 规则完全通过 custom_lint 插件机制提供(已在 plugins 中配置)
    • 移除无效 include 指令,添加说明注释
  • 修复 Dart 分析器 AOT 编译失败Windows 中文用户名路径问题):
    • 根因Dart AOT 编译器无法处理路径中的非 ASCII 字符(C:\Users\无书\...
    • 新增 scripts/analyze.ps1:设置 LOCALAPPDATA 到非中文路径后运行分析
    • 新增 scripts/fix_dart_aot_path.ps1:永久修复脚本(创建目录联接)

[v14.39.0] - 2026-05-20

修复

  • 修复 Web 端 MissingPluginException: No implementation found for method getApplicationDocumentsDirectory
    • 根因:path_providergetApplicationDocumentsDirectory() 在 Web 端无原生实现,直接调用会抛出 MissingPluginException
    • 新增 platform_utils.dart 安全路径获取方法 safeAppDirPath / safeTempDirPathWeb 端返回 null
    • 新增 path_provider_stub.dartWeb 端空实现)和 path_provider_native.dart(原生端实现,含 try-catch
    • font_management_page.dart5 个方法增加 pu.isWeb 守卫(扫描/下载/导入/URL下载/删除)
    • cache_service.dart7 处 getApplicationDocumentsDirectory() 替换为 _safeAppDirPath()
    • backup_service.dartbackupDirPath 改用 pu.safeAppDirPathWeb 端抛出 UnsupportedError
    • data_management_page.dart_exportFullData 改用 pu.safeAppDirPathWeb 端提示不支持
  • 修复 Catcher2: Zone mismatch 警告:
    • 根因:WidgetsFlutterBinding.ensureInitialized()runZonedGuarded 外部调用,而 runApp 在内部调用Zone 不一致
    • main.dart:将 ensureInitialized() 移入 runZonedGuarded 内部,确保 bindings 初始化和 runApp 在同一 Zone
  • 修复 SharingReceiverService 在 Web 端未守卫的问题:
    • main.dartSharingReceiverService.init() 增加 !pu.isWeb 守卫

[v14.38.0] - 2026-05-20

新增

  • 首页 AppBar 集成角色动画和日期栏:
    • home_page.dartAppBar 从 🏠 闲言 + 日期文本 替换为 角色精灵 + 闲言/拾光标题 + 日期栏 + 搜索按钮 三段式布局
    • 左侧:AppBarCharacterSprite 角色精灵,跟随 themeSettingsProvider.tabCharacterStyleId 切换造型
    • 标题区:主标题"闲言"(title1) + 副标题"拾光"(caption2 主题色),点击触发角色 lookAtTitle() 动画
    • 中间:AppBarDateDisplay 日期栏,点击弹出 DateConfigSheet 配置弹窗
    • 右侧保留搜索按钮BounceButton + Heroine
  • 角色命名体系"拾光"
    • lib/core/constants/character_name.dart:角色名常量 — givenName="拾光", fullName="闲言拾光", renameHint="暂不支持改名"
    • DateConfigSheet 顶部新增角色介绍卡片56x56角色精灵 + 名字 + 全称 + 介绍文案 + "暂不支持改名"标签
    • AppBar 标题副标题显示"拾光"(主题色)

[v14.37.0] - 2026-05-20

新增

  • AppBar 角色动画系统方案A — 增强 CustomPainter
    • 设计文档: docs/superpowers/specs/2026-05-20-appbar-character-animation-design.md
    • 归档文档: docs/superpowers/specs/2026-05-20-appbar-character-animation-archive.md
    • 新增 lib/shared/widgets/appbar_character_sprite.dartAppBar角色动画精灵组件
    • 替换 AppBar 左侧 🏠 闲言 为互动角色 + 标题,角色跟随 Tab 栏造型设置
    • 4种角色猫/狗/男孩/女孩)× 7种部件动画耳/鼻/脸/眼/嘴/须/整体)
    • 6种手势交互单击/双击/长按/点击闲言/手指跟随/空闲自动)
    • 动画强度联动 themeSettingsProvider.animationIntensity4档
    • 3D质感渲染径向渐变+投影阴影+双高光+环境光)
  • 日期栏扩展功能:
    • 点击日期弹出配置 Sheet天气/设备/IP/自定义文案/显示项配置)
    • 最多3项显示自定义文案14字限制
    • 超过10字自动轮播可开关
  • 公共类提取:
    • WeatherInfoService 提取到 core/services/weather/
    • IpLocationService 合并到 core/services/network/
    • 新增 WeatherBriefInfo 轻量数据模型(core/services/weather/weather_info_models.dart),含 empty()fromWeatherData() 工厂方法
    • 新增 WeatherInfoService 公共查询服务(core/services/weather/weather_info_service.dart含30分钟内存缓存、mapWeatherIcon()mapAqiLevel() 公共方法
    • 新增 WeatherInfoNotifier + weatherInfoProvidercore/services/weather/weather_info_provider.dartRiverpod 状态管理,供首页/日期栏等轻量场景消费

[v14.36.0] - 2026-05-20

修复

  • 修复鸿蒙端本地IP显示字节序反转的问题
    • 根因:鸿蒙端 network_info_plusgetWifiIP() 返回网络字节序big-endianIP未正确转换为宿主字节序导致安卓端显示 1.2.3.4 而鸿蒙端显示 4.3.2.1
    • localsend_service.dartgetLocalIp() 新增 _fixReversedIp() 方法检测反转IP反转后属于私有IP范围而原始不属于自动修正
    • localsend_service.dartgetLocalIp() 新增 NetworkInterface.list() 备选方案,当 getWifiIP() 失败时遍历网络接口获取IPv4地址
  • 修复鸿蒙端无法打开多语言设置界面的问题:
    • 根因:AppRoutes 缺少 languageSettings 常量,ohos_nav_bridge.dart 无语言设置页路由映射,鸿蒙端 OhosNavBridge.push() 找不到匹配页面
    • app_router.dartAppRoutes 新增 languageSettings = '/settings/language' 常量GoRoute 路由定义改用常量引用
    • ohos_nav_bridge.dart_routeMap 新增 AppRoutes.languageSettingsLanguageSettingsPage 映射
    • general_settings_page.dart:语言导航从硬编码 '/settings/language' 改为 AppRoutes.languageSettings
    • profile_page.dart:语言导航从硬编码 '/settings/language' 改为 AppRoutes.languageSettings
  • 修复从发现页扫描/配对码进入聊天页面看不到消息的问题:
    • 根因:_collectPeerIdsstate.discoveredDevices/myDevices/pairedDevices 收集 peerIds但扫描发现或配对码创建的 TransferDevice 未注册到这些列表中,导致消息过滤时 sessionIds 不包含对方设备ID消息不显示
    • transfer_notifier.dart:新增 ensureDeviceKnown(TransferDevice device) 方法,将设备添加到 discoveredDevices(如果不存在于任何设备列表中)
    • transfer_chat_page.dartinitStateaddPostFrameCallback 中在 setCurrentSession 之前调用 ensureDeviceKnown(widget.peerDevice),确保设备在状态中可被查找

[v14.35.0] - 2026-05-20

修复

  • 修复屏幕共享页面观看端找不到结束按钮的问题:
    • 根因1观看端isViewing没有底部控制栏只有热区图例无法直观结束观看
    • 根因2导航栏"结束"按钮点击区域过小padding仅sm+xs在紧凑空间中难以点击
    • screen_share_page.dart:新增 _buildViewingControls() 方法,为观看端提供醒目的红色"结束观看"按钮CupertinoButton全宽样式
    • screen_share_page.dart_buildActiveView() 中为观看端添加底部控制栏
    • screen_share_page.dart:导航栏"结束"按钮增加 behavior: HitTestBehavior.opaqueConstrainedBox(minWidth: 44, minHeight: 44) 最小点击区域padding从sm+xs增大到md+sm

新增

  • 信令服务器综合测试脚本 docs/toolsapi/scripts/test_signaling_comprehensive.js
    • 11个测试模块Health Check / Registration & Discovery / Pairing Code / Text Message & File Meta / Screen Share / Canvas / Direct Pairing / Radar / WsRelay / Heartbeat / DeviceModel
    • 54+测试断言覆盖所有信令协议
    • 使用 sendAndWait / sendAndWaitBoth 解决消息时序竞态问题
  • 本地逻辑测试脚本 Scripts/test_local_logic.js
    • 10个测试模块配对码生成 / 设备名称显示 / 画布样式渲染顺序 / 画布样式模型 / 屏幕共享状态 / 热区碰撞检测 / 帧数据编解码 / 画布笔画模型 / 配对码验证 / 计时器格式化
    • 79个测试断言全部通过
  • Node.js部署脚本 docs/toolsapi/scripts/deploy_signaling.js替代Python上传脚本使用node-ssh上传index.js并重启PM2

[v14.30.0] - 2026-05-20

修复

  • 修复编辑器画布样式(圆角/边框/阴影/叠层/外边距)设置不生效的问题(方案重构):
    • 根因ProImageEditorState没有didUpdateWidget导致wrapBody回调在configs变更后不会更新之前通过wrapBody包裹的_CanvasStyleWrapper方案无法响应样式变化
    • 新增CanvasStyleMiddleware独立组件(canvas_style_middleware.dart在父级直接包裹ProImageEditor通过setState驱动重建确保样式始终跟随_canvasStyle
    • 渲染层级outerMargin → stackLayers → shadow → clipRadius → border → child
    • pro_editor_page.dartbuild方法中用CanvasStyleMiddleware包裹ProImageEditor移除buildConfigs中的canvasStyle参数
    • pro_editor_bridge.dart移除wrapBody回调和_CanvasStyleWrapper类移除canvasStyle参数和dotted_border导入
    • 导出阶段ExportService.applyCanvasStyle()保持不变,编辑时预览+导出后处理双路径生效

[v14.29.0] - 2026-05-20

修复

  • 修复翻译助手页面布局溢出报错及点击卡死问题:
    • 根因1_buildLangChipBar 使用固定 height: 44 但内部 Chip 实际高度超出,导致布局溢出
    • 根因2_buildLangPairBar_buildLangChipBar 各自独立 ref.watch(translateProvider),与 build() 中的 watch 形成重复订阅provider 异步初始化时触发连锁状态更新导致无限重建卡死
    • 根因3CupertinoNavigationBar trailing 区域两个 32x32 按钮 + 8px 间距在小屏设备溢出
    • 根因4_buildInputBar 底部 padding 硬编码 AppSpacing.lg,未适配设备安全区域
    • translate_page.dart_buildLangPairBar / _buildLangChipBar 改为接收 TranslateState 参数,消除重复 ref.watch
    • translate_page.dart_buildLangChipBar 固定高度改为 BoxConstraints(minHeight: 40, maxHeight: 48) + 内部 SizedBox(height: 36) 约束 ListView
    • translate_page.dart_buildLangChip 垂直 padding 从 6 减至 4水平 padding 从 12 减至 10
    • translate_page.dart:导航栏 trailing 按钮从 32x32 缩小至 28x28间距从 sm 减至 xs
    • translate_page.dart_buildInputBar 底部 padding 改为 AppSpacing.sm + MediaQuery.viewPaddingOf(context).bottom 适配安全区域
    • translate_page.dartTextField 替换为 CupertinoTextField,修复 CupertinoPageScaffold 下无 Material 祖先导致崩溃
    • translate_page.dartSelectableText 包裹 Material(color: transparent),修复无 Material 祖先报错

已归档版本

14.25.1(鸿蒙小组件跳转修复) / 14.25.0(鸿蒙端数据库+存储迭代修复) / 14.24.0(诗词设置页面) / 14.23.0(翻译助手) / 14.22.0(画布样式) / 14.20.0(屏幕共享WebRTC) / 14.19.0(画布协作) / 14.18.0(离线队列) / 14.17.0(USB传输) / 14.16.0(云端暂存) / 14.15.0(送达回执) / 14.14.0(断点续传) / 14.13.0(文件分流) / 14.12.0(信令服务器) / 14.11.0(配对码机制) / 14.10.0(雷达扫描) / 14.9.0(屏幕共享信令) / 14.8.0(画布同步) / 14.7.0(全流程E2E) / 14.6.0(翻译服务) / 14.5.0(诗词页面) / 14.4.0(天气诗词) / 14.3.0(编辑器增强) / 14.2.0(画布圆角) / 14.1.0(编辑器样式) / 14.0.0(传输架构重构) / 13.9.0(多语言) / 13.8.0(主题系统) / 13.7.0(设置重构) / 13.6.1(数据库修复) / 13.6.0(存储优化) / 13.4.0(本地化) / 13.3.0(HTTP明文) / 13.2.0(信令协议) / 6.4.1-6.4.5(鸿蒙端数据库+存储迭代修复) / 5.13.0(local_auth_ohos合并) / 5.10.0(SDK升级oh-3.41.9) / 12.4.0(Tab栏个性交互) / 12.3.0(搜索三大问题修复) / 12.2.0(收藏双向同步) / 12.1.1(快捷按钮导航) / 12.1.0(USB OTG传输) / 6.3.2(登录加载闪烁修复) / 6.3.1(TextPainter异常修复) / 6.2.0(协作画布) / 6.2.1(剪贴板同步) / 11.2.0(云端暂存) / 5.33.0(智能推荐+标签云+智能模式) / 5.32.0(离线浏览缓存) / 5.31.0(通知设置) / 5.30.0(二维码登录) / 5.29.0(表单校验+本地通知) / 5.28.0(文件传输助手+我的设备) / 5.27.0(用户中心接口同步) / 5.26.0(文件传输核心架构) / 5.22.0(聊天多媒体+视觉增强) / 4.21.0(聊天会话流) / 5.11.0(通用设置重构) / 5.10.0(关于页面+图标统一) / 3.9.9(画布样式编辑) / 3.9.8(拖拽描边/文本回写/壁纸无限加载) / 3.9.7(画布圆角+导出修复) / 3.9.6(画布圆角/文字按钮卡死) / 3.9.5(Bug回归修复) / 3.9.4(本地化/HTTP明文) / 3.9.3(画布圆角/壁纸卡死) / 3.9.2(画布圆角/文字按钮/壁纸) / 3.9.1(历史卡死/同步丢失) / 3.9.0(编辑器增强) / 3.8.0 / 2.58.0(六大Bug修复) / 2.57.0(开发计划) / 2.56.0(README更新) / 2.55.1(代码质量清理) / 1.55.0(灵感页面重构) / 1.54.0(个人中心+签到Bug) / 1.53.0(分类列表+骨架屏) / 1.52.0(句子卡片不更新) / 1.51.0(句子循环重复) / 1.50.0(频道同步延迟) / 1.49.0(刷新无响应+分类同步) / 1.48.0(句子广场无限循环) / 1.47.0(API类型转换崩溃) / 1.46.0(句子来源页面) / 1.45.0(笔记自动保存) / 1.44.2(笔记Bug修复) / 1.44.1(笔记删除Bug) / 1.44.0(API集成补全) / 1.40.0(用户安全接口) / 1.39.0(卡片震动/分类切换) / 1.31.0(API功能全面接入) / 1.30.0(传统色页面重构) / 1.23.0(偷工减料修复) / 1.22.0(句子广场交互) / 1.21.0(数据管理卡死/Tab抖动) — 更早版本详见 git history