Во Flutter мне нужно выталкивать стек маршрутов, пока я не дойду до модального нижнего листа, но я не могу понять, как это сделать, используя Navigator.popUntil.
Сценарий таков: у меня есть экран настроек (назовем его SettingsScreen
), к которому вы можете добраться разными способами из основного HomeScreen
, что приводит к другому стеку маршрутов в навигаторе. Так, например, стек может быть:
HomeScreen -> ScreenA -> SettingsScreen
or
HomeScreen -> ScreenA -> ScreenB -> SettingsScreen
Теперь мне нужен способ всплывать, пока я не дойду до HomeScreen. Обычно я бы добился этого, используя:
Navigator.popUntil(
context,
(Route<dynamic> route) => route.settings.name == "HomeScreen"
);
Но вот загвоздка: иногда в HomeScreen
открывается модальный нижний лист, и мне нужно, чтобы он оставался открытым. Поскольку модальный нижний лист является маршрутом в стопке, если лист открыт, стопка может быть, например:
HomeScreen -> _ModalBottomSheetRoute<dynamic> -> ScreenA -> ScreenB -> SettingsScreen
Таким образом, нажатие до тех пор, пока я не нажму HomeScreen
, вызывает всплытие модального нижнего листа, который закрывает его. Итак, мне нужно нажимать, пока я не дойду до HomeScreen
ИЛИ, пока не дойду до _ModalBottomSheetRoute<dynamic>
.
К сожалению, в настройках маршрута нижнего листа нет имени или аргументов, а тип среды выполнения _ModalBottomSheetRoute<dynamic>
является частным, поэтому я даже не могу использовать его в качестве теста. Итак, как мне изменить логику в Navigator.popUntil
, чтобы она остановилась, когда она дойдет до модального нижнего листа? Или есть другой способ сделать это?