如何处理 Flutter 上的 Firebase 身份验证异常
请问有谁知道如何在 flutter 上捕获 firebase Auth 异常并显示它们?
Please does anyone know how to catch firebase Auth exceptions on flutter and display them?
注意:我对控制台不感兴趣 (catcherror((e) print(e))
Note: I am not interested in the console (catcherror((e) print(e))
我需要一些更有效的东西,例如用户不存在"这样我就可以将它传递给一个字符串并显示它.
I need something that is more effective, e.g " user doesn't exist" So that I can then pass it to a string and display it.
几个月来一直在处理这个问题.
Been dealing with this for months.
提前致谢.
我尝试用//errorMessage=e.toString(); 替换 print(e);然后传递给一个函数,所有的努力都是徒劳的.
I have tried replacing print(e) with // errorMessage=e.toString(); and then passing it to a function, all efforts have been futile.
FirebaseAuth.instance
.signInWithEmailAndPassword(email: emailController.text, password: passwordController.text)
.then((FirebaseUser user) {
_isInAsyncCall=false;
Navigator.of(context).pushReplacementNamed("/TheNextPage");
}).catchError((e) {
// errorMessage=e.toString();
print(e);
_showDialog(errorMessage);
//exceptionNotice();
//print(e);
我希望能够提取异常消息并将异常消息传递给一个对话框,然后我可以向用户显示该对话框.
I want to be able to extract the exception message and pass the exception message to a dialog that I can then display to the user.
(21/02/20) 这个答案很旧,其他答案包含跨平台解决方案,所以你应该先看看他们的这是一种后备解决方案.
firebase auth 插件还没有真正的跨平台错误代码系统,所以你必须独立处理 android 和 ios 的错误.
The firebase auth plugin doesn't really have a proper cross-platform error code system yet so you have to handle errors for android and ios independently.
我目前正在使用这个 github 问题的临时修复:#20223
I'm currently using the temporary fix from this github issue: #20223
请注意,因为它是一个临时修复程序,所以不要指望它作为永久解决方案是完全可靠的.
Do note since its a temp fix, don't expect it to be fully reliable as a permanent solution.
enum authProblems { UserNotFound, PasswordNotValid, NetworkError }
try {
FirebaseUser user = await FirebaseAuth.instance.signInWithEmailAndPassword(
email: email,
password: password,
);
} catch (e) {
authProblems errorType;
if (Platform.isAndroid) {
switch (e.message) {
case 'There is no user record corresponding to this identifier. The user may have been deleted.':
errorType = authProblems.UserNotFound;
break;
case 'The password is invalid or the user does not have a password.':
errorType = authProblems.PasswordNotValid;
break;
case 'A network error (such as timeout, interrupted connection or unreachable host) has occurred.':
errorType = authProblems.NetworkError;
break;
// ...
default:
print('Case ${e.message} is not yet implemented');
}
} else if (Platform.isIOS) {
switch (e.code) {
case 'Error 17011':
errorType = authProblems.UserNotFound;
break;
case 'Error 17009':
errorType = authProblems.PasswordNotValid;
break;
case 'Error 17020':
errorType = authProblems.NetworkError;
break;
// ...
default:
print('Case ${e.message} is not yet implemented');
}
}
print('The error is $errorType');
}