Флаттер хлопает, пока не достигнет модального нижнего листа
Во Flutter мне нужно выталкивать стек маршрутов, пока я не дойду до модального нижнего листа, но я не могу понять, как это сделать с помощью Navigator.popUntil.
Сценарий такой: у меня есть экран настроек (назовем его
SettingsScreen
), к которому вы можете получить доступ разными способами из основного
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
ИЛИ пока я не доберусь до
_ModalBottomSheetRoute<dynamic>
.
К сожалению, в настройках маршрута нижнего листа нет имени или аргументов, а тип времени выполнения
_ModalBottomSheetRoute<dynamic>
является частным, поэтому я не могу использовать его даже в качестве теста. Итак, как мне изменить логику в
Navigator.popUntil
остановиться, когда он дойдет до модального нижнего листа? Или есть другой способ сделать это?
1 ответ
как насчет передачи настроек маршрута в showModalBottomSheet(... routeSettings: RouteSettings(name: 'MyModalBottomSheet'))? Затем вы можете проверить имя, указанное в popupUntil....