TGViewer
Compose Broadcast Compose Broadcast @compose_broadcast · 5.9K subscribers
Post #942 7.15K
⚙️ Мигрировать на Navigation 3 можно, но только всё приложение разом. И это не единственная засада

Честный кейс от разработчицы: она в одиночку перевела приложение на 170+ экранов с Nav2 на Nav3 🤯. Не пересказ доков, а грабли из прода. Объем работы: 302 файла (по сути весь app), 2 недели разработки с овертаймами, ~1.5 недели стабилизации, 1 хотфикс.

Что стоит забрать себе ещё до старта:

Поэтапно не выйдет. Обратной совместимости между Nav2 и Nav3 нет, мигрируешь либо всё сразу, либо никак. Отсюда огромный affected area и главная организационная боль: команда не фризила разработку, коллеги параллельно пилили новые экраны на старой навигации. Чем дольше тянешь, тем дороже разгребать merge-конфликты.

Bottom Sheets из коробки в навигации нет. Пришлось городить обёртку вокруг entry<> с флагом в metadata и вручную разруливать, что рисовать через ModalBottomSheetLayout, а что через NavDisplay:

val NavEntry<out NavKey>.isBottomSheet: Boolean
get() = metadata["isBottomSheet"] as? Boolean == true

NavDisplay(
entries = navigationState.toEntries(mainEntryProvider)
.filter { it.isBottomSheet.not() },
onBack = { navigator.goBack() },
)


Сейчас это решается официально через BottomSheetSceneStrategy, свой костыль автор потом выкинула. Мигрируешь сегодня — сразу проверь, что шторки ложатся на SceneStrategy, а не переоткрывай этот велосипед. ⚠️ И отдельный подвох: шторка часть стека, и если перед переходом на следующий экран не закрыть её руками, back вернёт её обратно. Легко забыть.

Сериализация уронит тебя уже в проде. 💥 Всё, что прокидываешь через навигацию, должно быть @Serializable. Автор прокинула entryPoint: NavKey (чтобы при блокировке юзера возвращать на нужный экран через несколько назад), а сам NavKey сериализуемым не был:

Fatal Exception: kotlinx.serialization.SerializationException


Ловушка в том, что краш не в обычном флоу, а в отдельных сценариях восстановления, поэтому проходит ревью и ручные тесты, а ловится только у юзеров.

🔗 Полный разбор с кодом и схемами на Medium

#Compose #Navigation3 #Android
More from @compose_broadcast
  1. Sep 17, 2026В Compose 1.13 появится полноценный Blur для контента через Modifier #Compose
  2. Sep 14, 2026⚙️ Вышел Compose HotSwan 2.0.0 - Hot Reload для Android, iOS и Desktop. В новой версии про…
  3. Sep 14, 2026⚙️ Compose Web можно выложить как офлайн-приложение В Issue CMP-10781 в официальном баг-тр…
  4. Sep 9, 2026🚀 Вышла новая альфа-версия адаптации CMP для ОС Аврора (v0.0.5) Прошёл квартал — а значит…
  5. Sep 7, 2026🐱 compose-recomposition-highlighter - отслеживание статистики рекомпозиций в Android След…
  6. Sep 7, 2026⚙️ Анимация смены чисел на Compose. Как сделали тут #Compose #Анимация
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →