如何在flutter中同时弹出2个屏幕

Lal*_*wat 4 dart flutter

我还没有创建任何在屏幕之间导航的路线。我使用 Navigator 进行导航:

Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage()));
Run Code Online (Sandbox Code Playgroud)

我所做的是导航到从主页到成功屏幕的四个屏幕:

主页 => CreatePostScreen => CreateImagePost => SuccessScreen

当我到达成功屏幕时,我想弹出两个屏幕并返回到 CreatePostScreen。我不想写 Navigator.pop(context) 两次。

我尝试使用它,但它会出现黑屏:

Navigator.popUntil(context, (route) => route is CreatePostScreen);
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我想了解 flutter 如何处理小部件导航而不是通过路线名称以及解决方案。

我知道导航器类如何处理路线名称,但我想知道如果我推送小部件及其工作如何解决它。

Gab*_*yer 11

你想要做什么:

Navigator.popUntil(context, (route) => route is CreatePostScreen);
Run Code Online (Sandbox Code Playgroud)

不起作用,因为路线是路线类型,而不是小部件。这会导致所有路由被弹出,因为没有路由满足您的谓词。

您应该做的是使用设置推送您的路线,例如:

Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage(), settings: RouteSettings(name: "/home")));
Run Code Online (Sandbox Code Playgroud)

然后在你的谓词中使用它。例如:

Navigator.popUntil(context, (route) => route.settings.name == "/home");
Run Code Online (Sandbox Code Playgroud)


G H*_*ash 6

希望对你有帮助。您可以使用popUntil导航类的方法。

int count = 0;
Navigator.of(context).popUntil((_) => count++ >= 2);
Run Code Online (Sandbox Code Playgroud)


Pau*_*elo 5

如果你想要pop两个屏幕,你可以使用级联运算符,如下所示:

Navigator.of(context)..pop()..pop();