Flutter中setState已更新状态但UI未刷新,Amplify配置完成仍显示加载页
问题根因
你遇到的核心问题是MaterialApp的initialRoute属于一次性初始化参数,仅在组件首次构建时生效,后续通过setState修改该参数的值不会触发路由重新跳转。因此即使_isAmplifyConfigured状态更新为true,应用也会停留在首次加载的LoadingScreen页面,不会自动切换到登录页。
另外你提到的initState中调用setState的写法没有问题:你是在异步方法执行完成后才触发setState,此时组件已经完成挂载,不会触发生命周期异常。
修复方案
方案1:直接根据状态返回对应页面(更简单)
放弃用initialRoute做判断,直接在home参数中根据状态返回对应页面,状态更新后会自动触发页面切换:
@override Widget build(BuildContext context) { return MaterialApp( onGenerateRoute: AppRoutes.onGenerateRoute, home: _isAmplifyConfigured ? const LoginScreen() : const LoadingScreen(), ); }
方案2:配置完成后主动触发路由跳转
如果需要保留命名路由的逻辑,可在Amplify配置完成后主动调用Navigator执行跳转:
Future<void> _initializeApp() async { try { await _configureAmplify(); setState(() { _isAmplifyConfigured = true; }); // 主动跳转到登录页,清空之前的加载页路由 if (mounted) { Navigator.of(context).pushNamedAndRemoveUntil( LoginScreen.routeName, (route) => false ); } } catch (e) { // 可添加配置失败的处理逻辑,避免永久停在加载页 debugPrint('Amplify配置失败: $e'); } }
内容的提问来源于stack exchange,提问作者user3697484
相关产品推荐
相关产品推荐

