Как обрабатывать исключения Firebase Auth при флаттере - PullRequest
0 голосов
/ 13 мая 2019

Пожалуйста, кто-нибудь знает, как перехватить Firebase Auth исключения на флаттере и отобразить их,

Примечание: меня не интересует консоль (catcherror ((e) print (e)) *

Мне нужно что-то более эффективное, например, «пользователь не существует», чтобы я мог затем передать его в строку и отобразить его.

Занимался этим несколько месяцев.

Заранее спасибо

Я попытался заменить print (e) на // errorMessage = e.toString (), а затем передать его в функцию, все усилия были плодотворными

    FirebaseAuth.instance
              .signInWithEmailAndPassword(email: emailController.text, password: passwordController.text)
              .then((FirebaseUser user) {
                _isInAsyncCall=false;
            Navigator.of(context).pushReplacementNamed("/TheNextPage");

          }).catchError((e) {
           // errorMessage=e.toString();
            print(e);
            _showDialog(errorMessage);

            //exceptionNotice();
            //print(e);

я хочу иметь возможность извлечь сообщение об исключении и передать сообщение об исключении в диалоговое окно, которое затем можно отобразить пользователю

1 Ответ

1 голос
/ 13 мая 2019

У плагина firebase auth пока нет надлежащей кроссплатформенной системы кодов ошибок, поэтому вам приходится обрабатывать ошибки для android и ios независимо.

В настоящее время я использую временное исправление из этой проблемы с github: # 20223

Обратите внимание, что исправление temp не предполагает, что оно будет полностью надежным в качестве постоянного решения.

enum authProblems { UserNotFound, PasswordNotValid, NetworkError }

try {
  FirebaseUser user = await FirebaseAuth.instance.signInWithEmailAndPassword(
      email: email,
      password: password,
  );
} catch (e) {
  authProblems errorType;
  if (Platform.isAndroid) {
    switch (e.message) {
      case 'There is no user record corresponding to this identifier. The user may have been deleted.':
        errorType = authProblems.UserNotFound;
        break;
      case 'The password is invalid or the user does not have a password.':
        errorType = authProblems.PasswordNotValid;
        break;
      case 'A network error (such as timeout, interrupted connection or unreachable host) has occurred.':
        errorType = authProblems.NetworkError;
        break;
      // ...
      default:
        print('Case ${e.message} is not yet implemented');
    }
  } else if (Platform.isIOS) {
    switch (e.code) {
      case 'Error 17011':
        errorType = authProblems.UserNotFound;
        break;
      case 'Error 17009':
        errorType = authProblems.PasswordNotValid;
        break;
      case 'Error 17020':
        errorType = authProblems.NetworkError;
        break;
      // ...
      default:
        print('Case ${e.message} is not jet implemented');
    }
  }
  print('The error is $errorType');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...