0

在 Flutter 中,我需要弹出路由堆栈,直到到达模态底部表,但我不知道如何使用Navigator.popUntil来做到这一点。

场景是这样的:我有一个设置屏幕(让我们称之为SettingsScreen),您可以从 main 以多种不同的方式访问它HomeScreen,从而在导航器中生成不同的路由堆栈。因此,例如堆栈可能是:

HomeScreen -> ScreenA -> SettingsScreen

或者

HomeScreen -> ScreenA -> ScreenB -> SettingsScreen

现在我需要一种弹出方式,直到我到达 HomeScreen。通常我会使用:

Navigator.popUntil(
   context,
   (Route<dynamic> route) => route.settings.name == "HomeScreen"
);

但这里有一个问题:有时会在 中打开一个模态底页HomeScreen,我需要它保持打开状态。由于模态底部工作表是堆栈上的路由,因此如果工作表打开,则堆栈可能是例如:

HomeScreen -> _ModalBottomSheetRoute<dynamic> -> ScreenA -> ScreenB -> SettingsScreen

所以弹出直到我点击HomeScreen导致模态底部表弹出,然后关闭它。所以,我需要弹出直到我到达HomeScreen OR直到我到达_ModalBottomSheetRoute<dynamic>.

不幸的是,底部工作表路由的设置中没有名称或参数,并且运行时类型_ModalBottomSheetRoute<dynamic>是私有的,所以我什至不能将其用作测试。Navigator.popUntil那么,当它到达模态底部表时,如何更改逻辑以停止?还是有另一种方法可以做到这一点?

4

1 回答 1

0

将路线设置传递给 showModalBottomSheet(... routeSettings: RouteSettings(name: 'MyModalBottomSheet')) 怎么样?然后,您可以测试 popupUntil... 中给出的名称。

于 2021-04-04T07:50:20.640 回答