ПВЗ • С 2019 по 2022 в Сбере – СберМобайл и СберБанк Онлайн • С 2015 по 2018 – спортивное программирование Интересные проекты: Приложение с замером габаритов пластиковых окон через AR для производства в Подмосковье Google Play Instant-приложение для посетителей системы для кафе и ресторанов Приложение системы мониторинга для интернет-провайдера
набор destination • NavHost: Composable-контейнер для отображения destination из графа • NavController: объект для управления переключением destination в NavHost
deeplink • Обязательные: route/{param} или опциональные: route?param={param} • По умолчанию разбираются как строки • Извлекаются из BackStackEntry или SavedStateHandle https://developer.android.com/jetpack/compose/navigation
defaultValue или nullable • Можно задать тип аргумента с помощью type • Следует избегать сложных собственных типов https://developer.android.com/guide/navigation/navigation-pass-data
uri=android- app://androidx.navigation/second// } cannot be found in the navigation graph NavGraph(0x0) startDestination={Destination(0xa211a343) route=first} Значение: “John/Johnny” https://issuetracker.google.com/issues/238336706
NavDeepLinkRequest{ uri=android- app://androidx.navigation/second/ } cannot be found in the navigation graph NavGraph(0x0) startDestination={Destination(0xa211a343) route=first} Значение: “”
ответственностей • Меньше и примитивнее аргумент для второго экрана • Меньше связанности компонентов • Быстрее процесс пересоздания • Предупреждение TransactionTooLargeException
видению Google, навигация относится к UI, а не к бизнес-логике Почему навигация относится к UI? Это позволяет адаптировать навигацию под разные устройства В каком случае навигацию можно отнести к бизнес- логике? Если UI не адаптируется под форм-фактор устройства https://developer.android.com/large-screens/gallery
под форм-фактор • Много сценариев с валидацией данных • 10+ feature-модулей • 1-2 аргумента на destination в среднем • Навигация - через ViewModel • Feature-модули имеют собственные подграфы • Собственная иерархия классов для безопасности типов аргументов Решения
загрузку данных • Делайте строковые аргументы опциональными • Используйте отдельный route для передачи null в строковом аргументе • Инкапсулируйте работу с аргументами • Помните про boolean-флаг для навигации назад • Используйте подграфы • Заранее оценивайте допустимость навигации через ViewModel