From a3bf2585b0255c74f587bcac96bf4eb0ce921cc0 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 1 Aug 2025 11:47:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor(splash):=20=E4=BC=98=E5=8C=96=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E6=B5=81=E7=A8=8B=E5=92=8C=E7=89=88=E6=9C=AC=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E8=B0=83=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将用户追踪权限请求改为异步执行不阻塞主流程 重构版本检查逻辑,在页面跳转完成后执行 使用Logger替代print进行统一日志管理 --- .../splash/controllers/splash_controller.dart | 106 ++++++++++-------- 1 file changed, 60 insertions(+), 46 deletions(-) diff --git a/lib/modules/splash/controllers/splash_controller.dart b/lib/modules/splash/controllers/splash_controller.dart index 4badc4d43..4bf70d207 100644 --- a/lib/modules/splash/controllers/splash_controller.dart +++ b/lib/modules/splash/controllers/splash_controller.dart @@ -59,20 +59,37 @@ class SplashController extends GetxController { } }); - //弹出用户追踪问题 - WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((_) async { - final status = - await AppTrackingTransparency.requestTrackingAuthorization(); + // 异步处理用户追踪授权,不阻塞主流程 + _requestTrackingPermissionAsync(); + } + + /// 异步请求追踪权限,不阻塞启动流程 + void _requestTrackingPermissionAsync() { + Future.delayed(const Duration(milliseconds: 500), () async { + try { + await AppTrackingTransparency.requestTrackingAuthorization(); + Logger.d(_tag, '用户追踪权限请求完成'); + } catch (e) { + Logger.e(_tag, '用户追踪权限请求失败: $e'); + } }); } void _startNormalFlow() { _startLoadingAnimation(); _loadAppResources(); + } - // 延迟执行版本检查,避免影响启动速度 - Future.delayed(const Duration(seconds: 1), () { - _checkVersionUpdateIfNeeded(); + /// 智能调度版本检查,在页面跳转后执行,完全不影响启动流程 + void _scheduleVersionCheck() { + // 在独立的微任务中执行,避免阻塞主线程 + scheduleMicrotask(() async { + try { + Logger.d(_tag, '开始执行版本检查(后台任务)'); + _checkVersionUpdateIfNeeded(); + } catch (e) { + Logger.e(_tag, '版本检查调度失败: $e'); + } }); } @@ -98,18 +115,6 @@ class SplashController extends GetxController { ); } - // 初始化地图SDK - // void _initMapSDK() { - // try { - // AmapFlutter().initSdk( - // iosKey: "a4a1394fe817c2f86a424b897b4a9af4", - // androidKey: "78e7946dd602778df82c6ae143a88184", - // ); - // } catch (e) { - // print('地图SDK初始化失败: $e'); - // } - // } - // 进度条动画(持续2秒) void _startLoadingAnimation() { const totalDuration = 1500; // 动画总时长增加到1.5秒 @@ -136,22 +141,23 @@ class SplashController extends GetxController { // await _loadImages(); // await _initDatabase(); - // 检查版本更新(在后台进行,不阻塞启动流程) - //_checkVersionUpdate(); - _isResourceLoaded.value = true; _checkNavigateCondition(); } catch (e) { Get.snackbar('错误', '资源加载失败,请检查网络连接'); _isResourceLoaded.value = true; // 允许用户继续使用 - print('资源加载错误: $e'); + Logger.e(_tag, '资源加载错误: $e'); } } // 检查跳转条件 - void _checkNavigateCondition() { + void _checkNavigateCondition() async { if (_loadingProgress.value >= 1.0 && _isResourceLoaded.value) { - _navigateToLogin(); + // 关键改动:先执行页面跳转,并用 await 等待它完成 + await _navigateToLogin(); + + // 页面跳转完全结束后,再安心地安排版本检查 + _scheduleVersionCheck(); } } @@ -159,7 +165,7 @@ class SplashController extends GetxController { Future _navigateToLogin() async { bool isLoggedIn = false; final token = _storage.read('logintoken'); - print('getLoginToken:进来了${token}'); + Logger.d(_tag, 'getLoginToken:进来了${token}'); if (token != null && token.isNotEmpty) { isLoggedIn = await getLoginToken(); } @@ -173,14 +179,14 @@ class SplashController extends GetxController { Future getLoginToken() async { try { - print('getLoginToken:进来了'); + Logger.d(_tag, 'getLoginToken:进来了'); //if (User.getname() != "") { final response = await Api.tokenlogin(); - print('getLoginToken: $response'); + Logger.d(_tag, 'getLoginToken: $response'); if (response == null) return false; if (response['user'] != '') { - print('getLoginToken:进来了'); + Logger.d(_tag, 'getLoginToken:进来了'); // 根据API设计调整 final user = User.fromJson(response); @@ -192,21 +198,21 @@ class SplashController extends GetxController { //} return false; } catch (e) { - print('Token获取失败: $e'); + Logger.e(_tag, 'Token获取失败: $e'); return false; } } Future getAppConfig() async { try { - print('getAppConfig:进来了'); + Logger.d(_tag, 'getAppConfig:进来了'); //if (User.getname() != "") { final response = await Api.getappconfig(); - print('getAppConfig: $response'); + Logger.d(_tag, 'getAppConfig: $response'); if (response == null) return false; // 根据API设计调整 final resp = UserGetAppConfigResp.fromJson(response); - print('getAppConfig:进来了'); + Logger.d(_tag, 'getAppConfig:进来了'); // 存储用户信息(示例) // _storage.write('ENV', resp.env); // _storage.write('AGENTS', resp.agents); @@ -214,7 +220,7 @@ class SplashController extends GetxController { AppConfig.initialize(resp); return true; } catch (e) { - print('getAppConfig 取失败: $e'); + Logger.e(_tag, 'getAppConfig 取失败: $e'); return false; } } @@ -236,7 +242,8 @@ class SplashController extends GetxController { } // 条件2:距离上次检查超过24小时 else if (lastCheckTimestamp != null) { - final lastCheckTime = DateTime.fromMillisecondsSinceEpoch(lastCheckTimestamp); + final lastCheckTime = + DateTime.fromMillisecondsSinceEpoch(lastCheckTimestamp); final timeDifference = now.difference(lastCheckTime); if (timeDifference.inHours >= _versionCheckIntervalHours) { @@ -265,18 +272,25 @@ class SplashController extends GetxController { Future _performVersionCheck() async { try { final versionService = VersionUpdateService.to; - final updateInfo = await versionService.checkForUpdate(); - - if (updateInfo.hasUpdate) { - Logger.i(_tag, '发现新版本: ${updateInfo.latestVersion}'); - // 显示更新对话框 - await VersionUpdateDialog.show(updateInfo); - } else { - Logger.i(_tag, '当前已是最新版本: ${updateInfo.currentVersion}'); - } + // 异步执行,不等待结果 + versionService.checkForUpdate().then((updateInfo) { + if (updateInfo.hasUpdate) { + Logger.i(_tag, '发现新版本: ${updateInfo.latestVersion}'); + // 在主线程中显示更新对话框 + WidgetsBinding.instance.addPostFrameCallback((_) { + VersionUpdateDialog.show(updateInfo); + }); + } else { + Logger.i(_tag, '当前已是最新版本: ${updateInfo.currentVersion}'); + } - // 更新检查记录 - _updateVersionCheckRecord(); + // 更新检查记录 + _updateVersionCheckRecord(); + }).catchError((e) { + Logger.e(_tag, '版本检查失败: $e'); + // 即使检查失败,也更新记录,避免频繁重试 + _updateVersionCheckRecord(); + }); } catch (e) { Logger.e(_tag, '版本检查失败: $e'); // 即使检查失败,也更新记录,避免频繁重试