Шпаргалка по Jetpack Navigation 3 от Google которую вы ждали
Знакомая ситуация? Вы делаете очередное Android-приложение, и снова встает вопрос навигации. Базовые переходы между экранами — это просто. Но что, если нужна поддержка планшетов, условная логика (привет, экраны логина!), или, не дай бог, несколько бэкстеков, как в популярных соцсетях? Обычно это заканчивается часами гугления, изучением разрозненных статей и экспериментами. Кажется, в Google услышали наши молитвы и выкатили официальную «поваренную книгу» — репозиторий nav3-recipes.
Давайте начистоту, это не очередная библиотека, которую нужно тащить в проект. Это коллекция готовых, изолированных примеров для Jetpack Navigation 3, созданная самой командой Android. По сути, это официальная шпаргалка, которая отвечает на вопрос «Как сделать X?» самым правильным и современным способом.
Что это за «рецепты» и зачем они мне?
Представьте, что вы пришли на кухню, чтобы приготовить сложное блюдо. Вместо того чтобы читать толстенную энциклопедию о химии продуктов, вы открываете рецепт: «возьми то, смешай с этим, готовь столько-то». Репозиторий nav3-recipes работает по тому же принципу.
Каждый «рецепт» — это отдельный, минималистичный пример, решающий одну конкретную задачу. Никаких сложных абстракций, только код, который можно взять, понять и адаптировать под свой проект. Что особенно ценно — авторы обещают, что самые удачные и востребованные паттерны из этих рецептов со временем могут стать частью самой библиотеки Jetpack Navigation. Так что, изучая этот репозиторий, вы, можно сказать, заглядываете в будущее.
Давайте посмотрим, какие «блюда» нам предлагают.
Как насчет поддержки планшетов и складных устройств?
Адаптивные интерфейсы — уже не тренд, а необходимость. В nav3-recipes этому посвящен целый раздел, и он прекрасен.
- List-Detail Scene: Классический сценарий «список слева, детали справа». Репозиторий показывает, как реализовать такой кастомный layout с помощью
SceneиSceneStrategy. Анимация переходов между состояниями выглядит очень плавно. - Two Pane Scene: Еще один вариант для больших экранов, позволяющий элегантно разместить два блока информации.
- Material Adaptive Layouts: Если не хочется писать кастомную логику, можно взять готовые адаптивные компоненты из
material3-adaptive-navigation. Рецепты показывают, как их правильно готовить.
Вот, например, как выглядит кастомный List-Detail layout в действии:

Решение вечных проблем: множественные бэкстеки и условные переходы
Есть две задачи, на которых спотыкался, наверное, каждый второй Android-разработчик.
- Multiple back stacks: Помните боль с реализацией вкладок, как в Instagram, где у каждой свой независимый стек экранов? Когда вы переключаетесь между вкладками, состояние каждой из них сохраняется. В
nav3-recipesесть элегантный пример, который показывает, как это сделать, да еще и с сохранением состояния после смены конфигурации или смерти процесса. - Conditional navigation: «Если пользователь не залогинен — показать экран входа, иначе — главный экран». Этот, казалось бы, простой сценарий часто превращается в запутанный код. Рецепт
conditionalдемонстрирует, как чисто и декларативно переключать целые графы навигации в зависимости от условия. Идеально для онбординга или авторизации.
Архитектура и внедрение зависимостей
Как правильно вписать навигацию в архитектуру большого приложения? Как не превратить навигационный код в монолитный клубок зависимостей? Ответы тоже есть.
Репозиторий содержит примеры по-настоящему модульного подхода, где навигационный код полностью отделен от фичей. Причем есть варианты на любой вкус:
- Hilt: для поклонников стандартного решения от Google.
- Koin: для тех, кто предпочитает более легковесный и прагматичный DI-фреймворк.
Кроме того, есть отдельные рецепты, посвященные передаче навигационных аргументов во ViewModel, в том числе и с использованием Hilt и Koin. Это одна из тех мелочей, которая часто вызывает вопросы у новичков.
Что еще интересного?
Конечно, это далеко не все. В «поваренной книге» вы также найдете рецепты для:
- Кастомных анимаций: как для всего графа, так и для отдельных переходов.
- Deep Links: как правильно парсить URL из Intent в навигационный ключ.
- Dialogs и BottomSheets: как сделать их полноценными участниками навигации.
- Возвращение результата: два подхода к передаче данных на предыдущий экран — через
Eventsи черезState.
Как этим пользоваться?
Проще некуда. Клонируете репозиторий, открываете в Android Studio и находите нужный пакет. Каждый рецепт находится в своей директории (например, com.example.nav3recipes.multiplestacks) и имеет собственную Activity для запуска. Ничего лишнего, только код по теме.
Это идеальная песочница для экспериментов и лучший источник вдохновения, когда вы не уверены, как лучше подойти к той или иной навигационной задаче.
Выводы: кому и зачем это нужно?
Для джуниоров и мидлов: это просто клад. Вместо того чтобы собирать информацию по крупицам, вы получаете лучшие практики напрямую от создателей фреймворка. Это отличный способ научиться делать «правильно» с самого начала.
Для сеньоров и архитекторов: это возможность подсмотреть, как Google видит решение сложных архитектурных задач, связанных с навигацией в модульных приложениях. Плюс, это отличный референс, чтобы убедиться, что ваши собственные решения движутся в верном направлении.
В общем, android/nav3-recipes — это тот редкий случай, когда официальный пример кода не просто показывает базовый "Hello, World!", а реально помогает в решении повседневных и нетривиальных задач. Настоятельно рекомендую добавить в закладки и заглядывать туда каждый раз, когда начинаете проектировать навигацию в новом проекте.
