навигационное событие
| Последнее обновление | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
|---|---|---|---|---|
| 8 октября 2025 г. | - | - | 1.0.0-бета01 | - |
Объявление зависимостей
Чтобы добавить зависимость от navigationevent, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .
Добавьте зависимости для необходимых артефактов в файл build.gradle вашего приложения или модуля:
Круто
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-beta01" }
Котлин
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-beta01") }
Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Заметок о выпуске для этого артефакта нет.
Версия 1.0
Версия 1.0.0-beta01
8 октября 2025 г.
Выпущен androidx.navigationevent:navigationevent-*:1.0.0-beta01 . Версия 1.0.0-beta01 содержит следующие коммиты .
Изменения API
- Исправьте аннотацию
FloatRangeдляNavigationEvent.touchXиNavigationEvent.touchY. Эти значения представляют собой абсолютные пиксельные координаты и не имеют верхней границы1.0. ( I4b205 , b/445989313 ) - Реорганизуйте компонуемый объект
NavigationEventDispatcherOwner, чтобыrememberNavigationEventDispatcherOwner. Теперь функция возвращаетNavigationEventDispatcherOwnerнапрямую. Чтобы предоставить этого владельца подкомпозиции, используйтеCompositionLocalProvider. ( I874b2 , b/444446629 )
Версия 1.0.0-альфа09
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 ) - Использование
onBackCompletedFallbackзаменено наfallbackOnBackPressedи параметр конструктора. Поведение не изменилось; вызывается только для завершенных, необработанных событий возврата. ( Idabe9 , b/444734264 ) - Основной конструктор
NavigationEventHistory(mergedHistory, currentIndex)теперь являетсяinternal. Внешние потребители должны использовать открытые конструкторы (пустой конструктор или конструктор на основе разделов) для создания экземпляров. ( I1c047 , b/444734264 ) - Сделайте
View.setViewTreeNavigationEventDispatcherOwnerпринимающим владельца, допускающего значение NULL ( 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 ) - Введен новый глобальный
NavigationEventDispatcher.historyStateFlow. Этот неуниверсальный поток позволяет наблюдателям подписываться только на изменения в стеке навигации и остается стабильным во время выполнения жеста. Это аналогtransitionState. ( I1db10 , b/444734264 ) - Введен новый глобальный
NavigationEventDispatcher.transitionStateStateFlow. Этот неуниверсальный поток позволяет наблюдателям подписываться только на состояние физического жеста (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 ) - Добавлено новое публичное свойство
transitionState: TransitionState, доступное только для чтения, вNavigationEventHandler. Обработчики теперь поддерживают собственное состояние перехода, которое могут отслеживать внешние системы. ( 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 ) - Удалите
hasEnabledHandler()изNavigationEventDispatcher;вместо этого используйтеNavigationEventInput.onHasEnabledHandlersChanged. ( Idef72 , b/443711297 ) - Добавьте обратный вызов
onInfoChangedкNavigationEventInputдля уведомления слушателей об изменениях в истории навигации. Это обеспечивает полный контекст текущего, предыдущего и следующего стеков, позволяя объектам Input реагировать на контекстную информацию. ( 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-альфа08
10 сентября 2025 г.
Выпущен androidx.navigationevent:navigationevent-*:1.0.0-alpha08 . Версия 1.0.0-alpha08 содержит следующие коммиты .
Новые функции
- Представить API
NavigationEventHandlerна основе лямбда-выражений, который заменит обработчик на основе Flow. Обрабатывать жесты «вперед» и «назад» с помощью простых обратных вызовов вместо сбора потоков, сокращая количество шаблонного кода и избегая проблем с отменой. ПредоставитьNavigationBackHandlerиNavigationForwardHandlerв качестве целевых удобных API. УдалитьNavigationEventHandlerна основе Flow; перейти на новые обратные вызовы. ( 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-альфа07
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 ) - Реализуйте
onDetachвNavigationEventInputHandler. ( 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-альфа06
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 ) - Исправлена ошибка, из-за которой
NavigationEventHandlerнекорректно реагировал на изменения своего включенного состояния. ( Ia5268 , I19bec , I5be5c , b/431534103 )
Обновления документов
- Расширение KDocs для
NavigationEventс целью прояснить его роль как единой оболочки событий и подробно описать поведение свойств при различных типах навигации (жесты, щелчки). ( I91e8d ) - Обновлена документация по системной обработке API Compose (
BackHandler,PredictiveBackHandler,NavigationEventHandler) для описания поведения, связанного с порядком обратного вызова. ( I7ab94 ,)
Обновление зависимостей
-
NavigationEventтеперь зависит от Compose Runtime 1.9.0-beta03, что позволяет артефактуnavigationevent-composeподдерживать все цели KMP. ( Ia1b87 )
Версия 1.0.0-альфа05
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()
Введён новый метод dispose() для корректной очистки диспетчеров и их дочерних объектов. Вызов dispose() останавливает прослушиватели для предотвращения утечек памяти, рекурсивно удаляет все дочерние диспетчеры, удаляет все обратные вызовы, зарегистрированные для диспетчера, и отсоединяет его от родительского объекта. Это гарантирует корректное освобождение ресурсов, когда диспетчеры больше не нужны. ( 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)
}
Примечание: Мы представим новый компонуемый NavigationEventDispatcherOwner , который автоматически управляет дочерним диспетчером в интерфейсе Compose в aosp/3692572 . Однако это изменение не вошло в текущую версию и запланировано на следующую.
Библиотека навигационного тестирования
- Добавить модуль
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-альфа04
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-альфа03
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-альфа02
4 июня 2025 г.
Выпущен androidx.navigationevent:navigationevent-*:1.0.0-alpha02 . Версия 1.0.0-alpha02 содержит следующие коммиты .
Изменения API
- Замените вторичный конструктор
NavigationEventDispatcherаргументами по умолчанию. ( I716a0 ) - Удалите свойство priority из
NavigationEventCallback. Вместо этого передайте приоритет вNavigationEventDispatcher.addCallback(). ( I13cae )
Исправления ошибок
- Исправлено исключение
ConcurrentModificationException, которое могло возникнуть при вызовеNavigationEventCallback.remove()из-за одновременного изменения внутреннего списка закрываемых объектов. ( b/420919815 )
Версия 1.0.0-альфа01
20 мая 2025 г.
Выпущен androidx.navigationevent:navigationevent-*:1.0.0-alpha01 . Версия 1.0.0-alpha01 содержит следующие коммиты .
Новые функции
- Библиотека
androidx.navigationeventпредоставляет API, ориентированный на KMP, для обработки системных событий, а также предиктивных событий .NavigationEventDispatcherслужит общим API для регистрации одного или нескольких экземпляровNavigationEventCallbackдля получения системных событий. - Этот уровень располагается ниже ранее выпущенных API в
androidx.activityи призван стать более гибкой заменой использованию API Activity в компонентах более высокого уровня или непосредственному использованию APIOnBackInvokedDispatcherфреймворка Android. APIandroidx.activityбыли переписаны поверх API Navigation Event в рамках Activity 1.12.0-alpha01 .