Flutter:使用 amplify_auth_cognito 插件时 amplify_flutter 崩溃

Flutter: amplify_flutter crashes when using amplify_auth_cognito plugin

总结:我有 2 个问题:当我尝试使用 auth 插件时,应用程序加载错误和模拟器上的整个应用程序 运行 崩溃。

我从终端使用 amplify init 连接到 Amplify。我正在关注这个例子:https://pub.dev/packages/amplify_auth_cognito/example

version: 1.0.0+1
amplify_auth_cognito: 0.4.2
amplify_flutter: 0.4.2

下面的示例是来自一个超级简单的小部件的代码块,它只呈现一些显示 'Hi'

的文本

问题 1:

如果我在没有 AmplifyAuthCognito 插件的情况下启动应用程序,它会起作用:

// Example 1 without auth plugin
  void initState() {
    super.initState();
    _configureAmplify();
  }

  Future<void> _configureAmplify() async {
    try {
      await Amplify.configure(amplifyconfig);
      print('Configure success');
    } on AmplifyAlreadyConfiguredException {
      print('Amplify was already configured.');
    }
  }

Configure Success在调试终端打印

接下来我添加 Auth 插件并重新构建应用程序:

// Example 2 With Auth plugin
  void initState() {
    super.initState();
    _configureAmplify();
  }

  Future<void> _configureAmplify() async {
    try {
      AmplifyAuthCognito authPlugin = AmplifyAuthCognito();
      await Amplify.addPlugins([authPlugin]);
      await Amplify.configure(amplifyconfig);
      print('Configure success');
    } on AmplifyAlreadyConfiguredException {
      print('Amplify was already configured.');
    }
  }

构建在调试控制台中抛出异常并出现此错误

AmplifyException (AmplifyException(message: Please check your pubspec.yaml if you are depending on an amplify plugin and not using in your app. Underlying error message: Unable to decode configuration, recoverySuggestion: Remove amplify plugins from your pubspec.yaml that you are not using in your app., underlyingException: null))

如果我使用 VSCode 中的重启按钮重启应用程序,错误就会消失。我在调试控制台中得到 Configure success。我错过了什么导致它在第一次构建时崩溃但在重新启动时没有崩溃?

问题 2:

为此,我在示例 2 中使用了相同的代码,并且我已重新启动应用程序以获得干净的调试控制台。我做了一个按钮来检查当前用户。这是按钮点击处理程序:

  void checkSession() async {
    try {
      if (Amplify.isConfigured) {
        print('checkSession');
        final response = await Amplify.Auth.getCurrentUser();
        print('Amplify.Auth.fetchAuthSession $response');
      }
    } on Exception catch (e) {
      print('Amplify.Auth.fetchAuthSession Error $e');
    }
  }

当调用 Amplify.Auth.* 时,整个应用程序在模拟器中崩溃并出现此错误:

Amplify/AuthCategory.swift:18: Fatal error: Authentication category is not configured. Call Amplify.configure() before using any methods on the category. Lost connection to device.

我终于明白了。我正在连接到现有的 Amplify 设置。这意味着我必须跳过大部分本地 Amplify cli 设置。

我回到这个:https://docs.amplify.aws/lib/auth/getting-started/q/platform/flutter/#prerequisites

我确信我会在 AWS 上做一些事情,但还是做了

amplify add auth

? Do you want to use the default authentication and security configuration?
    `Default configuration`
? How do you want users to be able to sign in?
    `Username`
? Do you want to configure advanced settings?
    `No, I am done.`

amplify push

我不确定我是否在 AWS 上破坏了任何东西,但插件操作现在可以正常工作了。

Amplify 和 Flutter 因此处的错误消息而失败。这些错误消息都离正确的解决方案很远。幸运的是,我采用了将所有东西都扔掉并重新开始的可靠方法。