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:
164
CHANGELOG.md
164
CHANGELOG.md
@@ -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/ref,widget 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直接调用异步方法访问ref,widget 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)
|
||||
|
||||
Reference in New Issue
Block a user