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

Ant*_*ers 4 flutter flutter-navigation

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

请求所有权限后,应用程序将移动到下一个屏幕以询问更多信息,然后返回到调用屏幕以完成其任务。

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

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

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

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

这导致我必须采取各种措施来尝试通过此方式阻止应用程序的流程,但这似乎是非常奇怪的行为。

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

非常感谢任何帮助!

Edu*_*rdo 5

我相信Navigator.pushNamed返回一个Future. 因此,也许如果您只是添加await这样的内容:

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

它可以解决这个问题,虽然我没有尝试过。