You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:55:32