下面的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
}