Flutter Navigator 在异步函数中的使用问题

Flutter Navigator use in async function issue

我正在编写一个应用程序,其中登录屏幕要求用户提供各种权限并使用 Facebook 登录。

请求完所有权限后,应用会移至下一个屏幕以询问更多信息,然后 return 转到调用屏幕以完成其任务。

似乎 Navigator.push 在异步函数中没有按预期工作。

void function() async {
<...do something 1...>
Navigator.pushNamed(context, screenName);
<...do something 2...>
}

预期行为 将是 <...do something 1...> 将 运行,然后 Navigator 将调用下一个屏幕,一旦 Navigator.pop(context); 被第二个屏幕调用,应用程序将 return 到第一个屏幕并且执行<...do something 2...>。这是它在应用程序的所有其他屏幕上的工作方式。

实际行为 <...do something 1...> 被调用,然后 <...do something 2...> 然后 在某个时候 导航器被触发。

这导致我不得不做各种尝试来阻止应用程序通过它的流程,但这似乎是非常奇怪的行为。

有没有其他人遇到过这种情况,或者可以给我解决方法?这甚至不涉及函数的 await 部分,说它让我发疯有点轻描淡写。

非常感谢任何帮助!

你可以使用 .then() 函数来实现你想要的,例如, (使用电子邮件和密码登录。)

onPressed: () {
    authHandler.handleSignInEmail(emailController.text, passwordController.text)
    .then((FirebaseUser user) {
         Navigator.push(context, new MaterialPageRoute(builder: (context) => new HomePage()));
   }).catchError((e) => print(e));
} 

我相信Navigator.pushNamedreturns一个Future。因此,也许如果您只是像这样添加 await

void function() async {
<...do something 1...>
await Navigator.pushNamed(context, screenName);
<...do something 2...>
}

可以解决问题,虽然我没试过