下面的try-catch异常处理有没有错误?
Is there any error in the try-catch exception handling below?
当用户在通过 firebase 验证后尝试登录时,我试图处理异常。但是这个 try-catch 在我的 flutter 项目中不起作用。
谁能告诉我哪里出错了?我在下面附上了我的代码。
提前致谢。
class AuthService {
//Creating an instance of firebase.
final auth.FirebaseAuth _firebaseAuth = auth.FirebaseAuth.instance;
User? _userFromFirebase(auth.User? user) {
if (user == null) {
return null;
}
return User(user.uid, user.email);
}
Stream<User?>? get user {
return _firebaseAuth.authStateChanges().map(_userFromFirebase);
}
Future<User?> signInWithEmailAndPassword(
String email,
String password,
) async {
try {
final credential = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
return _userFromFirebase(credential.user);
} on Exception catch (_, e) {
//I want to display a toast message if the login fails here.
print(e);
}
}
Future<void> signOut() async {
return await _firebaseAuth.signOut();
}
}
在您的 try-catch 块中,您正在捕获 Exception
类型,但 Firebase 身份验证有其自己的异常类型,FirebaseAuthException
。
有关此特定登录的可能错误代码,请参阅 here,但还有其他错误代码。
检查以下代码:
try {
final credential = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
return _userFromFirebase(credential.user);
} on FirebaseAuthException catch (e) {
// here you will have the different error codes in `e.code`
// for example `invalid-email` or `wrong-password`
}
如何处理这些错误取决于您。例如,您可以 return 错误代码并从调用此函数的地方处理它(如 h8moss 在评论中建议的那样)。
请记住,除了 FirebaseAuthException
之外,还有其他可能导致登录失败的原因。例如,网络连接可能已关闭。因此,捕获其他错误的更完整解决方案如下:
try {
// sign in
} on FirebaseAuthException catch (e) {
// handle Firebase Authentication exceptions
} catch (e) {
// handle other exceptions
}
当用户在通过 firebase 验证后尝试登录时,我试图处理异常。但是这个 try-catch 在我的 flutter 项目中不起作用。
谁能告诉我哪里出错了?我在下面附上了我的代码。
提前致谢。
class AuthService {
//Creating an instance of firebase.
final auth.FirebaseAuth _firebaseAuth = auth.FirebaseAuth.instance;
User? _userFromFirebase(auth.User? user) {
if (user == null) {
return null;
}
return User(user.uid, user.email);
}
Stream<User?>? get user {
return _firebaseAuth.authStateChanges().map(_userFromFirebase);
}
Future<User?> signInWithEmailAndPassword(
String email,
String password,
) async {
try {
final credential = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
return _userFromFirebase(credential.user);
} on Exception catch (_, e) {
//I want to display a toast message if the login fails here.
print(e);
}
}
Future<void> signOut() async {
return await _firebaseAuth.signOut();
}
}
在您的 try-catch 块中,您正在捕获 Exception
类型,但 Firebase 身份验证有其自己的异常类型,FirebaseAuthException
。
有关此特定登录的可能错误代码,请参阅 here,但还有其他错误代码。
检查以下代码:
try {
final credential = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
return _userFromFirebase(credential.user);
} on FirebaseAuthException catch (e) {
// here you will have the different error codes in `e.code`
// for example `invalid-email` or `wrong-password`
}
如何处理这些错误取决于您。例如,您可以 return 错误代码并从调用此函数的地方处理它(如 h8moss 在评论中建议的那样)。
请记住,除了 FirebaseAuthException
之外,还有其他可能导致登录失败的原因。例如,网络连接可能已关闭。因此,捕获其他错误的更完整解决方案如下:
try {
// sign in
} on FirebaseAuthException catch (e) {
// handle Firebase Authentication exceptions
} catch (e) {
// handle other exceptions
}