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

В моем проекте Flutter у меня есть следующий код:

if(await model.login(loginMailTextController.text, 
   loginPasswordTextController.text)){
   Navigator.of(context).pushReplacementNamed("/main");
}

Этот код вызывает эту функцию в моей модели:

Future<bool> login(String mail, String password) async {
   _auth.signInWithEmailAndPassword(email: mail, password: password);
   return true; //Makes no sense, only for testing
}

Который работает, как ожидалось, и метод навигатора вызывается, но если я добавлю ожидание перед signInWithEmailAndPassword метод:

Future<bool> login(String mail, String password) async {
   await _auth.signInWithEmailAndPassword(
   email: mail, password: password);
   return true; //Debugger won't stop there when a breakpoint is set
}

Тогда выражение в операторе if ложно. Также, когда на отмеченной строке установлена ​​точка останова, отладчик не останавливается. Установка точки останова на signInWithEmailAndPassword метод работает как шарм.

Это ошибка или я ошибаюсь?

1 ответ

Решение

"если утверждение ложно" выглядит await _auth.signInWithEmailAndPassword( броски и исключение не сообщается или подобное.

Попробуйте обернуть код с помощью try/catch

Другие вопросы по тегам