Ответ вслух Middle Навигация обновлено

Навигация в Compose-приложении

Вопрос

Расскажи, как ты устраиваешь навигацию в Compose-приложении: маршруты, аргументы, back stack, модули.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Делаю одну Activity с NavHost. Маршруты описываю @Serializable-классами, это типобезопасная навигация Navigation 2.8+: аргументы проверяет компилятор, экран и ViewModel получают их через toRoute.

Что должно прозвучать в ответе

  • Single Activity и NavHost

  • Типобезопасные маршруты: Serializable-классы, toRoute

  • Передаю id, данные грузит экран

  • Опции navigate: popUpTo, launchSingleTop, saveState/restoreState

  • ViewModel привязана к NavBackStackEntry или графу

  • Модули экспортируют расширения NavGraphBuilder, связывает app

Что могут спросить следом

  • Как вернуть результат на предыдущий экран?
  • Как протестировать навигацию?
  • Что изменилось в Navigation 3?

Разбор

Делаю одну Activity с NavHost. Маршруты описываю @Serializable-классами, это типобезопасная навигация Navigation 2.8+: аргументы проверяет компилятор, экран и ViewModel получают их через toRoute. В аргументах передаю только идентификаторы, данные экран берёт из репозитория. Стек контролирую опциями navigate: после входа popUpTo с inclusive, чтобы «Назад» не вело на логин, launchSingleTop против дублей, для нижней навигации saveState и restoreState, чтобы каждая вкладка помнила свой стек. ViewModel экрана живёт, пока его запись в стеке, а для многошаговых потоков вроде оформления заказа привязываю общую ViewModel к вложенному графу. NavController не передаю во ViewModel: она отдаёт событие или состояние, а переход делает UI. В многомодульном проекте каждая фича экспортирует расширение NavGraphBuilder и принимает колбэки переходов, связывает всё модуль app.

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

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

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