Выбор ответа Senior Навигация обновлено
Flutter: вложенные навигаторы
Вопрос
В приложении с нижними вкладками у каждой вкладки свой Navigator. Диалог на весь экран открывается под нижней панелью, а не поверх. Почему и как исправить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Найден навигатор вкладки; нужен rootNavigator: true или корневой ключ. Поиск навигатора идёт вверх от контекста, и во вкладке ближайший это навигатор вкладки, который находится под нижней панелью.
Варианты ответа
- Диалоги во Flutter всегда открываются под нижней панелью, это ограничение фреймворка
- Нужно увеличить
elevationу диалога, чтобы он оказался выше панели навигации - Нужно обернуть приложение во второй
MaterialApp, тогда диалог получит свой слой - Найден навигатор вкладки; нужен
rootNavigator: trueили корневой ключправильный ответ
Разбор
Поиск навигатора идёт вверх от контекста, и во вкладке ближайший это навигатор вкладки, который находится под нижней панелью. Корневой навигатор лежит выше панели. rootNavigator: true или указание корневого ключа в go_router (parentNavigatorKey) открывает маршрут поверх всего. elevation влияет на тень, а второй MaterialApp сломает навигацию и темы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.