登录firebase帐户失败引发异常并停止Flatter应用程序
我正在我的Flatter应用程序中实现电子邮件和密码登录表单,但当我无法登录时(例如,电子邮件格式错误或密码错误),应用程序会引发平台异常,模拟器停止响应 这是我的handle登录函数:登录firebase帐户失败引发异常并停止Flatter应用程序,firebase,dart,firebase-authentication,flutter,Firebase,Dart,Firebase Authentication,Flutter,我正在我的Flatter应用程序中实现电子邮件和密码登录表单,但当我无法登录时(例如,电子邮件格式错误或密码错误),应用程序会引发平台异常,模拟器停止响应 这是我的handle登录函数: Future<FirebaseUser> _handleLogin(String email, String password) async { print(email); print(password); print(_firebaseUser); try {
Future<FirebaseUser> _handleLogin(String email, String password) async {
print(email);
print(password);
print(_firebaseUser);
try {
FirebaseUser user = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
print("done logging in");
print(user.uid);
setState(() {
_firebaseUser = user;
});
print("new user set");
return user;
} catch (err) {
print(err.toString());
return null;
}
}
我是否以错误的方式进行错误处理?在输入错误的密码或格式不正确的电子邮件后,如何捕捉错误并使应用程序继续运行?在输入错误后使用
最终
Future<FirebaseUser> _handleLogin(String email, String password) async {
print(email);
print(password);
print(_firebaseUser);
FirebaseUser user;
try {
user = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
print("done logging in");
print(user.uid);
print("new user set");
return user;
} catch (err) {
print(err.toString());
}
finally {
if(user != null) {
//Log in was successfull!
setState(() {
_firebaseUser = user;
});
}
else {
//Log in was unsuccessfull!
}
}
}
Future\u handleLogin(字符串电子邮件、字符串密码)异步{
打印(电子邮件);
打印(密码);
打印(_firebaseUser);
FirebaseUser用户;
试一试{
user=await\u firebaseAuth.signin带email和password(
电子邮件:电子邮件,密码:密码);
打印(“完成登录”);
打印(user.uid);
打印(“新用户集”);
返回用户;
}捕捉(错误){
打印(err.toString());
}
最后{
如果(用户!=null){
//登录成功!
设置状态(){
_firebaseUser=用户;
});
}
否则{
//登录失败!
}
}
}
看看Dart中的。您还可以使用.then
和.onError
来处理错误。我正在调用SetState()
在屏幕上显示错误消息。下面的示例代码用于注册
void _register() async {
AuthResult result;
await _auth
.createUserWithEmailAndPassword(
email: _emailController.text,
password: _passwordController.text,
)
.then((value) {
result = value;
}, onError: (error) {
_errorDesc = error.message;
setState(() {
_success = false;
});
});
if (result != null) {
setState(() {
_success = true;
_userEmail = result.user.email;
});
}
}
如果您使用的是Visual Studio代码,请取消选中“未捕获异常”选项。这会解决你的问题。将执行catch块内的语句。
void _register() async {
AuthResult result;
await _auth
.createUserWithEmailAndPassword(
email: _emailController.text,
password: _passwordController.text,
)
.then((value) {
result = value;
}, onError: (error) {
_errorDesc = error.message;
setState(() {
_success = false;
});
});
if (result != null) {
setState(() {
_success = true;
_userEmail = result.user.email;
});
}
}