chore: 完成v1.2版本迭代优化与兼容修复

1. 基础适配升级:将iOS最低版本提升至15.5,更新Podfile与Xcode配置
2. 导航栈优化:使用push替代go保留路由栈,重构路由重定向逻辑
3. 多场景崩溃防护:
   - 新增目录获取降级逻辑,适配异常环境
   - 增加上下文挂载检查,防止PostFrame回调崩溃
   - 完善Hive初始化与Box访问的异常处理,实现空操作降级
4. 体验优化:
   - 修复摇一摇权限开关逻辑,更新个人中心文案
   - 新增请求超时保护与异常提示
   - 优化分享/保存相册的模拟器兼容处理
   - 重构引导页与初始化流程,修复数据丢失问题
5. 代码清理:移除重复路由注册,优化Widget预览页面生命周期
6. 细节优化:更新微信联系方式展示样式,完善日签与备份服务逻辑
This commit is contained in:
Developer
2026-06-04 10:26:42 +08:00
parent 67f26ff166
commit 33f59046b3
58 changed files with 872 additions and 3014 deletions

View File

@@ -4,6 +4,170 @@
***
## [v6.16.3] - 2026-06-04
### 🐛 Hive降级初始化 — 解决iOS模拟器objective_c库导致整个Hive系统瘫痪
#### 根因分析
`Hive.initFlutter()`内部调用`getApplicationDocumentsDirectory()`在iOS模拟器上因objective_c库加载失败而抛出ArgumentError。
之前的修复只是让app不崩溃降级模式但Hive完全不可用导致壁纸页面、缓存管理页面等所有依赖Hive的功能无数据。
#### 修复内容
- **HiveSafeAccess.ensureInitialized()** — `Hive.initFlutter()`失败时,降级使用`Hive.init()`+手动获取路径(`getApplicationDocumentsDirectory()`失败则用`Directory.systemTemp.path`
- 这样Hive可以在iOS模拟器上正常工作使用临时目录所有依赖Hive的服务壁纸、缓存、设置等恢复正常
#### 修改文件
- `hive_safe_access.dart`
***
## [v6.16.2] - 2026-06-04
### 🐛 壁纸模版页面卡死 + Hive系统级联崩溃根因修复
#### 根因Hive.initFlutter()在iOS模拟器因objective_c库问题失败后rethrow导致整个Hive系统瘫痪
- **影响范围:** 所有依赖Hive的服务KvStorage、WallpaperFavoriteService、WallpaperHealthService、SettingsChangeLogger、ExchangeRateService等全部初始化失败KvStorage持续输出"未初始化"警告,壁纸页面数据为空导致卡死
#### 修复内容:
1. **HiveSafeAccess.ensureInitialized()** — 失败时不再rethrow标记`_hiveInitFailed`状态,让后续操作可优雅降级
2. **KvStorage.init()** — 失败时不再rethrow进入降级模式所有存储操作返回默认值
3. **WallpaperFavoriteService.init()** — 添加`on HiveError catch` + `catch (e)` 全异常捕获
4. **WallpaperHealthService.init()** — 同上
5. **SettingsChangeLogger.init()** — 同上
6. **HiveSafeAccess._openWithRetry()** — Hive初始化失败时直接抛出明确错误不浪费3次重试
#### 修改文件:
- `hive_safe_access.dart`, `kv_storage.dart`, `wallpaper_favorite_service.dart`, `wallpaper_health_service.dart`, `settings_change_logger.dart`
***
## [v6.16.1] - 2026-06-04
### 🐛 引导页重复显示 + 桌面小部件framework断言根因修复
#### 引导页重复显示
- **根因:** `GoRouter`构造时调用`_resolveInitialLocation()`,此时`KvStorage`尚未初始化,`isOnboardingCompleted`返回默认值`false`,导致路由始终指向`/onboarding`
- **修复:** 将引导页判断从`initialLocation`(同步执行)移到`redirect`回调每次导航时执行此时KvStorage已就绪`initialLocation`固定为`AppRoutes.home`;删除不再使用的`_resolveInitialLocation()`
- **修改文件:** `app_router.dart`
#### 桌面小部件页面framework断言错误
- **根因:** `CupertinoSliverNavigationBar`缺少`largeTitle`参数iOS 26/Flutter最新版要求必须提供否则触发`largeTitleContent != null`断言,级联导致`_elements.contains(element)`断言和`RenderViewport expected RenderSliver`错误
- **修复:** 添加`largeTitle`参数
- **修改文件:** `widget_management_page.dart`
***
## [v6.16.0] - 2026-06-04
### 🛡️ 审计修复 — 5类系统性风险26处加固
基于v6.15.0验收审计发现的87个潜在问题优先修复28个高危问题中的26处2处为设计决策保留
#### 1. gal插件ArgumentError捕获5处
- **原因:** iOS模拟器objective_c原生库加载失败时gal抛出ArgumentError未捕获导致崩溃
- **修复:** 5处gal调用添加`on ArgumentError catch`分支,降级为友好提示
- **修改文件:** `share_sheet.dart`, `leisure_share_sheet.dart`, `progress_share_card.dart`, `chat_video_bubble.dart`, `china_colors_page.dart`
#### 2. path_provider异常降级8处
- **原因:** `getTemporaryDirectory()`/`getApplicationDocumentsDirectory()`在某些平台可能抛出异常
- **修复:** 所有调用点添加try-catch失败时降级使用`Directory.systemTemp`
- **修改文件:** `export_io_native.dart`(4处), `font_download_service.dart`, `logger.dart`, `sentence_detail_actions.dart`, `account_export_info_sheet.dart`, `voice_recorder_sheet.dart`, `ohos_compatibility_helper.dart`, `general_fields_provider.dart`(2处)
#### 3. Hive.openBox ArgumentError捕获2处
- **原因:** iOS模拟器objective_c库异常时Hive.openBox抛出ArgumentError
- **修复:** 添加`on ArgumentError catch`降级打开fallback box
- **修改文件:** `wallpaper_favorite_service.dart`, `wallpaper_health_service.dart`
#### 4. addPostFrameCallback mounted检查6处
- **原因:** 回调中直接使用context/setState/refwidget dispose后触发framework断言错误
- **修复:** 所有回调开头添加`if (!mounted) return;`ConsumerWidget用`context.mounted`
- **修改文件:** `progress_beautify_page.dart`, `signin_page.dart`, `app_lock_pattern_setup.dart`, `image_cache_page.dart`, `chat_flow_page.dart`, `weather_settings_page.dart`
#### 5. 页面级pop canPop()保护5处
- **原因:** 在根页面pop可能导致黑屏或异常
- **修复:** 添加`canPop()`检查不可pop时降级导航到首页
- **修改文件:** `signin_page.dart`, `hot_search_page.dart`, `security_question_page.dart`, `change_password_page.dart`, `sentence_detail_sheet.dart`
***
## [v6.15.0] - 2026-06-04
### 🐛 10项Bug修复 + 验收审计举一反三
#### Bug #1: 了解我们页面 - 微信搜索移到右边作为单独标签
- **原因:** "微风暴(微信搜索)"合并为一个标签,用户无法单独操作微信搜索
- **修复:** 拆分为两个独立标签,左边"微风暴"带复制功能,右边"微信搜索"带搜索图标
- **修改文件:** `learn_us_widgets.dart`
#### Bug #2: 权限管理页面 - 摇一摇权限点击关闭无反应
- **原因:** `refresh()`将全页面设为loading状态导致开关组件被销毁重建
- **修复:** 新增`_refreshSilently()`方法不设loading状态避免销毁开关启用摇一摇时重启ShakeDetector
- **修改文件:** `permission_management_page.dart`, `permission_service.dart`
#### Bug #3: 发现页面 - 日签卡片一直转圈loading
- **原因:** API请求无超时保护网络异常时可能无限挂起
- **修复:** provider层添加10秒超时+TimeoutException捕获service层添加8秒超时
- **修改文件:** `daily_card_provider.dart`, `daily_card_service.dart`
#### Bug #4: 发现页面进度 - 保存图片失败(objective_c库问题)
- **原因:** iOS模拟器objective_c原生库加载失败gal插件抛出ArgumentError
- **修复:** export_io_native增加`on ArgumentError catch`降级为分享方案进度美化页面改用ExportService
- **修改文件:** `export_io_native.dart`, `progress_beautify_page.dart`
#### Bug #5: 数据管理页面 - 无法获取应用文档目录异常
- **原因:** `safeAppDirPath`返回null时直接throw无降级方案
- **修复:** 降级使用临时目录数据管理页面增加try-catch保护
- **修改文件:** `backup_service.dart`, `data_management_page.dart`
#### Bug #6: 缓存管理页面 - AppBar标题去掉"图片"两字
- **修复:** 修改zh_cn/zh_tw翻译文件
- **修改文件:** `zh_cn.dart`, `zh_tw.dart`
#### Bug #7: 个人中心 - objective_c库报错(Hive缓存)
- **原因:** 与Bug #4同根因HiveCacheStore打开Box时objective_c库异常
- **修复:** HiveCacheStore增加`on ArgumentError catch`降级打开临时Box
- **修改文件:** `cache_config.dart`
#### Bug #8: iOS长按App icon进入页面无返回按钮
- **原因:** QuickActions使用`appRouter.go()`替换当前路由,无导航栈
- **修复:** 改用`appRouter.push()`保留导航栈审计发现app.dart中另有2处同类问题一并修复
- **修改文件:** `app.dart`3处go→push
#### Bug #9: iOS清理后台重新打开显示引导页
- **原因:** 路由判断使用`isFirstLaunch`Hive冷启动读取失败时默认true导致误判
- **修复:** 改用`isOnboardingCompleted`作为主要判断引导页完成时flush Hive确保持久化
- **修改文件:** `app_router.dart`, `onboarding_provider.dart`
#### Bug #10: 桌面小部件页面 - framework断言错误
- **原因:** `_WidgetDataPreview`在initState直接调用异步方法访问refwidget dispose后仍操作element
- **修复:** 添加`_disposed`标志+dispose()方法initState改用addPostFrameCallback所有ref/setState前检查mounted和disposed添加5秒超时保护
- **修改文件:** `widget_management_page.dart`
### 🔍 验收审计 - 举一反三分析
审计发现项目存在以下系统性风险模式:
| 风险类别 | 高危数 | 中危数 | 低危数 | 合计 |
|---------|-------|-------|-------|------|
| 异步生命周期(ref/setState无mounted保护) | 11 | 20 | 9 | 42 |
| Hive/Path/Gal缺少ArgumentError捕获 | 9 | 10 | 4 | 29 |
| 路由导航(go应改push/pop无空栈保护) | 4 | 4 | 2 | 10 |
| KvStorage关键标志位默认值保护 | 4 | 2 | 0 | 6 |
| **合计** | **28** | **36** | **15** | **87** |
**已修复的举一反三问题:**
- ✅ app.dart中数据管理和小组件导航入口go→push与Bug #8同根因
- ✅ KvStorage.isFirstLaunch默认值分析保持true因路由已改用isOnboardingCompleted
**建议后续优先修复的高危问题:**
1. `share_sheet.dart`等5处gal调用缺少ArgumentError捕获与Bug #4同根因
2. `export_io_native.dart`等8处path_provider缺少null检查与Bug #5同根因
3. `wallpaper_favorite_service.dart`等2处Hive.openBox缺少ArgumentError捕获与Bug #7同根因
4. 6处addPostFrameCallback中使用context/setState无mounted检查与Bug #10同根因
5. `signin_page.dart`等5处页面级pop缺少canPop()保护
***
## [v6.14.0] - 2026-06-04
### 🎴 日签卡片 AR 3D 展示效果 (Issue #9)