当在异步方法中使用await时,Dart将跳过代码行

时间:2018-10-11 11:15:51

标签: android-studio dart flutter

在我的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
}

这将按预期工作,并会调用navigator方法,但是如果我在signInWithEmailAndPassword方法之前添加 await

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语句中的表达式为false。同样,当在标记的行上设置断点时,调试器也不会停止。在signInWithEmailAndPassword方法上设置断点的工作方式类似于charme。

这是错误还是错误?

1 个答案:

答案 0 :(得分:1)

“如果语句为假”看起来像await _auth.signInWithEmailAndPassword(抛出,并且未报告异常或类似异常。

尝试用try / catch包装代码