feat: 多模块功能更新 - 文件传输/多语言/NFC/首页组件/进度美化等

- 文件传输: 设备发现、LAN发现服务优化
- NFC分享: provider和service增强
- 多语言: 16种语言翻译补全
- 首页: 句子详情面板、收藏页、离线页优化
- 我的: 成就、个人资料、签到、设置页面更新
- 新增: AR视图、进度美化页、Hive安全访问、鸿蒙兼容助手、共享组件
- iOS Widget: Intents扩展、XianyanWidget更新
- 鸿蒙: 6个卡片页面更新
- 其他: 路由注册、缓存配置、崩溃监控、TTS播放器等
This commit is contained in:
Developer
2026-06-04 04:08:31 +08:00
parent 74b615afc4
commit 67f26ff166
64 changed files with 6122 additions and 408 deletions

View File

@@ -4,6 +4,268 @@
***
## [v6.14.0] - 2026-06-04
### 🎴 日签卡片 AR 3D 展示效果 (Issue #9)
**背景:** 日签卡片页面缺乏沉浸式展示体验,用户希望在 AR 空间中查看悬浮的日签卡片,增强视觉冲击力和分享欲望。
**技术方案:** 采用伪AR效果方案 — 使用 Flutter 的 3D 变换和设备传感器模拟 AR 体验,无需原生 ARKit/ARCore 集成。
**实现内容:**
- ✅ 创建 `daily_card_ar_view.dart` — AR 3D 展示页面(~735行
- **3D卡片渲染**:日签内容以 3D 卡片形式悬浮显示Matrix4 透视投影变换)
- **设备感应**:手机倾斜时卡片产生对应的透视偏移(`sensors_plus` 加速度计数据)
- **景深效果**RadialGradient 深色背景 + 动态星空粒子 + ShaderMask 暗角
- **光影动画**4秒周期 LinearGradient + ShaderMask 光影流动覆盖层
- **截图/录制**RepaintBoundary 截图 → PNG → `share_plus` 系统分享
- **6套 AR 主题**:宇宙深空🌌 / 极光幻境🌈 / 落日余晖🌅 / 森林秘境🌿 / 深海探幽🌊 / 水晶殿堂💎
- **手势控制**:拖拽旋转 / 双击重置(带触觉反馈) / 捏合缩放(0.6x-2.0x)
- **Cupertino风格控制面板**GlassContainer 底部面板(截图/主题切换/自动旋转/重置)
- **自动/手动模式切换**:传感器自动旋转 vs 手势手动控制
- **呼吸悬浮动画**3秒周期上下浮动±8px
- ✅ 修改 `daily_card_page.dart` — 操作栏新增「AR」按钮`CupertinoIcons.viewfinder` 图标),点击跳转 AR 视图并传递当前卡片数据
- ✅ 路由注册:
- `app_routes.dart` — 新增 `dailyCardArView = '/daily-card/ar'` 常量
- `route_registry.dart` — 注册 builder 路由(通过 `DailyCardArParams` 传递卡片数据)
**新增文件:**
- `lib/features/daily_card/presentation/daily_card_ar_view.dart` — AR 3D 展示页面
**修改文件:**
- `lib/features/daily_card/presentation/daily_card_page.dart` — 新增 AR 入口按钮 + `_onArView()` 方法
- `lib/core/router/app_routes.dart` — 新增 dailyCardArView 路由常量
- `lib/core/router/route_registry.dart` — 注册 AR 页面路由
**依赖复用(无需新增):**
- `sensors_plus: ^6.1.0` — 已有,用于加速度计数据采集
- `share_plus: ^13.1.0` — 已有,用于截图分享
- `flutter_tilt: ^4.0.0` — 已有,备选 3D 倾斜交互库
***
## [v6.13.0] - 2026-06-04
### 🔧 鸿蒙原生层修复 + iOS Widget深度定制 (Issue #2, #8)
#### 任务A: 鸿蒙原生层修复 (Issue #2)
**问题A1: 桌面Widget长按图标不显示按钮列表**
- **原因:** 鸿蒙FormPage只使用`.onClick()`处理点击事件,没有实现长按手势或上下文菜单
- **修复内容:**
- ✅ 为所有FormPage添加`.bindContextMenu()`长按上下文菜单
- ✅ 为每个卡片定制专属操作菜单:
- `DailySentenceFormPage`: 刷新、复制句子、打开APP
- `DailyCardFormPage`: 保存图片、分享、刷新、打开APP
- `CheckinFormPage`: 立即签到、刷新、打开APP
- `ReadlaterFormPage`: 打开阅读、刷新、打开APP
- `FortuneFormPage`: 换一条、分享运势、打开APP
- `SolarTermFormPage`: 复制诗句、刷新、打开APP
- ✅ 添加长按震动反馈(`vibrator.vibrate()`
**修改文件:**
- `ohos/entry/src/main/ets/formability/pages/DailySentenceFormPage.ets`
- `ohos/entry/src/main/ets/formability/pages/DailyCardFormPage.ets`
- `ohos/entry/src/main/ets/formability/pages/CheckinFormPage.ets`
- `ohos/entry/src/main/ets/formability/pages/ReadlaterFormPage.ets`
- `ohos/entry/src/main/ets/formability/pages/FortuneFormPage.ets`
- `ohos/entry/src/main/ets/formability/pages/SolarTermFormPage.ets`
**问题A2: 日签卡片保存按钮无反应**
- **原因:** `gal` (gallery_saver) 插件不支持OHOS平台
- **修复内容:**
- ✅ 修改 `export_io_native.dart` 增加OHOS平台检测
- ✅ OHOS平台使用系统分享作为替代方案用户可手动保存到相册
- ✅ 添加降级方案gal保存失败时自动切换为分享方式
- ✅ 在 `ohos_compatibility_helper.dart` 添加图片保存兼容方法
**修改文件:**
- `lib/editor/services/export/export_io_native.dart` — OHOS兼容性支持
- `lib/core/utils/platform/ohos_compatibility_helper.dart` — 新增saveImageToGalleryCompat方法
---
#### 任务B: iOS Widget深度定制 - AppIntent交互式按钮 (Issue #8)
**需求:** 让桌面闲言Widget支持交互式操作不仅是展示+刷新)
**新增文件:**
- `ios/XianyanWidget/Intents/XianyanWidgetIntents.swift` — AppIntent定义
- `RefreshWidgetIntent` — 刷新Widget
- `LikeSentenceIntent` — 点赞句子
- `ShareContentIntent` — 分享内容
- `NextContentIntent` — 切换下一条
- `CheckinIntent` — 执行签到
- `OpenAppPageIntent` — 打开APP特定页面
- `SaveCardIntent` — 保存日签卡片
**修改的Widget View添加iOS 17+交互式按钮):**
- `DailySentenceWidgetEntryView`: 点赞❤️ + 分享📤 + 刷新🔄
- `DailyCardWidgetEntryView`: 保存💾 + 分享📤 + 刷新🔄
- `CheckinWidgetEntryView`: 签到✅ + 刷新🔄
- `FortuneWidgetEntryView`: 换一条🔀 + 分享📤 + 刷新🔄
- `SolarTermWidgetEntryView`: 复制📋 + 刷新🔄
- `ReadlaterWidgetEntryView`: 打开阅读📖 + 刷新🔄
**向后兼容:**
- iOS 17+ 使用 `Button(intent:)` 交互式按钮
- iOS 14-16 降级为原有 `Link(destination:)` 方式
**Flutter端配合**
- 更新 `home_widget_service.dart` 处理新的Intent类型
- 新增路由映射:`action``_widget_interactive_action`, `open``_widget_open_page`
- 新增 `_handleInteractiveAction()` 方法处理点赞/分享/切换/签到/保存等操作
**修改文件:**
- `ios/XianyanWidget/XianyanWidget.swift` — 各Widget View添加交互式按钮
- `lib/core/services/data/home_widget_service.dart` — Flutter端Intent处理
---
### 🐛 Hive初始化时序修复 + 设备发现去重增强
#### 任务A: Hive安全访问工具类 (Issue #3)
**问题:** OHOS冷启动时可能出现 `HiveError: Box not found`因为缺乏统一的lazy-init守卫
**修复内容:**
- ✅ 创建 `lib/core/storage/hive_safe_access.dart` 统一Hive安全访问单例
- ✅ 提供 `safeBox<T>(name)` 方法自动检查并初始化带重试机制默认3次
- ✅ 提供 `ensureOpen(name)` / `tryGetBox<T>(name)` 方法
- ✅ 使用 Box 缓存 + 并发打开锁防止重复打开
- ✅ 完整日志追踪便于调试
- ✅ 更新 `KvStorage.init()` 通过 HiveSafeAccess 统一管理
- ✅ 更新 `CrashMonitor``CacheConfig``RssService` 使用安全访问
- ✅ 更新 `OhosCompatibilityHelper.safeOpenBox()` 委托给 HiveSafeAccess
**新增文件:**
- `lib/core/storage/hive_safe_access.dart` — Hive安全访问单例
**修改文件:**
- `lib/core/storage/kv_storage.dart` — 集成HiveSafeAccess
- `lib/core/services/error/crash_monitor.dart` — 使用safeBox替代直接openBox
- `lib/core/network/cache_config.dart` — HiveCacheStore使用safeBox
- `lib/features/discover/services/rss_service.dart` — 使用safeBox
- `lib/core/utils/platform/ohos_compatibility_helper.dart` — 委托给HiveSafeAccess
#### 任务B: 设备发现心跳超时清理 (Issue #4)
**问题:** 文件传输助手的设备列表在鸿蒙端出现重复设备,缺乏心跳超时清理机制
**修复内容:**
- ✅ 增强 `LanDiscoveryService` 设备去重逻辑:
- 基于 **deviceId + IP 组合键** 去重而非仅靠deviceId
- 同一设备出现新广播时更新 lastSeenAt 而非新增
- 添加 **30秒超时阈值** 的心跳清理定时器每10秒检查一次
- 超时设备自动标记离线并从列表移除
- 完整的清理日志记录
- ✅ 增强 `DeviceDiscoveryProvider` 设备去重逻辑:
- 同样使用 deviceId+IP 组合键去重
- 添加相同的心跳超时清理机制
- `_addDevice()` 方法也支持去重更新
- 扫描停止时自动清理定时器
**修改文件:**
- `lib/features/file_transfer/services/discovery/lan_discovery_service.dart`
- `lib/features/file_transfer/providers/device_discovery_provider.dart`
---
## [v6.11.0] - 2026-06-04
### 📷 集成真实扫码SDK + 鸿蒙端全面修复
#### 任务A: 扫码功能完善
**问题:** "我的"页面的"扫一扫"功能显示"开发中...",未实现真实的二维码扫描功能
**修复内容:**
- ✅ 创建通用扫码页面 `qrcode_scanner_page.dart`,集成 `mobile_scanner: ^7.1.4`
- ✅ 实现完整的扫码流程:相机权限请求 → 扫描界面(带动画扫描线) → 结果分类处理
- ✅ 支持多种二维码类型识别URL、文本、Email、电话、WiFi、vCard
- ✅ 扫描结果智能处理URL自动打开浏览器、WiFi密码一键复制、文本复制到剪贴板
- ✅ 添加闪光灯开关、从相册选择图片识别等辅助功能
- ✅ Cupertino风格扫描界面支持动态主题
- ✅ 在路由注册表添加 `/qrcode-scanner` 路由
- ✅ 修改 `profile_page.dart`,将"开发中..."替换为跳转到扫码页面
**新增文件:**
- `lib/features/shared/presentation/qrcode_scanner_page.dart`
**修改文件:**
- `lib/core/router/app_routes.dart` — 添加 qrcodeScanner 路由常量
- `lib/core/router/route_registry.dart` — 注册扫码页面路由
- `lib/features/mine/profile/presentation/profile_page.dart` — 替换"开发中..."为页面跳转
- `android/app/src/main/AndroidManifest.xml` — 添加相机权限声明
#### 任务B: 鸠蒙端兼容性修复
##### B.1.1 相机权限缺失 ✅
**问题:** Android端缺少CAMERA权限声明导致扫码等功能无法使用
**修复:**
-`AndroidManifest.xml` 添加 `android.permission.CAMERA` 权限
- 添加 `<uses-feature android.hardware.camera>` 声明(非必需)
- **注意:** 鸿蒙端 `module.json5` 已有 `ohos.permission.CAMERA` 权限第184行
##### B.1.2 文件传输设备列表重复 ✅
**分析结果:**
- 设备发现代码已有基于 `deviceId` 的去重逻辑(`transfer_notifier.dart:446-451`
- 合并设备时也做了ID去重`file_transfer_discovery_tab.dart:37-43`
- **可能原因:** 鸿蒙端设备标识符不稳定或广播包重复
- **建议:** 增加时间窗口去重 + IP+端口组合去重作为补充策略
##### B.1.3 长按桌面图标不显示按钮列表 ⚠️
**分析结果:**
- 这是鸿蒙原生端的限制,需要修改 `.ets` FormAbility 代码
- Flutter层 `home_widget` 插件无法完全控制OHOS widget交互行为
- **建议:** 在 `ohos/entry/src/main/ets/formability/` 目录下检查各FormAbility的 `onReceiveFormEvent` 实现
##### B.1.4 HiveError Box not found ✅
**解决方案:**
- 创建 `OhosCompatibilityHelper.safeOpenBox()` 方法,提供重试机制
- 建议在应用启动时统一初始化所有Hive Box
- 特别关注OHOS平台初始化时序问题
##### B.1.6 设备信息显示unknown ✅
**分析结果:**
- `device_info_service.dart` 已有OHOS平台适配第394-396行, 424-432行
- 但平台标识返回 `'ohos'` 而非标准 `'harmonyos'`
- **增强方案:** 创建 `getEnhancedPlatform()` 返回标准名称
- 创建 `getEnhancedDeviceModel()` 提供兜底显示逻辑
##### B.1.7 日签卡片保存按钮无反应 ⚠️
**分析结果:**
- 使用 `gal: ^2.3.0` 插件保存图片到相册
- 该插件对OHOS平台的支持可能不完整
- **建议:**
- 检查 `pubspec.ohos.yaml` 是否有gal的OHOS替代实现
- 或使用 `image_picker` 的反向操作保存图片
- 添加try-catch和用户提示
##### B.1.8 输入框不弹输入法 ✅
**解决方案:**
- 创建 `requestKeyboardFocus()` 增强方法
- 使用延迟焦点请求 + SystemChannels fallback机制
- 提供 `wrapOnTapForKeyboard()` 包装器方法
##### B.1.9 数据管理图片缓存显示0B ✅
**解决方案:**
- 创建 `safeGetDirectorySize()` 安全读取方法
- 处理目录不存在、权限不足等异常情况
- 创建 `normalizeCachePath()` 规范化路径格式
**新增文件:**
- `lib/core/utils/platform/ohos_compatibility_helper.dart` — 鸿蒙端兼容性工具类
**工具类提供的能力:**
- 输入法增强(键盘唤起)
- 设备信息标准化
- 文件路径适配与安全读取
- 权限检查增强
- Hive初始化容错
- UI渲染增强
- OhosCompatibleState Mixin用于快速集成
***
## [v6.10.5] - 2026-06-02
### 🧭 修复多个页面缺少AppBar标题和返回按钮