Вспышка флаттера, пока не достигнет модального нижнего листа

Во 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, чтобы она остановилась, когда она дойдет до модального нижнего листа? Или есть другой способ сделать это?


person James Allen    schedule 02.12.2020    source источник


Ответы (1)


как насчет передачи настроек маршрута в showModalBottomSheet (... routeSettings: RouteSettings (name: 'MyModalBottomSheet'))? Затем вы можете проверить имя, указанное в popupUntil ....

person tom    schedule 04.04.2021