навигационное событие
Последнее обновление | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
---|---|---|---|---|
30 июля 2025 г. | - | - | - | 1.0.0-альфа05 |
Объявление зависимостей
Чтобы добавить зависимость от navigationevent, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .
Добавьте зависимости для необходимых артефактов в файл build.gradle
вашего приложения или модуля:
Круто
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha05" }
Котлин
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha05") }
Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Заметок о выпуске для этого артефакта нет.
Версия 1.0
Версия 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 ) -
NavigationEvent
Compose добавлена новая локальная композицияLocalNavigationEventDispatcherOwner
. Она возвращает значение, допускающее значение NULL, для более точного определения её доступности в текущей композиции.NavigationEventHandler
теперь выдаёт ошибку, если базовый владелец не найден. ( 62ffda ) -
NavigationEvent
Compose добавил новыйNavigationEventHandler
Composable для обработки событий (предиктивного жеста «Назад»). Он предоставляет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 .