Flutter // 我无法捕获异常(Firebase 应用程序)

时间:2021-01-20 16:13:37

标签: firebase flutter dart firebase-authentication

我有一个大问题,但我知道它对人类来说很小。我正在使用 Flutter 在 Firebase 上尝试电子邮件和密码身份验证。 但我总是有一些例外。 (PlatformException 和 FirebaseAuthExceptions)。 `

void signInUser(String email, String password) async {
    try {
      if (_auth.currentUser == null) {
        User _oturumAcanUser = (await _auth.signInWithEmailAndPassword(
                email: email, password: password))
            .user;
        Get.to(HomeScreen());
        Get.snackbar("Oturum açıldı", "message");
      } else {
        Get.snackbar("Oturum zaten açık", "message");
        Get.to(HomeScreen());
      }
    } on PlatformException catch (e) {
      _error = e.message;
      Get.snackbar("başlık", e.message);
      throw e;
    } catch (e) {
      _error = e.toString();
      Get.snackbar("başlık", e.message);
    }
  }

`

另外,我正在使用 getX 包。我尝试了所有方法,但无法捕获异常。当我从 UI 调用此方法时,SDK (VSCode) 暂停调试应用程序并在红色警报中显示异常。

我阅读了很多关于这种情况的文档,但我找不到解决方案。

2 个答案:

答案 0 :(得分:1)

void signInUser(String email, String password) async {
try {
  if (_auth.currentUser == null) {
    User _oturumAcanUser = (await _auth.signInWithEmailAndPassword(
            email: email, password: password))
        .user;
    Get.off(HomeScreen());
    Get.snackbar("Oturum açıldı", "message", backgroundColor: Colors.teal);
  } else {
  
    Get.off(HomeScreen());
  }
} on FirebaseAuthException catch (e) {
  _error = e.code;
  Get.snackbar("Giriş Yapılırken Hata",
      "Giriş ypaılırken hata ile karşılaşıldı. Kod: ${e.code}",
      snackPosition: SnackPosition.BOTTOM, snackStyle: SnackStyle.FLOATING);
  throw e;
} catch (e) {
  _error = e.toString();
  Get.snackbar("Hata",
      "Sunucu beklenmedik bir hata ile karşılaştı. Detaylı bilgi: ${e.message}");
}

我只是做了这样的事情并解决了我的问题。我仍然不明白不同的抓东西在哪里。感谢所有帮助。 <3

答案 1 :(得分:0)

好的,您可以尝试在 catch 之后使用 signInWithEmailAndPassword 方法,如下所示:

void signInUser(String email, String password) async {
    try {
      if (_auth.currentUser == null) {
        User _oturumAcanUser = (await _auth.signInWithEmailAndPassword(
                email: email, password: password)
             // Here, you can handle the error!
             .catchError((error) { 
               print("The error message is: ${error.message}");
               Get.snackbar("başlık", error.message);
            })
            .user;
        Get.to(HomeScreen());
        Get.snackbar("Oturum açıldı", "message");
      } else {
        Get.snackbar("Oturum zaten açık", "message");
        Get.to(HomeScreen());
      }
    } on PlatformException catch (e) {
      _error = e.message;
      Get.snackbar("başlık", e.message);
      throw e;
    } catch (e) {
      _error = e.toString();
      Get.snackbar("başlık", e.message);
    }
  }