refactor: 兼容后端返回数字类型波动,清理废弃代码

主要变更:
1.  全局修复类型转换问题,将多处`as int?`改为`(num?)?.toInt()`兼容浮点/字符串类型的数字字段
2.  移除废弃的nearby_p2p配对方式和对应的依赖包
3.  优化鸿蒙端快捷方式、引导页、路由导航的稳定性
4.  合并日志输出避免鸿蒙端IDE卡顿
5.  修复安卓端蓝牙权限冗余声明
This commit is contained in:
Developer
2026-06-07 08:04:38 +08:00
parent 2db07728a4
commit ae6804e8bd
122 changed files with 2727 additions and 1908 deletions

View File

@@ -4,6 +4,7 @@
***
<<<<<<< Updated upstream
## [v6.20.17] - 2026-06-07
### 🔍 改进 — Spotlight搜索扩展
@@ -358,11 +359,45 @@
#### 修改文件
- `lib/features/daily_fortune/presentation/daily_fortune_page.dart` — 移除 AnimatedCrossFade改用条件渲染移除 .animate();移除 GlobalKey
- `lib/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() ?? 0`
- `data['field'] as int? ?? 0``(data['field'] as num?)?.toInt() ?? 0`
- `data?['field'] as int? ?? 0``(data?['field'] as num?)?.toInt() ?? 0`
- `json['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 报错
@@ -393,11 +428,49 @@
- `lib/features/tool_center/statistics/presentation/widgets/learning_stats_tab.dart` — DeferredBuilder → SafeChartWidget2处
- `lib/features/daily_fortune/presentation/daily_fortune_page.dart` — 移除 GlobalKey改用 visitChildElements 查找 RepaintBoundary
- `lib/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+fromMap
- `lib/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 错误
@@ -432,11 +505,33 @@
- `lib/features/mine/profile/presentation/about_page.dart` — 使用 onboardingReview
- `lib/features/mine/settings/presentation/general/general_settings_page.dart` — 使用 onboardingReview
- `lib/features/mine/settings/presentation/more_settings_page.dart` — 使用 onboardingReview
=======
### 🐛 安卓端长按桌面图标快捷方式闪退修复
#### 问题
安卓端长按桌面图标,点击弹出的快捷方式(主题个性化/通用设置App直接卡死闪退。鸿蒙端和iOS端正常。
#### 根因
1. `quick_actions_android` 插件在冷启动时,`initialize()` 回调可能在 GoRouter 完全初始化之前被调用
2. 此时 `appRouter.push(route)` 执行时路由系统未就绪,抛出未捕获异常导致闪退
3. `_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启动卡死崩溃
@@ -460,11 +555,34 @@
- `lib/features/home/presentation/panels/sentence_detail_content.dart` — 接收 `cardKey` 参数替代全局 Provider
- `lib/features/home/presentation/panels/sentence_detail_actions.dart` — 接收 `cardKey` 参数替代全局 Provider
- `lib/features/progress/presentation/progress_beautify_page.dart` — 修复 `_args` late 初始化错误
=======
### 🐛 鸿蒙端多场景卡死修复
#### 问题
1. **SearchType.validateAll 逐条日志导致鸿蒙端IDE卡死** — 每个不支持的类型单独调用 `Log.w()`产生大量日志输出11条重复格式警告在鸿蒙端debug模式下导致IDE卡死
2. **MissingPluginException 卡死**`checkPendingManageStorage` 方法在鸿蒙端没有原生实现,调用时抛出 `MissingPluginException`
3. **个人中心页面卡死**`_loadDashboard()` 静默吞掉异常;`_dashboardData?['score'] as int?` 后端返回String时抛TypeErrorUserStatsBar中同样存在类型安全问题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
@@ -484,11 +602,23 @@
- `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个未使用的三方库
#### 移除的依赖
@@ -515,6 +645,29 @@
- `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种语言文件同步更新
- **日志量精简** — `appLogger` printer 改为简洁模式(关闭颜色/emoji/调用栈);`LogCategory` 默认级别提高ui/network/router/storage/device/search/provider/onboarding/general 从debug/info提高到warningchart/haptic/push提高到error
#### 修改文件
- `ohos/entry/src/main/module.json5` — metadata name 修正
- `ohos/entry/src/main/resources/base/profile/shortcuts.json` — 补充 moduleName
- `ohos/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
***