Flutter中Amplify-Cognito登录状态判断及启动页跳转异常排查
解决Amplify-Cognito Flutter启动时已登录仍跳转登录页问题
问题描述
使用Amazon Amplify-Cognito为Flutter应用实现用户认证功能,需求是应用启动时:未登录状态跳转至Login页面,已登录状态跳转至Home页面。目前Login页面功能正常,但存在问题:即使用户已登录,每次启动应用仍会跳转至Login页面。
问题原因
你的main函数中调用configureAmplify()时未使用await,导致Amplify还未完成插件配置与初始化,就执行了fetchAuthSession()操作。此时无法正确读取已登录用户的会话状态,会错误返回未登录结果。
解决方案
修改main函数,等待Amplify配置完成后再获取认证会话状态:
修改后的完整代码
import 'package:flutter/material.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:amplify_auth_cognito/amplify_auth_cognito.dart'; import 'amplifyconfiguration.dart'; import 'package:ingeyaa/login.dart'; import 'package:ingeyaa/signIn.dart'; import 'home.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 等待Amplify配置完成后再执行后续操作 await configureAmplify(); try { AuthSession res = await Amplify.Auth.fetchAuthSession(); runApp(MyApp(isLoggedIn: res.isSignedIn)); } catch (e) { runApp(const MyApp(isLoggedIn: false)); } } Future<void> configureAmplify() async { final authPlugin = AmplifyAuthCognito(); await Amplify.addPlugin(authPlugin); try { await Amplify.configure(amplifyconfig); } on AmplifyAlreadyConfiguredException { safePrint("Tried to reconfigure Amplify; this can occur when your app restarts on Android."); } } class MyApp extends StatelessWidget { final bool isLoggedIn; const MyApp({Key? key, required this.isLoggedIn}); @override Widget build(BuildContext context) { const whiteSwatch = MaterialColor( 0xFFFFFFFF, <int, Color>{ 50 : Colors.white, 100 : Colors.white, 200 : Colors.white, 300 : Colors.white, 400 : Colors.white, 500 : Colors.white, 600 : Colors.white, 700 : Colors.white, 800 : Colors.white, 900 : Colors.white, }, ); return MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData( primarySwatch: whiteSwatch, ), home: isLoggedIn ? Home() : Login(), ); } }
关键修改点
- 在
main函数中,给configureAmplify()添加await关键字,确保Amplify完成插件注册与配置初始化后,再执行fetchAuthSession()获取用户登录状态。
修改后,应用启动时就能正确识别已登录用户的会话状态,自动跳转至Home页面。
内容的提问来源于stack exchange,提问作者Abdel
相关产品推荐
相关产品推荐

