【问题标题】:My error isn't caught even with try catch即使使用 try catch 也没有发现我的错误
【发布时间】:2021-06-10 18:45:44
【问题描述】:

我正在使用 Flutter 和 Firebase 开发移动应用。

当我尝试使用现有电子邮件进行注册时,我总是收到未处理的异常,尽管我已用try catch 包围了关键代码。

我对其进行了测试,并且身份验证方法工作正常。但是,在另一种方法 _submit 中,我试图捕获自己的 HTTPException。 (该类实现了异常。)

submit 中的 catch 块什么都不做,甚至对任何异常都没有反应。有人可以解决我的问题吗?

class Auth with ChangeNotifier{

Future<void> registrieren(String email, String passwort) async {
    authenticate(email, passwort, 'signUp');
}


Future<void> authenticate(
      String email, String passwort, String urlSegment) async {
    final url =
        'https://identitytoolkit.googleapis.com/v1/accounts:$urlSegment?key=ASASDD';
    try {
      final response = await http.post(url,
          body: json.encode({
            'password': passwort,
            'email': email,
            'returnSecureToken': true
          }));
      final responseData = json.decode(response.body);
      if (responseData['error'] != null) {
        throw HTTPException(responseData['error']['message']);
      }
      _token = responseData['idToken'];
      _userID = responseData['localId'];
      _expiryDate = DateTime.now().add(
        Duration(
          seconds: int.parse(responseData['expiresIn']),
        ),
      );
    } catch (error) {
      print(error);
    }
    _autologout();
    notifyListeners();
}

并且该方法在另一个类中的这个方法中执行。

Future<void> _submit() async {
    if (!_formKey.currentState.validate()) {
      // Invalid!
      return;
    }
    _formKey.currentState.save();
    setState(() {
      _isLoading = true;
    });
    try {
      await Provider.of<Auth>(context, listen: false).registrieren(
        _authData['email'],
        _authData['passwort'],
      );
      print("Registrierung");
    } on HTTPException catch (error) {
      print("Gefangen");
      var message = "Authentifizierung fehlgeschlagen";
      if (error.toString().contains('EMAIL_EXISTS')) {
        message = "E-Mail Adresse wird bereits verwendet";
      }
      if (error.toString().contains('INVALID_EMAIL')) {
        message = "Ungültige E-Mail Adresse";
      }
      if (error.toString().contains('WEAK_PASSWORD')) {
        message = "Schwaches Passwort";
      }
      if (error.toString().contains('EMAIL_NOT_FOUND')) {
        message = "E-Mail Adresse nicht gefunden";
      }
      if (error.toString().contains('INVALID_PASSWORD')) {
        message = "Falsches Passwort";
      }
      _showError(message);
    } catch (error) {}

    if (_isLoading) {
      CircularProgressIndicator();
    }
    setState(() {
      _isLoading = false;
    });
  }

【问题讨论】:

    标签: firebase flutter authentication exception


    【解决方案1】:

    你不是在这里等待验证调用:

    Future<void> registrieren(String email, String passwort) async {
        authenticate(email, passwort, 'signUp');
    }
    

    所以此函数在返回注册函数之前不会等待身份验证完成,因此它无法捕获您的异常。

    所以要修复它,添加等待或 simpy 删除异步并直接从身份验证返回未来

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多