событие навигации
| Последнее обновление | Стабильный релиз | Предварительная версия релиза | Бета-версия | Альфа-версия |
|---|---|---|---|---|
| 1 июля 2026 г. | 1.1.2 | - | - | 1.2.0-alpha01 |
Объявление зависимостей
To add a dependency on navigationevent, you must add the Google Maven repository to your project. Read Google's Maven repository for more information.
Добавьте зависимости для необходимых артефактов в файл build.gradle вашего приложения или модуля:
Круто
dependencies { implementation "androidx.navigationevent:navigationevent:1.2.0-alpha01" }
Котлин
dependencies { implementation("androidx.navigationevent:navigationevent:1.2.0-alpha01") }
Для получения дополнительной информации о зависимостях см. раздел «Добавление зависимостей сборки» .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав кнопку со звездочкой.
Для получения более подробной информации см. документацию по системе отслеживания ошибок .
Версия 1.2
Версия 1.2.0-alpha01
1 июля 2026 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.2.0-alpha01 . Версия 1.2.0-alpha01 содержит следующие коммиты .
Изменения в API
-
androidx.benchmarkтеперь используетсяminSdk24 ( IC2A85 ). - Add onForwardCompletedFallback to TestNavigationEventDispatcherOwner to enable tracking and testing of unhandled forward navigation events. ( I6bbd7 )
- Добавьте navigationEventInput в TestNavigationEventDispatcherOwner, чтобы упростить имитацию событий навигации в тестах. ( I3ef48 )
Исправлены ошибки
- Очищает информацию API ( Ia8066 )
- Игнорировать события навигации, отправляемые на отключенные входы. Ранее отправка событий на удаленный вход приводила к возникновению исключения
IllegalStateException. ( I1a8bc , b/515890298 ) - Предотвращение дублирования символов в более старых версиях форка JetBrains при обновлении до Compose Multiplatform 1.11.0. ( I4cc4d )
Для этого артефакта отсутствуют примечания к выпуску.
Версия 1.1
Версия 1.1.2
17 июня 2026 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.1.2 . Версия 1.1.2 содержит следующие коммиты .
Исправлены ошибки
- Обновите зависимости Compose до версии 1.11.2. ( a5e9259 )
Версия 1.1.1
6 мая 2026 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.1.1 . Версия 1.1.1 содержит следующие коммиты .
Исправлены ошибки
- Удалён обработчик
NavigationEventHandlerкоторый не выполняет никаких действий в режиме проверки, чтобы включить функцию предиктивного возврата в предварительных версиях Android Studio.
Версия 1.1.0
22 апреля 2026 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.1.0 . Версия 1.1.0 содержит следующие коммиты .
Версия 1.1.0-rc01
8 апреля 2026 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.1.0-rc01 . Версия 1.1.0-rc01 содержит следующие коммиты .
Исправлены ошибки
- Обновлен Compose compileSdk до API 37. Это означает, что для использования Compose требуется минимальная версия AGP 9.2.0. ( Id45cd , b/413674743 )
Версия 1.1.0-beta01
27 марта 2026 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.1.0-beta01 . Версия 1.1.0-beta01 содержит следующие коммиты .
Изменения в API
- Добавить
OnForwardCompletedFallbackвNavigationEventDispatcher, что позволит использовать поведение системы по умолчанию для необработанных событий прямой навигации. ( Iac620 , b/489138116 )
Версия 1.1.0-alpha01
25 февраля 2026 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.1.0-alpha01 . Версия 1.1.0-alpha01 содержит следующие коммиты .
Новые функции
- Поддержка всех многоплатформенных целей Kotlin (KMP) в NavigationEvent-Compose. Отделение разрешения владельца от
LocalView, позволяющее хостам платформы предоставлятьLocalNavigationEventDispatcherOwnerпо умолчанию, сохраняя при этомLocalViewв качестве безопасного резервного варианта на Android. ( Iae980 , b/434940570 , Iccf58 )
Изменения в API
- Добавлены функции расширения
NavigationEvent.toBackEvent()иBackEvent.toNavigationEvent()для преобразования междуBackEventиNavigationEventв Android. ( Ie3b71 , b/477001292 )
Версия 1.0
Версия 1.0.2
28 января 2026 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.2 . Версия 1.0.2 содержит следующие коммиты .
Исправлены ошибки
- Исправлена ошибка, приводящая к сбою при использовании
NavigationEventHandlerв режиме предварительного просмотра Android Studio. Теперь обработчик определяет режим проверки и ничего не делает, позволяя предварительному просмотру отображаться без предоставленного диспетчера. ( I370f2 , b/454313986 ).
Версия 1.0.1
3 декабря 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.1 . Версия 1.0.1 содержит следующие коммиты .
Исправлены ошибки
- Исправлена ошибка
ConcurrentModificationExceptionпри освобождении ресурсов дочернегоNavigationEventDispatcher, например, созданного с помощьюrememberNavigationEventDispatcherOwner(). ( ec68a9 , b/454363524 )
Версия 1.0.0
19 ноября 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0 . Версия 1.0.0 содержит следующие коммиты .
Основные особенности версии 1.0.0:
Библиотека Navigation Event теперь стабильна! Navigation Event — это библиотека AndroidX для обработки взаимодействий на системном уровне, таких как системный возврат и предиктивный возврат в Android (и других платформах).
Для обработки событий
NavigationEventвы можете реализовать собственныйNavigationEventHandler, который переопределяет необходимые функции. Затем вам нужно добавить обработчик вNavigationEventDispatcher. Начиная с версии Activity1.12.0,ComponentActivityреализует новый интерфейсNavigationEventDispatcherOwner, который предоставляет готовый к использованию диспетчер событий:// The NavigationEventInfo provides information about a navigation state object CurrentInfo : NavigationEventInfo() // you can retrieve this from any component that is a NavigationEventDispatcherOwner // or you can instantiate your own custom dispatcher val dispatcher = myActivity.navigationEventDispatcher val myHandler = object : NavigationEventHandler<NavigationEventInfo>( initialInfo = CurrentInfo, isBackEnabled = true ) { override fun onBackStarted(event: NavigationEvent) { // Prepare for the back event } override fun onBackProgressed(event: NavigationEvent) { // Use event.progress for predictive animations } // This is the required method for final event handling override fun onBackCompleted() { // Complete the back event } override fun onBackCancelled() { // Cancel the back event } } dispatcher.addHandler(myHandler)Модуль
navigationevent:navigationevent-composeпредоставляет удобную функциюNavigationBackHandler, которая автоматически связывает обработчик с ближайшим объектомNavigationEventDispatcherиз классаLocalNavigationEventDispatcherOwnerи позволяет разработчикам передавать желаемое поведение в качестве параметров:object CurrentInfo : NavigationEventInfo() object PreviousInfo : NavigationEventInfo() val navEventState = rememberNavigationEventState( currentInfo = CurrentInfo, backInfo = PreviousInfo ) // Inside composition NavigationBackHandler( State = navEventState, isBackEnabled = true, // optional onBackCancelled = { // Cancel the back event }, // required onBackCompleted = { // Complete the back event } , )
Использование этого шаблона в Compose значительно упрощает перенос состояния NavigationEventState и позволяет отслеживать его различными компонентами Composable (например, в случае Navigation3, где можно перенести состояние из NavDisplay ).
Каждый
NavigationEventDispatcherможет указывать родительский диспетчер как в случае использования конструкции, так и без неё. Это позволяет разработчикам создавать иерархическую структуру, в которой несколько диспетчеров могут управляться одним родительским диспетчером. Наличие родительского диспетчера значительно упрощает обработку групп диспетчеров, которые могут нуждаться в отключении или освобождении ресурсов:// Non-Compose val parentDispatcher = NavigationEventDispatcher() val childDispatcher = NavigationEventDispatcher(parent = parentDispatcher) // Compose val composeChildDispatcher = rememberNavigationEventDispatcher( // This defaults to `LocalNavigationEventDispatcherOwner.current` // Must explicitly provide null to have an unparented dispatcher created here parent = NavigationEventDispatch() )The library also makes it possible to provide signals directly to the
NavigationEventDispatchervia aNavigationEventInput.NavigationEventInputs acts as the "input" side of the navigation system, translating platform-specific events (like system back gestures or button clicks) into standardized events that can be sent to aNavigationEventDispatcher. Thenavigationevent:navigationeventmodule currently provides 2NavigationEventInputs: a more genericDirectNavigationEventInputto allow any event to be dispatched and an Android specificOnBackInvokedInputthat allows aNavigationEventDispatcherto support system back and the predictive back gesture. If you implement your own dispatcher (instead of using the one provided byComponentActivity) you must manually add your input:val dispatcher = NavigationEventDispatcher() dispatcher.addInput(DirectNavigationEventInput()) dispatcher.addInput(OnBackInvokedDefaultInput(invoker))
Версия 1.0.0-rc01
5 ноября 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-rc01 . Версия 1.0.0-rc01 содержит следующие коммиты .
Версия 1.0.0-beta01
8 октября 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-beta01 . Версия 1.0.0-beta01 содержит следующие коммиты .
Изменения в API
- Correct the
FloatRangeannotation forNavigationEvent.touchXandNavigationEvent.touchY. These values represent absolute pixel coordinates and do not have a1.0upper bound. ( I4b205 , b/445989313 ) - Переработайте составной объект
NavigationEventDispatcherOwnerдобавив в негоrememberNavigationEventDispatcherOwner. Теперь функция возвращаетNavigationEventDispatcherOwnerнапрямую. Чтобы предоставить этот владелец подкомпозиции, используйтеCompositionLocalProvider. ( I874b2 , b/444446629 )
Версия 1.0.0-alpha09
24 сентября 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha09 . Версия 1.0.0-alpha09 содержит следующие коммиты .
Изменения в API
- Используйте объект-синглтон
NavigationEventTransitionState.Idleнапрямую, вместо создания экземпляраIdle(). ( Ic7d9e , b/444734264 ) - Сделайте конструкторы вспомогательными внутренними; получайте экземпляры через публичный класс
NavigationEventDispatcher.historyвместо прямого создания. ( I3b7e0 , b/444734264 ) - Требуется создание
NavigationEventStateчерезrememberNavigationEventState; конструктор теперь является внутренним. ( IE143c , b/444734264 ) - Замените использование метода
fallbackOnBackPressedи параметр конструктораonBackCompletedFallback. Поведение остается неизменным; метод вызывается только при завершенных, необработанных событиях возврата. ( Idabe9 , b/444734264 ) - Основной конструктор
NavigationEventHistory(mergedHistory, currentIndex)теперь являетсяinternal. Внешние потребители должны использовать открытые конструкторы (либо пустой конструктор, либо конструктор на основе разделов) для создания экземпляров. ( I1c047 , b/444734264 ) - Заставить
View.setViewTreeNavigationEventDispatcherOwnerпринимать значение nullable owner ( Ic9eb6 , b/444436762 ) -
NavigationEventInfoтеперь являетсяabstract classа неinterface. Обновите все пользовательские реализации, чтобы они наследовали от этого класса (например,data class MyInfo : NavigationEventInfo()). ( I1e59c , b/444734264 ) - Устаревшее свойство
NavigationEventDispatcher.stateи функцияgetState<T>()были удалены. Используйте новые, отдельные потокиdispatcher.transitionState(для отслеживания прогресса жестов) иdispatcher.history(для стека навигации). ( Ic2ceb , b/444734264 ) - Заменен коллбэк
NavigationEventInput.onInfoChanged(...). Реализован новый коллбэкonHistoryChanged(history: NavigationEventHistory)для получения обновлений в виде единого объектаNavigationEventHistory. ( I23e0b , b/444734264 ) - Вводится новый глобальный
StateFlowNavigationEventDispatcher.history. Этот негенерический поток позволяет наблюдателям подписываться только на изменения в стеке навигации и остается стабильным на протяжении всего выполнения жеста. Это аналогtransitionState. ( I1db10 , b/444734264 ) - Вводится новый глобальный
StateFlowNavigationEventDispatcher.transitionState. Этот негенерический поток позволяет наблюдателям подписываться только на физическое состояние жеста (Idle/InProgress), отдельно от истории. ( I171fa , b/444734264 ) - Вводится класс
NavigationEventHistoryState. Он будет служить основным API для отслеживания истории навигационной информации, отдельно от состояния жестов. ( I81ca5 , b/444734264 ) - Теперь
NavigationEventпомечен как@Immutable, что позволяет компилятору Compose оптимизировать перекомпозиции. ( If78c7 , b/444734264 ) - API обработчиков
navigationevent-composeобновлены.NavigationEventHandlerиNavigationBackHandler(и их варианты) теперь поддерживают новую перегрузку, которая принимает поднятое состояниеNavigationEventState. Простые перегрузки (принимающиеcurrentInfo) сохранены и теперь используют эту новую модель состояния внутри. ( Ic3251 , b/444734264 ) - Добавьте новый объект
@StableNavigationEventState<T>в библиотекуnavigationevent-compose. Этот объект объединяет локальную историю с локальным состоянием жестов и будет основным связующим звеном междуrememberNavigationEventStateиNavigationEventHandler. ( Ifb69f , b/444734264 ) - В
NavigationEventHandlerдобавлено новое общедоступное свойствоtransitionState: TransitionState, доступное только для чтения. Теперь обработчики поддерживают собственное состояние перехода, которое могут отслеживать внешние системы. ( I9acd2 , b/444734264 ) - Представляем новый закрытый класс
TransitionState. Он будет служить основным API для отслеживания состояния жестов, отдельно от истории навигации. ( Id4beb , b/444734264 ) - Предоставить
currentInfo,backInfoиforwardInfoв качестве общедоступных свойств только для чтения вNavigationEventHandler. ( Ia7636 , b/444734264 ) - Теперь реализациям
NavigationEventHandlerнеобходимо передавать значениеinitialInfo: Tбазовому конструктору. ( Idcfea , b/444734264 ) - Замените
OnBackInvokedInputнаOnBackInvokedOverlayInputилиOnBackInvokedDefaultInput. ( I5323f , b/428948766 ) - Пометьте
NavigationEventStateкак@Immutable. Это повысит производительность Compose, гарантируя, что Composable-объекты, отслеживающие это состояние, смогут корректно пропускать перекомпозицию. ( I399c8 ) - Переименовать
NavigationEventInfo.NotProvidedвNavigationEventInfo.None;обновить ссылки. Изменений в поведении нет. ( I5e2d4 ) - Теперь
NavigationEventInfoпомечен как@Immutable, что позволяет компилятору Compose оптимизировать перекомпозиции. ( I7c112 ) - Улучшите эргономику Java с помощью удобного интерфейса для резервного варианта автозавершения. ( I8a860 )
- Переименуйте
onHasEnabledHandlerChangedвonHasEnabledHandlersChanged. Это уточнит, что функция обратного вызова сообщает о совокупном состоянии включения всех обработчиков, а не только одного. ( I1af61 , b/443711297 ) - Remove
hasEnabledHandler()fromNavigationEventDispatcher;useNavigationEventInput.onHasEnabledHandlersChangedinstead. ( Idef72 , b/443711297 ) - Добавьте функцию обратного вызова
onInfoChangedкNavigationEventInput, чтобы уведомлять слушателей об изменениях в истории навигации. Это обеспечивает полный контекст текущего, предыдущего и следующего стеков, позволяя элементам ввода реагировать на контекстную информацию. ( I69a8b , b/443282983 ) - Сделайте свойство `
swipeEdgeобъекта `NavigationEvent@IntDef( `Icee54` , b/443950342` ) - Добавьте параметр
priorityкNavigationEventDispatcher.addInput, чтобы ограничить диспетчер одним приоритетом; события, такие какonHasEnabledCallbacksChangedтеперь срабатывают только при изменении коллбэков с этим приоритетом. ( I3e488 , b/443711297 ) - Для большей ясности переименуйте параметр
NavigationEventDispatcherизparentDispatcherв parent. ( Id4f1f , b/443801782 ) - Удалите
NavigationEventPriorityв пользу@IntDefдля пользователей Java ( I10a9f , b/440514265 ) - Необходимо обеспечить соблюдение контракта обработчика навигации. Если ваш
NavigationEventHandlerустанавливаетisBackEnabledилиisForwardEnabledвtrue, теперь необходимо переопределить методыonBackCompletedилиonForwardCompletedсоответственно. Реализации по умолчанию теперь генерируют исключение, чтобы предотвратить скрытые сбои. ( I17c62 ) - При добавлении обработчиков событий навигации необходимо обеспечить корректность значений приоритета. Вызов
addHandlerс неподдерживаемым приоритетом теперь будет вызывать исключениеIllegalArgumentException, обеспечивая немедленную обратную связь при некорректном использовании на всех целевых платформах. ( I3c474 )
Исправлены ошибки
- Сделать
addHandlerидемпотентным; игнорировать повторяющиеся регистрации. ( I052aa , b/444734264 ) - Поддерживайте синхронизацию свойств
NavigationEventStateво время перекомпозиции. ( Ib3b4d , b/444734264 ) - Убедитесь, что
NavigationEventInputsполучают текущую контекстную информацию (текущая, назад, вперед) сразу после регистрации. ( Ie65bf , b/443282983 )
Версия 1.0.0-alpha08
10 сентября 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha08 . Версия 1.0.0-alpha08 содержит следующие коммиты .
Новые функции
- Ввести API
NavigationEventHandlerна основе лямбда-функций, заменяющий обработчик на основе потоков. Обработка жестов "назад" и "вперед" с помощью простых коллбэков вместо сбора потоков, что уменьшит шаблонный код и позволит избежать проблем с отменой. ПредоставитьNavigationBackHandlerиNavigationForwardHandlerв качестве целевых удобных API. УдалитьNavigationEventHandlerна основе потоков; перейти к новым коллбэкам. ( I23bac , b/436248277 ) - Разрешить пассивным слушателям доступ к полному стеку возврата навигации через объединенную информацию о возврате. Разрешить пользовательским интерфейсам отображать предварительный просмотр и вложенную историю навигации, вместо того чтобы ограничиваться самым верхним коллбэком. ( I7a510 , b/436248277 )
- Ввести явную модель "назад/текущее/вперед" для уточнения состояния навигации и поддержки навигации вперед с вложенными обработчиками. ( Ib86da , b/420443609 )
- Добавьте методы
onForward*иisForwardEnabledвNavigationEventCallback. ( Ic100f , b/436248290 ) - Добавить поддержку навигации вперед в
NavigationEventInput. ( I5734b )
Изменения в API
- Включите тестирование событий прямой навигации с помощью
TestNavigationEventCallback. Используйте хукиisForwardEnabledиonForward*. ( I21fb5 , b/420443609 ) - Переименуйте коллбэки
onEvent*вonBack*вNavEvent. ( I228b3 , b/436248290 ) - Преобразовать
SwipeEdgeво встроенный класс. ( Id5e01 ) - Обеспечьте совместимость библиотеки
navigationeventс Java. Все общедоступные API теперь полностью доступны из кода Java, что позволяет беспрепятственно интегрировать ее в проекты, использующие разные языки программирования или только Java. ( Ibc944 , I5465f , I9fb1e , b/440532890 b/443040294 ) - Уточните роли API, переименовав
NavigationEventCallbackвNavigationEventHandler. Это изменение лучше отражает назначение класса — обработку многоэтапных навигационных жестов. Соответствующий методaddCallbackтеперь называетсяaddHandler. ( I2492a , b/443040331 )
Исправлены ошибки
- Предотвратить запуск резервного варианта при навигации вперед. ( I74814 , b/436248290 )
- Добавлена поддержка предиктивной навигации вперед. API
NavigationEventтеперь обрабатывают жесты как назад, так и вперед, обеспечивая согласованную анимацию для обоих направлений навигации. ( Idc98c , b/436248290 ) - Предотвращение сбоя
IllegalStateExceptionво время перекомпозиции при удалении дочернегоNavigationEventDispatcherOwner. ( Iff50c , b/412629020 ) - Теперь пассивные обработчики событий могут получить доступ ко всему стеку возврата навигации через объединенную информацию о возврате, что позволяет пользовательским интерфейсам отображать предварительный просмотр и вложенную историю навигации, вместо того чтобы ограничиваться самым верхним коллбэком. ( I7a510 , b/436248277 )
Версия 1.0.0-alpha07
27 августа 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha07 . Версия 1.0.0-alpha07 содержит следующие коммиты .
Изменения в API
- Удалите
NavigationEventDispatcher.onHasEnabledCallbacksChanged. ( I50e97 ) - Сделайте
NavigationEventCallback.onEventCompleted()абстрактным. ( I36b38 ) - Измените методы
NavigationEventCallback#on*наprotected. Обновите вызывающий код, чтобы он их переопределял. ( I6b691 ) - Переименуйте функции
DirectNavigationEventInput. ( Iffb62 ) - Переименуйте
NavigationEventInput.onAttachвonAdded. ( I2d0b8 ) - Переименуйте
NavigationEventInput.onDetachвonRemoved. ( I2d0b8 ) - Переименуйте
NavigationEventInputHandlerвNavigationEventInput. ( I676a4 ) - Добавьте
@EmptySuperвNavigationEventInput.onHasEnabledCallbacksChanged. ( If9853 ) - Реализуйте
onAttachвNavigationEventInputHandler. ( I03648 ) - Implement
onDetachinNavigationEventInputHandler. ( I03648 ) -
NavigationEventCallbackпо умолчанию включается при создании объекта. ( Ic0188 ) - Замените
NavigationEventInput.addOnHasEnabledCallbacksChangedCallbackнаNavigationEventInput.onHasEnabledCallbacksChanged. ( I64e93 ) - Для вызова
NavigationEventDispatcher.addInputтребуется основной поток. ( IC2930 ) - Для вызова
NavigationEventDispatcher.removeInputтребуется основной поток. ( IC2930 ) - Удалите
Dispatcher.addOnHasEnabledCallbacksChangedCallback. Замените наDispatcher.onHasEnabledCallbacksChanged. ( Ida3e3 , b/436530096 )
Исправлены ошибки
- Исправлена ошибка, из-за которой добавление уже прикрепленного обработчика или удаление неприкрепленного приводило к некорректной логике жизненного цикла. ( I9e47b )
Версия 1.0.0-alpha06
13 августа 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha06 . Версия 1.0.0-alpha06 содержит следующие коммиты .
Новые функции
API пассивных слушателей
Теперь вы можете передавать пользовательскую контекстную информацию с любого хоста навигации и пассивно отслеживать изменения состояния жестов из любой точки пользовательского интерфейса. Это позволяет создавать контекстно-зависимые анимации для предиктивной навигации назад и других навигаций, управляемых жестами.
Эта функция состоит из двух частей:
- Предоставление информации — используйте
NavigationEventInfoдля передачи пользовательских данных. - Использование состояния — применяйте
dispatcher.state(NavigationEventState) для отслеживания хода выполнения жеста и контекста.
- Теперь
NavigationEventCallbackпредоставляет методsetInfo(currentInfo, previousInfo)для установки контекста жеста за один вызов ( I1d5e7 , b/424470518 ). -
NavigationEventHandlerдобавляет новую перегрузку, которая принимаетcurrentInfoиpreviousInfo, что делает его основным API для предоставления контекста в приложениях Compose ( I6ecd3 , b/424470518 ).
Пример:
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
- Теперь
NavigationEventDispatcherпредоставляетdispatcher.stateиdispatcher.getState<T>()( If7fae , Ia90ca , b/424470518 ). Эти API на основеStateFlowпозволяют любому пользовательскому интерфейсу отслеживать прогресс жестов и контекстные данные без прямой обработки события.
Пример:
val gestureState by LocalNavigationEventDispatcherOwner.current!!
.navigationEventDispatcher
.state
.collectAsState()
val progress = gestureState.progress // Returns latestEvent.progress or 0F
when (val state = gestureState) {
is InProgress -> {
val toScreen = state.currentInfo as MyScreenInfo
val fromScreen = state.previousInfo as MyScreenInfo
println("Navigating from ${fromScreen.screenName} to ${toScreen.screenName}")
}
is Idle -> { /* Idle state */ }
}
Добавьте свойство
progressвNavigationEventState( I7b196 ), которое возвращаетlatestEvent.progressкогда событие выполняется, или0Fв противном случае:val progress = state.progressДобавьте компонуемый класс
NavigationEventDispatcherOwnerдля иерархического создания, связывания и удаления экземпляровNavigationEventDispatcher. Включите динамическое управление состоянием включения диспетчера и автоматическую очистку.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
Изменения в API
- Параметр
isPassthroughбыл удален изNavigationEventCallback. ( I99028 , b/424470518 ) - Конструкторы
NavigationEventStateтеперь являются внутренними. Для тестирования обновите состояние (по умолчаниюIdle) с помощьюDirectNavigationEventInputHandler. ВызовитеhandleOnStartedилиhandleOnProgressed, чтобы установить состояние вInProgress, иhandleOnCompletedилиhandleOnCancelled, чтобы вернуть его вIdle. Для обновленияNavigationEventInfoиспользуйтеNavigationEventCallback.setInfo. ( I93dca , b/424470518 ) - Добавлены параметры по умолчанию для
NavigationEvent, чтобы упростить создание экземпляров и тестирование; их следует использовать вместоTestNavigationEvent. ( I5dc49 , I232f4 ) - Добавлена функция
TestNavigationEventCallbackдля тестирования событий навигации с конкретными текущими/предыдущими состояниями. ( Idd22e , b/424470518 ) -
NavigationEventInputHandlerбыл преобразован в абстрактный класс, заменяющий предыдущийAbstractNavigationEventInputHandlerреализацией изDirectNavigationEventInputHandler( Iadde5 , Ifed40 I3897c , b/432616296 , b/435416924 ). - Функции
send*вNavigationEventInputHandlerполучили новые префиксы, теперь они называютсяhandle*. ( Iffcaf ) -
OnBackInvokedInputHandlerтеперь расширяет новыйabstractNavigationInputHandler. ( Ib45aa ) - Изменено
NavigationEventDispatcherOwnerтеперь требуется родительский диспетчер, тогда как для создания корневого диспетчера необходимо явно передатьnull. ( Ia6f64 , b/431534103 )
Исправлены ошибки
- Повышена эффективность за счет предотвращения копирования коллекций в
NavigationEventDispatcher.dispose(). ( I4ab09 ) - Fixed an issue where the
NavigationEventHandlerdid not correctly respond to changes in its enabled state. ( Ia5268 , I19bec , I5be5c , b/431534103 )
Обновления документации
- Документация KDocs для
NavigationEventрасширена, чтобы уточнить его роль как унифицированной оболочки событий и подробно описать поведение свойств для различных типов навигации (жесты, клики). ( I91e8d ) - Updated documentation for system back handling Compose APIs (
BackHandler,PredictiveBackHandler,NavigationEventHandler) to call out behavior specifically around callback order. ( I7ab94 , )
Обновление зависимостей
- Теперь
NavigationEventзависит от Compose Runtime 1.9.0-beta03, что позволяет артефактуnavigationevent-composeподдерживать все цели KMP. ( Ia1b87 )
Версия 1.0.0-alpha05
30 июля 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha05 . Версия 1.0.0-alpha05 содержит следующие коммиты .
Поддержка иерархии «родитель-ребенок»:
Теперь NavigationEventDispatcher может иметь родительские и дочерние диспетчеры, образуя иерархическую древовидную структуру. Это позволяет более гибко распространять и управлять событиями навигации в сложных компонентах пользовательского интерфейса Compose, отражая структурную иерархию интерфейса посредством цепочки диспетчеров. ( I194ac )
// Create a parent dispatcher that will manage navigation events at a higher level.
val parentDispatcher = NavigationEventDispatcher()
// Create a child dispatcher linked to the parent, forming a hierarchy.
val childDispatcher = NavigationEventDispatcher(parentDispatcher)
Иерархическое свойство isEnabled позволяет осуществлять управление диспетчером сверху вниз. Когда для диспетчера установлено isEnabled false , он автоматически отключает все свои дочерние диспетчеры. Эта функция позволяет эффективно отключать целые ветви системы навигационных событий. ( I9e985 )
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
Более того, свойство isEnabled объекта NavigationEventCallback теперь учитывает состояние включения связанного с ним диспетчера. Это означает, что обратный вызов считается включенным только в том случае, если включены как сам обратный вызов, так и его диспетчер (включая его предков), что обеспечивает согласованный иерархический контроль над активацией обратных вызовов. ( I1799a )
// Create a test callback and add it to the child dispatcher.
val callback1 = TestNavigationEventCallback(isEnabled = true)
childDispatcher.addCallback(callback1)
// Since the childDispatcher is disabled, the callback is effectively disabled as well.
assertThat(callback1.isEnabled).isFalse()
A new dispose() method has been introduced for proper cleanup of dispatchers and their children. Calling dispose() stops listeners to prevent memory leaks, recursively disposes all child dispatchers, removes all callbacks registered to the dispatcher, and unlinks it from its parent. This guarantees resources are released correctly when dispatchers are no longer needed. ( I9e985 )
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
Если вызывается какой-либо публичный метод удаленного диспетчера, немедленно генерируется исключение IllegalStateException . Это предотвращает скрытые сбои и помогает разработчикам выявлять некорректное использование во время разработки. ( Ic2dc3 )
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
Примечание: В aosp/3692572 мы добавим новый компонент NavigationEventDispatcherOwner Composable, который будет автоматически управлять дочерним диспетчером в пользовательском интерфейсе Compose. Однако это изменение не вошло в текущий релиз и запланировано на следующий.
Библиотека для тестирования навигации
- Добавить модуль
navigationevent-testingдля предоставления специализированных инструментов тестирования библиотекиnavigationevent. ( 0e50b6 ) - Добавьте фиктивный вспомогательный класс
TestNavigationEventCallbackдля тестирования. Он записывает вызовы методов обратного вызова и сохраняет полученные элементыNavigationEventдля поддержки проверки. ( 4a0246 ) - Добавлена вспомогательная функция
TestNavigationEventдля создания экземпляровNavigationEventсо значениями по умолчанию, что упрощает модульные тесты для обработки событий навигации. ( 3b63f5 ) - Добавьте фиктивный вспомогательный класс
TestNavigationEventDispatcherOwnerдля тестирования. Он отслеживает количество событий резервного режима и изменения состояния включения для поддержки проверки взаимодействия в тестах. ( c8753e )
Изменения в API
- Переместить
NavigationEventInputHandlerизandroidMainвcommonMain, чтобы сделать его доступным в общем коде KMP. Добавить новыеpublic send*для отправки событий. Изменить функции отправки событий вNavigationEventDispatcherсpublicнаinternal; теперь пользователям необходимо использоватьNavigationEventInputHandlerдля отправки событий. ( Ia7114 ) - Переименовать
NavigationInputHandlerвOnBackInvokedInputHandler. ( I63405 )
Исправлены ошибки
- Переработайте
NavigationEventDispatcher, чтобы уменьшить накладные расходы за счет избежания промежуточного выделения памяти в списках и повышения производительности диспетчеризации обратных вызовов. ( I82702 , I1a9d9 ) - Добавьте аннотации
@FloatRangeк полямtouchX,touchYиprogressвNavigationEvent, чтобы обеспечить соблюдение допустимых диапазонов значений во время компиляции и повысить безопасность API. ( Iac0ec )
Версия 1.0.0-alpha04
2 июля 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha04 . Версия 1.0.0-alpha04 содержит следующие коммиты .
Исправлены ошибки
- Использована
implementedInJetBrainsForkдляnavigationevent-composeи добавлен целевой объектcommonStubsв соответствии с соглашениями Compose. Изменение запрошено JetBrains . ( f60c79 ) - Исправлено применение плагина компилятора Compose для Kotlin/Native для обеспечения корректной генерации заглушек. Это не повлияло на публичные API или поведение. ( 1890c9 )
Версия 1.0.0-alpha03
18 июня 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha03 . Версия 1.0.0-alpha03 содержит следующие коммиты .
Новые функции
- Введен новый модуль
navigationevent-composeдля поддержки функций Jetpack Compose в библиотекеnavigationevent. ( 980d78 ) -
NavigationEventCompose добавлен новый локальный компонентLocalNavigationEventDispatcherOwner. Он возвращает значение, допускающее значение null, чтобы лучше определить, доступен ли компонент в текущем компоненте.NavigationEventHandlerтеперь будет выдавать ошибку, если базовый владелец не найден. ( 62ffda ) -
NavigationEventCompose добавлен новый компонентNavigationEventHandlerComposable для обработки событий (например, предиктивного жеста «назад»). Он предоставляетFlowобъектовNavigationEvent, которые должны быть собраны в приостанавливаемой лямбда-функции, которую вы предоставляете c42ba6 :
NavigationEventHandler { progress: Flow<NavigationEvent> ->
// This block is executed when the back gesture begins.
try {
progress.collect { backEvent ->
// Handle gesture progress updates here.
}
// This block is executed if the gesture completes successfully.
} catch (e: CancellationException) {
// This block is executed if the gesture is cancelled
throw e
} finally {
// This block is executed either the gesture is completed or cancelled
}
}
Изменения в API
- Теперь каждый
NavigationEventCallbackможет быть зарегистрирован только в одномNavigationEventDispatcherодновременно; добавление его в несколько диспетчеров вызовет исключениеIllegalStateException. Обратите внимание, что это поведение отличается отOnBackPressedDispatcher, который допускает использование нескольких диспетчеров. ( e82c19 ) - Сделана
isPassThroughпеременнойvalдля предотвращения изменения во время навигации, что могло бы нарушить отправкуNavigationEvent. ( I0b287 )
Версия 1.0.0-alpha02
4 июня 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha02 . Версия 1.0.0-alpha02 содержит следующие коммиты .
Изменения в API
- Replace
NavigationEventDispatcher's secondary constructor with default arguments. ( I716a0 ) - Удалите свойство priority из
NavigationEventCallback. Вместо этого передавайте priority вNavigationEventDispatcher.addCallback(). ( I13cae )
Исправлены ошибки
- Исправлена ошибка
ConcurrentModificationException, которая могла возникнуть при вызовеNavigationEventCallback.remove()из-за одновременного изменения внутреннего списка закрываемых элементов. ( b/420919815 )
Версия 1.0.0-alpha01
20 мая 2025 г.
Выпущена версия androidx.navigationevent:navigationevent-*:1.0.0-alpha01 . Версия 1.0.0-alpha01 содержит следующие коммиты .
Новые функции
- The
androidx.navigationeventlibrary provides a KMP-first API for handling system back as well as Predictive Back . TheNavigationEventDispatcherserves as a common APIs for registering one or moreNavigationEventCallbackinstances for receiving system back events. - Этот слой находится ниже ранее выпущенных API в
androidx.activityи призван стать менее навязчивой заменой использованию API Activity в компонентах более высокого уровня или прямому использованию APIOnBackInvokedDispatcherфреймворка Android. APIandroidx.activityбыли переписаны поверх API Navigation Event в рамках Activity 1.12.0-alpha01 .