navigationevent
Ultimo aggiornamento | Release stabile | Candidato per la release | Release beta | Release alpha |
---|---|---|---|---|
13 agosto 2025 | - | - | - | 1.0.0-alpha06 |
Dichiarazione di dipendenze
Per aggiungere una dipendenza da navigationevent, devi aggiungere il Repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli artefatti che ti servono nel file build.gradle
per
la tua app o il tuo modulo:
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha06" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha06") }
Per saperne di più sulle dipendenze, consulta Aggiungi dipendenze di build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa libreria. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa libreria. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Non sono disponibili note di rilascio per questo artefatto.
Versione 1.0
Versione 1.0.0-alpha06
13 agosto 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha06
viene rilasciata. La versione 1.0.0-alpha06 contiene questi commit.
Nuove funzionalità
API Passive Listeners
Ora puoi trasmettere informazioni contestuali personalizzate da qualsiasi host di navigazione e ascoltare passivamente le modifiche dello stato dei gesti da qualsiasi punto dell'interfaccia utente. Ciò consente animazioni sensibili al contesto per il gesto Indietro predittivo e altre navigazioni basate su gesti.
Questa funzionalità è composta da due parti:
- Providing Info: utilizza
NavigationEventInfo
per trasferire dati personalizzati. - Stato di consumo: utilizza
dispatcher.state
(NavigationEventState
) per osservare l'avanzamento e il contesto del gesto.
NavigationEventCallback
ora espone il metodosetInfo(currentInfo, previousInfo)
per impostare il contesto dei gesti in una sola chiamata (I1d5e7, b/424470518).NavigationEventHandler
aggiunge un nuovo overload che accettacurrentInfo
epreviousInfo
, rendendola l'API principale per fornire il contesto nelle app Compose (I6ecd3, b/424470518).
Esempio:
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
NavigationEventDispatcher
ora esponedispatcher.state
edispatcher.getState<T>()
(If7fae, Ia90ca, b/424470518). Queste API basate suStateFlow
consentono a qualsiasi UI di osservare l'avanzamento dei gesti e i dati contestuali senza gestire direttamente l'evento.
Esempio:
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 */ }
}
Aggiungi la proprietà
progress
aNavigationEventState
(I7b196) che restituiscelatestEvent.progress
quando è in corso o0F
in caso contrario:val progress = state.progress
Aggiungi il composable
NavigationEventDispatcherOwner
per creare, collegare ed eliminare le istanzeNavigationEventDispatcher
in modo gerarchico. Consente il controllo dinamico dello stato abilitato del dispatcher e la pulizia automatica.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
Modifiche alle API
- Il parametro
isPassthrough
è stato rimosso daNavigationEventCallback
. (I99028, b/424470518) - I costruttori
NavigationEventState
sono ora interni. Per i test, aggiorna lo stato (il valore predefinito èIdle
) tramiteDirectNavigationEventInputHandler
. ChiamahandleOnStarted
ohandleOnProgressed
per impostare lo stato suInProgress
ehandleOnCompleted
ohandleOnCancelled
per riportarlo aIdle
. Per aggiornareNavigationEventInfo
, utilizzaNavigationEventCallback.setInfo
. (I93dca, b/424470518) - Sono stati aggiunti parametri predefiniti a
NavigationEvent
per consentire un'istanza più semplice e semplificare i test, che devono essere utilizzati al posto diTestNavigationEvent
. (I5dc49, I232f4) - È stato aggiunto un
TestNavigationEventCallback
per testare gli eventi di navigazione con stati attuali/precedenti specifici. (Idd22e, b/424470518) NavigationEventInputHandler
è stata trasformata in una classe astratta per sostituire la precedenteAbstractNavigationEventInputHandler
con un'implementazione inDirectNavigationEventInputHandler
(Iadde5, Ifed40I3897c, b/432616296, b/435416924)- I prefissi delle funzioni
send*
inNavigationEventInputHandler
sono stati rinominati inhandle*
. (Iffcaf) OnBackInvokedInputHandler
ora estende il nuovoabstract
NavigationInputHandler
. (Ib45aa)- È stato modificato
NavigationEventDispatcherOwner
in modo da richiedere un dispatcher principale in cui devi passare esplicitamentenull
per creare un dispatcher radice. (Ia6f64, b/431534103)
Correzioni di bug
- Maggiore efficienza evitando le copie delle raccolte in
NavigationEventDispatcher.dispose()
. (I4ab09) - Risolto un problema per cui
NavigationEventHandler
non rispondeva correttamente alle modifiche del suo stato di attivazione. (Ia5268,I19bec, I5be5c, b/431534103)
Aggiornamenti di Documenti
- KDocs per
NavigationEvent
è stato ampliato per chiarire il suo ruolo di wrapper di eventi unificato e il comportamento dettagliato delle proprietà nei diversi tipi di navigazione (gesti, clic). (I91e8d) - È stata aggiornata la documentazione per la gestione del pulsante Indietro del sistema delle API Compose (
BackHandler
,PredictiveBackHandler
,NavigationEventHandler
) per descrivere il comportamento specifico relativo all'ordine di callback. (I7ab94, )
Aggiornamento delle dipendenze
NavigationEvent
ora dipende da Compose Runtime 1.9.0-beta03, che consente all'artefattonavigationevent-compose
di supportare tutti i target KMP. (Ia1b87)
Versione 1.0.0-alpha05
30 luglio 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha05
viene rilasciata. La versione 1.0.0-alpha05 contiene questi commit.
Supporto della gerarchia padre-figlio:
Un NavigationEventDispatcher
ora può avere dispatcher principali e secondari, formando una struttura ad albero gerarchica. In questo modo, gli eventi di navigazione possono propagarsi ed essere gestiti in modo più flessibile nei componenti UI complessi di Compose riflettendo la gerarchia strutturale della UI tramite dispatcher concatenati. (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 proprietà gerarchica isEnabled
consente il controllo dall'alto verso il basso di un dispatcher. Quando isEnabled
è impostato su false
in un dispatcher, tutti i dispatcher secondari vengono disattivati automaticamente. Questa funzionalità consente di disattivare in modo efficiente interi rami del sistema di eventi di navigazione. (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
Inoltre, la proprietà isEnabled
su NavigationEventCallback
ora rispetta lo stato di attivazione del dispatcher associato. Ciò significa che un callback viene considerato abilitato solo se sono abilitati sia il callback stesso sia il relativo dispatcher (inclusi i relativi antenati), garantendo un controllo gerarchico coerente sull'attivazione del callback. (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()
È stato introdotto un nuovo metodo dispose()
per la pulizia corretta dei dispatcher e dei relativi processi secondari. La chiamata dispose()
interrompe gli ascoltatori per evitare perdite di memoria, elimina in modo ricorsivo tutti i dispatcher secondari, rimuove tutti i callback registrati nel dispatcher e lo scollega dal relativo elemento principale. In questo modo, le risorse vengono rilasciate correttamente quando i dispatcher non sono più necessari. (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
Se viene chiamato un metodo pubblico su un dispatcher eliminato, viene generata immediatamente un'eccezione IllegalStateException
. In questo modo si evitano errori silenziosi e si aiuta gli sviluppatori a identificare un utilizzo improprio durante lo sviluppo. (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
Nota:introdurremo un nuovo NavigationEventDispatcherOwner
composable che gestisce automaticamente un dispatcher secondario all'interno della UI di Compose in aosp/3692572. Tuttavia, questa modifica non è stata inclusa nel taglio della release attuale ed è prevista per la prossima.
Libreria di test di navigazione
- Aggiungi il modulo
navigationevent-testing
per fornire utilità di test dedicate per la librerianavigationevent
. (0e50b6) - Aggiungi la classe di utilità fittizia
TestNavigationEventCallback
per i test. Registra le chiamate del metodo di callback e memorizza gli elementiNavigationEvent
ricevuti per supportare la verifica. (4a0246) - Aggiungi la funzione di utilità fittizia
TestNavigationEvent
per creare istanzeNavigationEvent
con valori predefiniti, semplificando i test unitari per l'elaborazione degli eventi di navigazione. (3b63f5) - Aggiungi la classe di utilità fittizia
TestNavigationEventDispatcherOwner
per i test. Monitora i conteggi degli eventi di fallback e di modifica dello stato abilitato per supportare la verifica dell'interazione nei test. (c8753e)
Modifiche alle API
- Sposta
NavigationEventInputHandler
daandroidMain
acommonMain
per renderlo disponibile nel codice comune KMP. Aggiungi nuovi metodipublic send*
per l'invio degli eventi. Modifica le funzioni di distribuzione suNavigationEventDispatcher
dapublic
ainternal
; ora gli utenti devono utilizzareNavigationEventInputHandler
per inviare eventi. (Ia7114) - Rinomina
NavigationInputHandler
inOnBackInvokedInputHandler
. (I63405)
Correzioni di bug
- Refactor
NavigationEventDispatcher
per ridurre l'overhead evitando allocazioni di elenchi intermedi e migliorando le prestazioni di distribuzione dei callback. (I82702, I1a9d9) - Aggiungi annotazioni
@FloatRange
ai campitouchX
,touchY
eprogress
inNavigationEvent
per applicare intervalli di valori validi in fase di compilazione e migliorare la sicurezza dell'API. (Iac0ec)
Versione 1.0.0-alpha04
2 luglio 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha04
viene rilasciata. La versione 1.0.0-alpha04 contiene questi commit.
Correzioni di bug
- Utilizzato
implementedInJetBrainsFork
pernavigationevent-compose
e aggiunto un targetcommonStubs
per rispettare le convenzioni di Compose. Modifica richiesta da JetBrains. (f60c79) - È stata corretta l'applicazione del plug-in del compilatore Compose per Kotlin/Native per garantire la corretta generazione di stub. Nessun impatto sulle API pubbliche o sul comportamento. (1890c9)
Versione 1.0.0-alpha03
18 giugno 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha03
viene rilasciata. La versione 1.0.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stato introdotto un nuovo modulo
navigationevent-compose
per supportare le funzionalità di Jetpack Compose nella librerianavigationevent
. (980d78) NavigationEvent
Compose ha aggiunto una nuova composizione localeLocalNavigationEventDispatcherOwner
. Restituisce un valore Nullable per determinare meglio se è disponibile nella composizione corrente.NavigationEventHandler
ora genererà un errore se il proprietario sottostante non viene trovato. (62ffda)NavigationEvent
Compose ha aggiunto un nuovoNavigationEventHandler
composable per gestire gli eventi (gesto Indietro predittivo). Fornisce unFlow
diNavigationEvent
oggetti che devono essere raccolti nella lambda di sospensione che fornisci 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
}
}
Modifiche alle API
- Ogni
NavigationEventCallback
ora può essere registrato con un soloNavigationEventDispatcher
alla volta; l'aggiunta a più dispatcher genera unIllegalStateException
. Tieni presente che questo comportamento è diverso daOnBackPressedDispatcher
, che consente più dispatcher. (e82c19) - È stato creato
isPassThrough
unval
per impedire la mutazione durante la navigazione, che potrebbe interrompere l'invio diNavigationEvent
. (I0b287)
Versione 1.0.0-alpha02
4 giugno 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha02
viene rilasciata. La versione 1.0.0-alpha02 contiene questi commit.
Modifiche alle API
- Sostituisci il costruttore secondario di
NavigationEventDispatcher
con gli argomenti predefiniti. (I716a0) - Rimuovi la proprietà prioritaria da
NavigationEventCallback
. Trasferisci la priorità aNavigationEventDispatcher.addCallback()
. (I13cae)
Correzioni di bug
- È stato corretto un
ConcurrentModificationException
che poteva verificarsi quando veniva chiamatoNavigationEventCallback.remove()
a causa della modifica simultanea dell'elenco interno degli elementi chiudibili. (b/420919815)
Versione 1.0.0-alpha01
20 maggio 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha01
viene rilasciata. La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
- La libreria
androidx.navigationevent
fornisce un'API KMP-first per la gestione del pulsante Indietro del sistema e di Predictive Back.NavigationEventDispatcher
funge da API comuni per registrare una o più istanze diNavigationEventCallback
per la ricezione di eventi di sistema indietro. - Questo livello si trova sotto le API rilasciate in precedenza in
androidx.activity
e mira a essere un sostituto meno soggettivo per l'utilizzo delle API Activity nei componenti di livello superiore o per l'utilizzo diretto delle API del framework AndroidOnBackInvokedDispatcher
. Le APIandroidx.activity
sono state riscritte in base alle API Navigation Event nell'ambito di Activity 1.12.0-alpha01.