Навигация в Compose-приложении
Вопрос
Расскажи, как ты устраиваешь навигацию в Compose-приложении: маршруты, аргументы, back stack, модули.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.