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 因此处的错误消息而失败。这些错误消息都离正确的解决方案很远。幸运的是,我采用了将所有东西都扔掉并重新开始的可靠方法。
总结:我有 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 因此处的错误消息而失败。这些错误消息都离正确的解决方案很远。幸运的是,我采用了将所有东西都扔掉并重新开始的可靠方法。