Firebase FirabaseAuth可以';不要在颤振中捕捉异常
我正在为我的应用程序设计一个注册屏幕。我实现了firebase,可以对用户进行身份验证,并成功地将一些用户信息保存到firebase数据库中。我开始检查用户名字段是否为空。但firebase有时无法捕获有关格式错误的电子邮件地址的异常。它适用于密码(最小6个字符),但有时也适用于电子邮件。我找不到任何解决办法。这是我的密码。有人有主意吗Firebase FirabaseAuth可以';不要在颤振中捕捉异常,firebase,flutter,dart,firebase-authentication,Firebase,Flutter,Dart,Firebase Authentication,我正在为我的应用程序设计一个注册屏幕。我实现了firebase,可以对用户进行身份验证,并成功地将一些用户信息保存到firebase数据库中。我开始检查用户名字段是否为空。但firebase有时无法捕获有关格式错误的电子邮件地址的异常。它适用于密码(最小6个字符),但有时也适用于电子邮件。我找不到任何解决办法。这是我的密码。有人有主意吗 onPressed: () async { if (validateName(userName) && validateEmail(e
onPressed: () async {
if (validateName(userName) && validateEmail(email)) {
setState(() {
showSpinner = true;
});
try {
final newUser =
await _auth.createUserWithEmailAndPassword(
email: email, password: password);
if (newUser != null) {
//get name and update user profile
UserUpdateInfo userUpdateInfo = UserUpdateInfo();
userUpdateInfo.displayName = userName;
FirebaseUser user = await _auth.currentUser();
await user.updateProfile(userUpdateInfo);
await user.reload();
Navigator.pushNamed(context, NavigationScreen.id);
}
setState(() {
showSpinner = false;
});
} on PlatformException catch (e) {
setState(() {
showSpinner = false;
});
Fluttertoast.showToast(
msg: e.message,
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 3,
backgroundColor: Colors.white,
textColor: Colors.red,
fontSize: 18.0,
);
}
} else {
Fluttertoast.showToast(
msg: 'You must ente all information',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 3,
backgroundColor: Colors.white,
textColor: Colors.red,
fontSize: 18.0,
);
}
},
//name TextField validation
bool validateName(String name) {
if (name != null && name.length > 2) {
return true;
} else {
return false;
}
}
//email TextField validation
bool validateEmail(String email) {
if (email != null) {
return true;
} else {
return false;
}
}
createUserWithEmailAndPassword
返回一个未来,它将处理这个未来发出的错误,然后showDialog
将显示一个包含错误的对话框 这是一个变通办法,谢谢。但是我仍然不明白为什么它不能捕获firebaseauth异常。有错误吗?没有,但是createuserwithEmailAndPassword在使用异步代码时是异步的,最好调用catcherror,它基本上类似于catch,但对于异步代码,所以您的意思是不要使用try catch,而是对异步代码使用catcherror?如果是异步操作,是的,因为catcherror将捕获所有内容
final newUser = await _auth.createUserWithEmailAndPassword(email: email, password: password).catchError((err) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("Error"),
content: Text(err.message),
actions: [
FlatButton(
child: Text("Ok"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
});