Дарт переходит через строки кода, когда в асинхронном методе используется ожидание
В моем проекте 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