问题描述
我在Flutter应用中使用AWS的Amplify Auth的注册功能。的 当我在Android Studio中运行代码并对其进行测试时,该功能运行正常 仿真器/电话。我可以向Cognito添加新用户并验证该用户。
但是,当我构建APK并尝试在同一模拟器/电话上运行该APK时, 注册功能在logcat中引发了一些错误,注册不起作用 就像调试期间一样。我不明白为什么这个错误不 通过Android Studio测试代码时会发生这种情况。
这是错误:
2020-10-28 07:05:27.554 14035-14035/? E/MethodChannel#com.amazonaws.amplify/auth_cognito: Failed to handle method call
e.d: null cannot be cast to non-null type java.lang.reflect.Method
at com.amazonaws.amplify.amplify_auth_cognito.types.FlutterSignUpRequest.a(UnkNown Source:203)
at com.amazonaws.amplify.amplify_auth_cognito.types.FlutterSignUpRequest.<init>(UnkNown Source:96)
at com.amazonaws.amplify.amplify_auth_cognito.AuthCognito.i(UnkNown Source:10)
at com.amazonaws.amplify.amplify_auth_cognito.AuthCognito.a(UnkNown Source:150)
at d.a.b.a.j$a.a(UnkNown Source:17)
at io.Flutter.embedding.engine.e.b.a(UnkNown Source:57)
at io.Flutter.embedding.engine.FlutterJNI.handlePlatformMessage(UnkNown Source:4)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:336)
at android.os.Looper.loop(Looper.java:174)
at android.app.ActivityThread.main(ActivityThread.java:7397)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
2020-10-28 07:05:27.556 14035-14063/? E/Flutter: [ERROR:Flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: The method 'forEach' was called on null.
Receiver: null
Tried calling: forEach(Closure: (dynamic,dynamic) => Set<Set<dynamic>>)
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51)
#1 AmplifyAuthCognitoMethodChannel._throwError (package:amplify_auth_cognito/method_channel_auth_cognito.dart:330)
#2 AmplifyAuthCognitoMethodChannel.signUp (package:amplify_auth_cognito/method_channel_auth_cognito.dart:40)
<asynchronous suspension>
#3 AmplifyAuthCognito.signUp (package:amplify_auth_cognito/amplify_auth_cognito.dart:45)
<asynchronous suspension>
#4 _State._registerUser (package:confab_app/SignUp_Screen.dart:36)
<asynchronous suspension>
这是我的代码:
import 'package:Flutter/material.dart';
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
import 'package:amplify_core/amplify_core.dart';
class SignUpPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _State();
}
class _State extends State<SignUpPage> {
bool isSignUpComplete = false;
TextEditingController nameController = TextEditingController();
TextEditingController passwordController = TextEditingController();
@override
void dispose() {
// Clean up the controller when the widget is removed from the
// widget tree.
nameController.dispose();
passwordController.dispose();
super.dispose();
}
void _registerUser() async
{
try {
Map<String,dynamic> userAttributes = {
"email": nameController.text,// additional attributes as needed
};
SignUpResult res = await Amplify.Auth.signUp(
username: nameController.text.trim(),password: passwordController.text.trim(),options: CognitoSignUpOptions(
userAttributes: userAttributes
)
);
setState(() {
isSignUpComplete = res.isSignUpComplete;
});
navigatetoConfirmPage(context);
} on AuthError catch (e) {
print(e);
}
}
解决方法
问题在于 /users/me
删除了一些 amplify 的文件。
在 R8
文件
proguard_rules.pro
请注意:此错误仅在没有 -keep class com.amazonaws.** { *; }
-keep class com.amplifyframework.** { *; }
标志的发行版 apk 版本中出现。