FirabaseAuth не может поймать исключение в Flutter - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю над экраном регистрации для моего приложения. Я реализовал firebase и могу аутентифицировать пользователя и успешно сохранить некоторую информацию о пользователе в базе данных firebase. Я начал проверять, является ли поле userName пустым или нет. Но Firebase иногда не может поймать исключение о плохо отформатированном адресе электронной почты. Он работает для пароля (минимум 6 символов) каждый раз, но иногда работает для электронной почты. Я не могу найти никакого решения. Вот мой код Есть ли у кого идея?

 onPressed: () async {
    if (validateName(userName) && validateEmail(email)) {
      setState(() {
        showSpinner = true;
      });
      try {
        final newUser =
            await _auth.createUserWithEmailAndPassword(
                email: email, password: password);
        if (newUser != null) {
          //get name and update user profile
          UserUpdateInfo userUpdateInfo = UserUpdateInfo();
          userUpdateInfo.displayName = userName;
          FirebaseUser user = await _auth.currentUser();
          await user.updateProfile(userUpdateInfo);
          await user.reload();

          Navigator.pushNamed(context, NavigationScreen.id);
        }
        setState(() {
          showSpinner = false;
        });
      } on PlatformException catch (e) {
        setState(() {
          showSpinner = false;
        });
        Fluttertoast.showToast(
          msg: e.message,
          toastLength: Toast.LENGTH_SHORT,
          gravity: ToastGravity.CENTER,
          timeInSecForIosWeb: 3,
          backgroundColor: Colors.white,
          textColor: Colors.red,
          fontSize: 18.0,
        );
      }
    } else {
      Fluttertoast.showToast(
        msg: 'You must ente all information',
        toastLength: Toast.LENGTH_SHORT,
        gravity: ToastGravity.CENTER,
        timeInSecForIosWeb: 3,
        backgroundColor: Colors.white,
        textColor: Colors.red,
        fontSize: 18.0,
      );
    }
  },

//name TextField validation
  bool validateName(String name) {
    if (name != null && name.length > 2) {
      return true;
    } else {
      return false;
    }
  }

  //email TextField validation
  bool validateEmail(String email) {
    if (email != null) {
      return true;
    } else {
      return false;
    }
  }

1 Ответ

1 голос
/ 29 апреля 2020

createUserWithEmailAndPassword возвращает Future<AuthResult>, чтобы поймать ошибку, вы можете сделать следующее:

final newUser = await _auth.createUserWithEmailAndPassword(email: email, password: password).catchError((err) {
      showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text("Error"),
              content: Text(err.message),
              actions: [
                FlatButton(
                  child: Text("Ok"),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                )
              ],
            );
          });

Используя catchError, он обработает ошибки, выданные этим Future , а затем showDialog отобразит диалоговое окно с ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...