From 8fec4713d28b5787025b090ab1adfa6619a3cf04 Mon Sep 17 00:00:00 2001 From: wuqifeng <540416539@qq.com> Date: Sat, 4 May 2024 02:16:45 +0800 Subject: [PATCH] feat:启动请求失败阻塞优化 --- lib/app/splash_page.dart | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/app/splash_page.dart b/lib/app/splash_page.dart index a20b7a7..04a9da2 100644 --- a/lib/app/splash_page.dart +++ b/lib/app/splash_page.dart @@ -48,7 +48,7 @@ class _TransitionViewState extends State { //Log.d('Splash读当前页面:$currentPageName'); Log.d('Splash读本地, userEntity: $userEntity'); int apartInMilliseconds = 0; - // 阻塞获取系统配置信息 + // 获取系统配置信息 AppConfigHelper.getAppConfig(); // 调一下接口判断一下有效性再往下 if (userEntity != null && userEntity.token != null) { @@ -95,7 +95,9 @@ class _TransitionViewState extends State { }); } - Future fetchNecessaryData(String userToken) async { + Future fetchNecessaryData(String userToken, + {Completer? completer}) async { + completer ??= Completer(); // 获取用户信息 try { UserEntity? userEntity = await UserDao.getUserInfo(); @@ -105,7 +107,10 @@ class _TransitionViewState extends State { Log.d('Splash重设token, userEntity: $userEntity'); UserUtil.saveUser(userEntity); } + //todo 如果为null是否需要清除用户信息? + completer.complete(); } catch (e) { + debugPrint('Splash获取用户信息异常:$e'); //异常的话弹窗提示重试 showDialog( context: context, @@ -118,13 +123,20 @@ class _TransitionViewState extends State { content: const Text('网络异常,请检查网络后重试'), actions: [ TextButton( - child: const Text('退出'), - onPressed: () => AppConfigHelper.exitApp() - ), + child: const Text('退出'), + onPressed: () => { + // 关闭对话框并重试 + Navigator.of(context).pop(), + AppConfigHelper.exitApp(), + completer?.complete(), + }), TextButton( child: const Text('重试'), onPressed: () async { - fetchNecessaryData(userToken); + // 关闭对话框并重试 + Navigator.of(context).pop(); + await fetchNecessaryData(userToken, completer: completer); + completer?.complete(); }, ), ], @@ -134,6 +146,8 @@ class _TransitionViewState extends State { ); e.logE(); } + // 等待completer完成,这会阻塞后续代码的执行,直到用户做出选择 + await completer.future; } @override -- libgit2 0.22.2