Flutter NoSuchMethodError:Class';颤振误差';没有实例getter';代码';。接收方:实例';颤振误差';已尝试呼叫:代码)
我一直在尝试GitHub中的一个示例颤振应用程序代码,以便在Firebase上简单地登录和注册用户。每次我在清理构建应用程序后登录或注册时,它都会将我带到主页面,但抛出此异常异常已发生。NoSuchMethodError(NoSuchMethodError:Class'FlatterError'没有实例获取程序'code'。接收方:'FlatterError'的实例尝试调用:code) 我不知道“错误”指的是什么,因为我没有看到任何这样的类。在名为“login register.dart”的文件中出现了两次代码。我附上下面的代码: (注意:在我热加载应用程序并且用户已经登录后,它运行正常,仅在第一次抛出异常)Flutter NoSuchMethodError:Class';颤振误差';没有实例getter';代码';。接收方:实例';颤振误差';已尝试呼叫:代码),flutter,exception,flutter-test,nosuchmethoderror,Flutter,Exception,Flutter Test,Nosuchmethoderror,我一直在尝试GitHub中的一个示例颤振应用程序代码,以便在Firebase上简单地登录和注册用户。每次我在清理构建应用程序后登录或注册时,它都会将我带到主页面,但抛出此异常异常已发生。NoSuchMethodError(NoSuchMethodError:Class'FlatterError'没有实例获取程序'code'。接收方:'FlatterError'的实例尝试调用:code) 我不知道“错误”指的是什么,因为我没有看到任何这样的类。在名为“login register.dart”的文件
您得到的错误不是
FirebaseError
,而是FirebaseError
。这意味着,它不实现code
字段。
你可以简单地说
if(!(error is FirebaseError)){
print(error.message); // this is the actual error that you are getting
}
右下方catch(error){
(在两个文件中)来处理此问题
但是,您似乎遇到了另一个可能需要处理的颤振错误。应该立即将其打印到控制台。您捕获的异常没有
code
属性。该属性仅存在于firebase异常实现中,而不是一般异常类中
如果您预期会出现某种类型的错误,则应显式地捕获该错误并正确处理,并为所有其他错误设置单独的捕获块
这可以通过一个on…catch
块来完成:
试试看{
最终FirebaseUser用户=(等待FirebaseAuth.instance
.使用电子邮件和密码登录(电子邮件:\电子邮件,密码:\密码))。用户;
//最终uid=user.uid;
Navigator.of(context.pushReplacementNamed('/home');
}关于FirebaseAuthException捕获(错误){
...
}捕获(e){
...
}
您在共享代码中调用的方法将抛出
FirebaseAuthException
s,如上面的代码所示。最好是on…catch
,而不是检查错误类型。@Max我按照您的建议做了,现在它给了我这个错误:登录寄存器。dart:227:25:错误:“FirebaseError”不是类型。如果(!(错误为FirebaseError)){^^^^^^^^^^^^^^^^^^^^^^^^^克里斯托弗,你能详细解释一下你在…catch上所说的是什么意思吗?@Newman看到我的答案了。你尝试过任何答案了吗?@Christophemore终于找到了你的答案。谢谢你,并为更新太晚表示歉意。
void _validateRegisterInput() async {
final FormState form = _formKey.currentState;
if (_formKey.currentState.validate()) {
form.save();
_sheetController.setState(() {
_loading = true;
});
try {
final FirebaseUser user = (await FirebaseAuth.instance
.createUserWithEmailAndPassword(
email: _email, password: _password)).user;
UserUpdateInfo userUpdateInfo = new UserUpdateInfo();
userUpdateInfo.displayName = _displayName;
user.updateProfile(userUpdateInfo).then((onValue) {
Navigator.of(context).pushReplacementNamed('/home');
Firestore.instance.collection('users').document().setData(
{'email': _email, 'displayName': _displayName}).then((onValue) {
_sheetController.setState(() {
_loading = false;
});
});
});
} catch (error) {
switch (error.code) {
case "ERROR_EMAIL_ALREADY_IN_USE":
{
_sheetController.setState(() {
errorMsg = "This email is already in use.";
_loading = false;
});
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Container(
child: Text(errorMsg),
),
);
});
}
break;
case "ERROR_WEAK_PASSWORD":
{
_sheetController.setState(() {
errorMsg = "The password must be 6 characters long or more.";
_loading = false;
});
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Container(
child: Text(errorMsg),
),
);
});
}
break;
default:
{
_sheetController.setState(() {
errorMsg = "";
});
}
}
}
} else {
setState(() {
_autoValidate = true;
});
}
}
if(!(error is FirebaseError)){
print(error.message); // this is the actual error that you are getting
}