Пытался войти с помощью firebase на флаттере и ловить ошибку, когда учетные данные не совпадают - PullRequest
0 голосов
/ 24 марта 2020

dynamic result в этом методе должен возвращать 'null' из метода signInWithEmail, но вместо этого возвращает Future. Следовательно, он не go для оператора if.

Вход в класс

                            RaisedButton(
                              shape: RoundedRectangleBorder(
                                borderRadius: BorderRadius.circular(5.0),
                              ),
                              color: Colors.teal,
                              textColor: Colors.white,
                              child: Text("Login"),
                              onPressed: () async {
                                if(_formKey.currentState.validate()){
                                  dynamic result = _auth.signInWithEmail(email, password);
                                  if(result == null){
                                    setState(() {
                                      error = 'Email and Password does not match';
                                    });
                                  }
                                }
                              }
                            ),

Вот метод signInWithEmail. Я попытался напечатать что-то в перехватчике, чтобы убедиться, что он работает, и он должен и должен был вернуть 'null'

метод входа в Firebase.

  Future signInWithEmail(String email, String password) async {
    try{
      AuthResult result = await _auth.signInWithEmailAndPassword(email: email, password: password);
      FirebaseUser user = result.user;
      return _firebaseUser(user);
    } catch(e) {
      print(e.toString());
      return null;
    }
  }

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Попробуйте выполнить следующее:

 Future signInWithEmail(String email, String password) async {
    await _auth.signInWithEmailAndPassword(email: email, password: password).then((result) {
      print(result);
      return result;
   })
    .catchError((error) {
      print("Something went wrong: ${error.message}");
      return error.message;
    });
  }

Используйте catchError (это асинхронный эквивалент блока "catch".), Чтобы иметь возможность обрабатывать ошибки, выдаваемые этим Будущее

Затем внутри onPressed выполните следующее:

 onPressed: () async {
     if(_formKey.currentState.validate()){
      _auth.signInWithEmail(email, password).then((result) {
         if(result.user == null){
          setState(() {
              error = result;
            });
        }
     }
   }

Затем, поскольку метод signInWithEmailAndPassword() возвращает Future<AuthResult>, поэтому проверьте, если result.user равно нулю и присваивает result(error.message) переменной error.

0 голосов
/ 24 марта 2020

Вы можете преобразовать будущее в простое значение, используя метод then. Следующий код очистит вашу идею.

_auth.signInWithEmail(email, password).then((result){    
    if(result == null){
       setState(() {
          error = 'Email and Password does not match';
       });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...