Флаттер хлопает, пока не достигнет модального нижнего листа

Во 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....

Другие вопросы по тегам