Поведение «maybePop» и «WillPopScope» в отношении первого маршрута при использовании Navigator 2.0

#flutter #navigation #navigator

Вопрос:

У меня есть приложение, которое использует API Navigator 2.0 и сложную иерархию вложенных навигаторов.

Определенное поведение maybePop вызывает у меня некоторые проблемы. Он вызывает willPop , который проверяет, является ли текущий маршрут первым маршрутом Навигатора; если это так, он предотвращает появление pop. Это имеет смысл в мире Navigator 1.0, но в Navigator 2.0 я предоставляю своим навигаторам onPopPage функцию для обработки всплывающих окон, включая специальную логику для делегирования родительскому Навигатору, если открывается первый маршрут текущего навигатора. Поэтому я не хочу предотвращать всплывающие окна, когда у моего навигатора есть только один маршрут; Я все равно хочу onPopPage , чтобы мне позвонили.

Я могу обойти эту проверку «первого маршрута», позвонив pop напрямую вместо maybePop этого . Однако это также позволяет обойти любые WillPopScope onWillPop обратные вызовы, которые мои экраны используют для предотвращения всплывающих окон, когда это может привести к потере данных пользователем.

Есть ли какой-либо способ использовать WillPopScope без отключения всплывающих окон первого маршрута Навигатора? Есть ли какой — то другой способ, которым я должен подумать о вложенных навигаторах, который позволил бы избежать этой проблемы?