Выбор ответа Senior Навигация обновлено

Flutter: вложенные навигаторы

Вопрос

В приложении с нижними вкладками у каждой вкладки свой Navigator. Диалог на весь экран открывается под нижней панелью, а не поверх. Почему и как исправить?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Найден навигатор вкладки; нужен rootNavigator: true или корневой ключ. Поиск навигатора идёт вверх от контекста, и во вкладке ближайший это навигатор вкладки, который находится под нижней панелью.

Варианты ответа

  1. Диалоги во Flutter всегда открываются под нижней панелью, это ограничение фреймворка
  2. Нужно увеличить elevation у диалога, чтобы он оказался выше панели навигации
  3. Нужно обернуть приложение во второй MaterialApp, тогда диалог получит свой слой
  4. Найден навигатор вкладки; нужен rootNavigator: true или корневой ключправильный ответ

Разбор

Поиск навигатора идёт вверх от контекста, и во вкладке ближайший это навигатор вкладки, который находится под нижней панелью. Корневой навигатор лежит выше панели. rootNavigator: true или указание корневого ключа в go_router (parentNavigatorKey) открывает маршрут поверх всего. elevation влияет на тень, а второй MaterialApp сломает навигацию и темы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме