navigationevent
Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
13 août 2025 | - | - | - | 1.0.0-alpha06 |
Déclarer des dépendances
Pour ajouter une dépendance à navigationevent, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.
Ajoutez les dépendances correspondant aux artefacts dont vous avez besoin dans le fichier build.gradle
de votre application ou de votre module :
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha06" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha06") }
Pour en savoir plus sur les dépendances, consultez Ajouter des dépendances de compilation.
Commentaires
Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.
Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.
Aucune note de version pour cet artefact.
Version 1.0
Version 1.0.0-alpha06
13 août 2025
Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha06
. La version 1.0.0-alpha06 contient ces commits.
Nouvelles fonctionnalités
API Passive Listeners
Vous pouvez désormais transmettre des informations contextuelles personnalisées depuis n'importe quel hôte de navigation et écouter passivement les changements d'état des gestes depuis n'importe quel endroit de votre UI. Cela permet d'activer des animations contextuelles pour la prévisualisation du geste Retour et d'autres types de navigation par gestes.
Cette fonctionnalité comporte deux volets :
- Fournir des informations : utilisez
NavigationEventInfo
pour transmettre des données personnalisées. - État de consommation : utilisez
dispatcher.state
(NavigationEventState
) pour observer la progression et le contexte du geste.
NavigationEventCallback
expose désormais la méthodesetInfo(currentInfo, previousInfo)
pour définir le contexte du geste en un seul appel (I1d5e7, b/424470518).NavigationEventHandler
ajoute une nouvelle surcharge qui acceptecurrentInfo
etpreviousInfo
, ce qui en fait l'API principale pour fournir le contexte dans les applications Compose (I6ecd3, b/424470518).
Exemple :
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
NavigationEventDispatcher
expose désormaisdispatcher.state
etdispatcher.getState<T>()
(If7fae, Ia90ca, b/424470518). Ces API basées surStateFlow
permettent à n'importe quelle UI d'observer la progression des gestes et les données contextuelles sans gérer directement l'événement.
Exemple :
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 */ }
}
Ajoutez la propriété
progress
àNavigationEventState
(I7b196) qui renvoielatestEvent.progress
en cas de progression ou0F
dans le cas contraire :val progress = state.progress
Ajout du composable
NavigationEventDispatcherOwner
pour créer, associer et supprimer des instancesNavigationEventDispatcher
de manière hiérarchique. Activez le contrôle dynamique de l'état activé du répartiteur et le nettoyage automatique.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
Modifications apportées à l'API
- Le paramètre
isPassthrough
a été supprimé deNavigationEventCallback
. (I99028, b/424470518) - Les constructeurs
NavigationEventState
sont désormais internes. Pour les tests, mettez à jour l'état (par défaut,Idle
) viaDirectNavigationEventInputHandler
. AppelezhandleOnStarted
ouhandleOnProgressed
pour définir l'état surInProgress
, ethandleOnCompleted
ouhandleOnCancelled
pour le rétablir surIdle
. Pour mettre à jourNavigationEventInfo
, utilisezNavigationEventCallback.setInfo
. (I93dca, b/424470518) - Ajout de paramètres par défaut à
NavigationEvent
pour faciliter l'instanciation et simplifier les tests, qui doivent être utilisés à la place deTestNavigationEvent
. (I5dc49, I232f4) - Ajout d'un
TestNavigationEventCallback
pour tester les événements de navigation avec des états actuels/précédents spécifiques. (Idd22e, b/424470518) NavigationEventInputHandler
est désormais une classe abstraite qui remplace l'ancienneAbstractNavigationEventInputHandler
par une implémentation dansDirectNavigationEventInputHandler
. (Iadde5, Ifed40I3897c, b/432616296, b/435416924)- Le préfixe des fonctions
send*
dansNavigationEventInputHandler
a été remplacé parhandle*
. (Iffcaf) OnBackInvokedInputHandler
étend désormais le nouveauNavigationInputHandler
abstract
. (Ib45aa)- Modification de
NavigationEventDispatcherOwner
pour exiger un répartiteur parent où vous devez transmettre explicitementnull
pour créer un répartiteur racine. (Ia6f64, b/431534103)
Correction de bugs
- Efficacité améliorée en évitant les copies de collections dans
NavigationEventDispatcher.dispose()
. (I4ab09) - Correction d'un problème où
NavigationEventHandler
ne répondait pas correctement aux modifications de son état activé. (Ia5268,I19bec, I5be5c, b/431534103)
Nouveautés de Docs
- La documentation KDocs pour
NavigationEvent
a été étendue pour clarifier son rôle d'encapsuleur d'événements unifié et détailler le comportement des propriétés pour différents types de navigation (gestes, clics). (I91e8d) - Mise à jour de la documentation pour les API Compose de gestion du retour système (
BackHandler
,PredictiveBackHandler
,NavigationEventHandler
) afin de préciser le comportement, en particulier en ce qui concerne l'ordre des rappels. (I7ab94, )
Mise à jour de la dépendance
NavigationEvent
dépend désormais de Compose Runtime 1.9.0-beta03, ce qui permet à l'artefactnavigationevent-compose
de prendre en charge toutes les cibles KMP. (Ia1b87)
Version 1.0.0-alpha05
30 juillet 2025
Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha05
. La version 1.0.0-alpha05 contient ces commits.
Prise en charge de la hiérarchie parent-enfant :
Un NavigationEventDispatcher
peut désormais avoir des dispatchers parents et enfants, formant une structure arborescente hiérarchique. Cela permet aux événements de navigation de se propager et d'être gérés de manière plus flexible dans les composants d'interface utilisateur Compose complexes en reflétant la hiérarchie structurelle de l'UI via des dispatchers chaînés. (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)
La propriété hiérarchique isEnabled
permet un contrôle descendant d'un répartiteur. Lorsque isEnabled
est défini sur false
sur un répartiteur, tous ses répartiteurs descendants sont automatiquement désactivés. Cette fonctionnalité permet de désactiver efficacement des branches entières du système d'événements de navigation. (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
De plus, la propriété isEnabled
sur NavigationEventCallback
respecte désormais l'état activé de son répartiteur associé. Cela signifie qu'un rappel n'est considéré comme activé que si le rappel lui-même et son répartiteur (y compris ses ancêtres) sont activés. Cela garantit un contrôle hiérarchique cohérent sur l'activation des rappels. (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()
Une nouvelle méthode dispose()
a été introduite pour nettoyer correctement les dispatchers et leurs enfants. L'appel de dispose()
arrête les écouteurs pour éviter les fuites de mémoire, supprime de manière récursive tous les dispatchers enfants, supprime tous les rappels enregistrés auprès du dispatcher et le dissocie de son parent. Cela garantit que les ressources sont libérées correctement lorsque les dispatchers ne sont plus nécessaires. (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
Si une méthode publique est appelée sur un répartiteur supprimé, une IllegalStateException
est immédiatement générée. Cela permet d'éviter les échecs silencieux et aide les développeurs à identifier les utilisations incorrectes pendant le développement. (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
Remarque : Nous allons introduire un nouveau composable NavigationEventDispatcherOwner
qui gère automatiquement un répartiteur enfant dans l'UI Compose dans aosp/3692572. Toutefois, ce changement n'a pas été inclus dans la version actuelle et est prévu pour la prochaine.
Bibliothèque de test de navigation
- Ajoutez le module
navigationevent-testing
pour fournir des utilitaires de test dédiés à la bibliothèquenavigationevent
. (0e50b6) - Ajout de la classe utilitaire fictive
TestNavigationEventCallback
pour les tests. Il enregistre les appels de méthode de rappel et stocke les élémentsNavigationEvent
reçus pour faciliter la validation. (4a0246) - Ajout d'une fonction utilitaire factice
TestNavigationEvent
pour créer des instancesNavigationEvent
avec des valeurs par défaut, ce qui simplifie les tests unitaires pour le traitement des événements de navigation. (3b63f5) - Ajout de la classe utilitaire fictive
TestNavigationEventDispatcherOwner
pour les tests. Il suit le nombre d'événements de changement d'état (activé/désactivé) et de secours pour permettre la vérification des interactions dans les tests. (c8753e)
Modifications apportées à l'API
- Déplacez
NavigationEventInputHandler
deandroidMain
verscommonMain
pour le rendre disponible dans le code commun KMP. Ajout de nouvelles méthodespublic send*
pour distribuer les événements. Modifiez les fonctions de répartition surNavigationEventDispatcher
depublic
àinternal
. Les utilisateurs doivent désormais utiliserNavigationEventInputHandler
pour envoyer des événements. (Ia7114) NavigationInputHandler
a été renomméOnBackInvokedInputHandler
. (I63405)
Correction de bugs
- Refactorisez
NavigationEventDispatcher
pour réduire la surcharge en évitant les allocations de listes intermédiaires et en améliorant les performances de répartition des rappels. (I82702, I1a9d9) - Ajout d'annotations
@FloatRange
aux champstouchX
,touchY
etprogress
dansNavigationEvent
pour appliquer des plages de valeurs valides au moment de la compilation et améliorer la sécurité de l'API. (Iac0ec)
Version 1.0.0-alpha04
2 juillet 2025
Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha04
. La version 1.0.0-alpha04 contient ces commits.
Correction de bugs
- Utilisation de
implementedInJetBrainsFork
pournavigationevent-compose
et ajout d'une ciblecommonStubs
pour correspondre aux conventions Compose. Modification demandée par JetBrains. (f60c79) - Correction de l'application du plug-in de compilation Compose pour Kotlin/Native afin de garantir la génération correcte des stubs. Aucune incidence sur les API ni le comportement publics. (1890c9)
Version 1.0.0-alpha03
18 juin 2025
Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha03
. La version 1.0.0-alpha03 contient ces commits.
Nouvelles fonctionnalités
- Ajout d'un nouveau module
navigationevent-compose
pour prendre en charge les fonctionnalités Jetpack Compose dans la bibliothèquenavigationevent
. (980d78) NavigationEvent
Compose a ajouté une nouvelle composition localeLocalNavigationEventDispatcherOwner
. Elle renvoie une possibilité de valeur nulle pour mieux déterminer si elle est disponible dans la composition actuelle.NavigationEventHandler
génère désormais une erreur si le propriétaire associé est introuvable. (62ffda)NavigationEvent
Compose a ajouté un nouveau composableNavigationEventHandler
pour gérer les événements (prévisualisation du geste Retour). Il fournit unFlow
d'objetsNavigationEvent
qui doivent être collectés dans le lambda de suspension que vous fournissez 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
}
}
Modifications apportées à l'API
- Chaque
NavigationEventCallback
ne peut désormais être enregistré qu'auprès d'un seulNavigationEventDispatcher
à la fois. Si vous l'ajoutez à plusieurs dispatchers, une erreurIllegalStateException
se produit. Notez que ce comportement diffère deOnBackPressedDispatcher
, qui autorise plusieurs coordinateurs. (e82c19) isPassThrough
est désormais unval
pour éviter toute mutation pendant la navigation, ce qui pourrait interrompre l'envoi deNavigationEvent
. (I0b287)
Version 1.0.0-alpha02
4 juin 2025
Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha02
. La version 1.0.0-alpha02 contient ces commits.
Modifications apportées à l'API
- Remplacez le constructeur secondaire de
NavigationEventDispatcher
par des arguments par défaut. (I716a0) - Supprimez la propriété de priorité de
NavigationEventCallback
. Transmettez plutôt la priorité àNavigationEventDispatcher.addCallback()
. (I13cae)
Correction de bugs
- Correction d'une
ConcurrentModificationException
qui pouvait se produire lors de l'appel deNavigationEventCallback.remove()
en raison de la modification simultanée de la liste interne des éléments fermables. (b/420919815)
Version 1.0.0-alpha01
20 mai 2025
Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha01
. La version 1.0.0-alpha01 contient ces commits.
Nouvelles fonctionnalités
- La bibliothèque
androidx.navigationevent
fournit une API KMP-first pour gérer le retour système ainsi que la prévisualisation du Retour.NavigationEventDispatcher
sert d'API commune pour enregistrer une ou plusieurs instancesNavigationEventCallback
afin de recevoir les événements de retour système. - Cette couche se situe en dessous des API publiées précédemment dans
androidx.activity
et vise à remplacer de manière moins arbitraire l'utilisation des API Activity dans les composants de niveau supérieur ou l'utilisation directe des APIOnBackInvokedDispatcher
du framework Android. Les APIandroidx.activity
ont été réécrites au-dessus des API Navigation Event dans le cadre d'Activity 1.12.0-alpha01.