颤振身份验证异常处理

时间:2021-01-14 07:26:30

标签: flutter authentication

我有以下代码用于创建用户并返回翻译后的错误消息

我知道这是一个老问题,但我仍然在努力解决它。我遵循了 Corentin Houdayer 最多投票的方法,但它对我不起作用。我的 Try Catch 没有捕获错误,而是进入 Platformexception。

onPressed: () async {
                    try {
                      await auth.createUserWithEmailAndPassword(
                          email: _email, password: _password);
                    } catch (error) {
                      _error = true;
                      switch (error.code) {
                        case ("email-already-in-use"):
                          _emessage =
                              "Du hast bereits einen Account mit der angegebenen Email-Adresse.";
                          break;
                        case ("invalid-email"):
                          _emessage = "Ungültige Email-Adresse.";
                          break;
                        case ("operation-not-allowed"):
                          _emessage =
                              "Ein unerwarteter Fehler ist aufgetreten. Bitte versuche es zu einem späteren Zeitpunkt nocheinmal.";
                          break;
                        case ("weak-password"):
                          _emessage = "Passwort zu kurz";
                          break;
                        default:
                          _emessage =
                              "Ein unerwarteter Fehler ist aufgetreten. Bitte versuche es zu einem späteren Zeitpunkt nocheinmal.";
                      }
                    }

我面临的问题是,我的 try catch 实际上不是捕获错误,而是进入 Platformexception。我的 catch 块甚至没有执行。我在这里做错了什么?提前致谢。

3 个答案:

答案 0 :(得分:1)

代替 } catch (error) { 尝试使用:

          } on auth.FirebaseAuthException catch (e) {
            print("FirebaseAuthException code: ${e.code}");
          } on PlatformException catch (e) {
            print("PlatformException code: ${e.code}");
          }

看看他们有没有抓到什么。还要检查 catch 是否真的在等待 .create... 调用完成(但不明白为什么不会)。

如果仍然不高兴,请尝试用 .catchError() 之后的 auth.createUserWithEmailAndPassword(email: _email, password: _password) 语句替换 try catch 代码

答案 1 :(得分:1)

通过查看代码,我猜您正在使用 firebase 进行此操作。根据我的知识 firebase,如果发生错误,它本身会返回错误。此外,您可以声明一个函数并进行登录,而不是使用这样的代码块。这可能会有所帮助,因为我在使用这样的代码时没有遇到任何错误:

    const validationSchema= Yup.object({
      custom_field: Yup.string().test(
        "match",
        "Custom validation enabled",
        function () {
          if (!shouldFormValidate) return true;
          return false;
        }
      )
    });

我建议您参考 The Net Ninja youtube 频道,尤其是 firebase 应用程序构建教程的播放列表。您可以获得链接 here。我建议这个原因是我从同一个播放列表中学到的。希望这有帮助

答案 2 :(得分:0)

谢谢大家的帮助。我刚刚发现了这个: https://github.com/FirebaseExtended/flutterfire/issues/3475

似乎是 VSCode 问题。如果我在 Vscode 调试器上按继续,则会按预期处理异常。