navigationevent
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
13 de agosto de 2025 | - | - | - | 1.0.0-alpha06 |
Declarar dependências
Para adicionar uma dependência a navigationevent, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.
Adicione as dependências dos artefatos necessários ao arquivo build.gradle
do
seu app ou módulo:
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha06" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha06") }
Para mais informações sobre dependências, consulte Adicionar dependências de build.
Feedback
Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.
Consulte a documentação do Issue Tracker para saber mais.
Não há notas de versão para este artefato.
Versão 1.0
Versão 1.0.0-alpha06
13 de agosto de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha06
. A versão 1.0.0-alpha06 contém estas confirmações.
Novos recursos
API Passive Listeners
Agora, é possível transmitir informações contextuais personalizadas de qualquer host de navegação e ouvir passivamente mudanças de estado de gestos em qualquer lugar da sua interface. Isso permite animações contextuais para volta preditiva e outras navegações baseadas em gestos.
Esse recurso tem duas partes:
- Fornecimento de informações: use
NavigationEventInfo
para transmitir dados personalizados. - Estado de consumo: use
dispatcher.state
(NavigationEventState
) para observar o progresso e o contexto do gesto.
NavigationEventCallback
agora expõe o métodosetInfo(currentInfo, previousInfo)
para definir o contexto de gestos em uma chamada (I1d5e7, b/424470518).- O
NavigationEventHandler
adiciona uma nova sobrecarga que aceitacurrentInfo
epreviousInfo
, tornando-o a API principal para fornecer contexto em apps do Compose (I6ecd3, b/424470518).
Exemplo:
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
NavigationEventDispatcher
agora expõedispatcher.state
edispatcher.getState<T>()
(If7fae, Ia90ca, b/424470518). Essas APIs baseadas emStateFlow
permitem que qualquer interface observe o progresso do gesto e os dados contextuais sem processar o evento diretamente.
Exemplo:
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 */ }
}
Adicione a propriedade
progress
aNavigationEventState
(I7b196) que retornalatestEvent.progress
quando em andamento ou0F
caso contrário:val progress = state.progress
Adicione o elemento combinável
NavigationEventDispatcherOwner
para criar, vincular e descartar instâncias deNavigationEventDispatcher
de maneira hierárquica. Ative o controle dinâmico do estado ativado do dispatcher e a limpeza automática.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
Mudanças na API
- O parâmetro
isPassthrough
foi removido doNavigationEventCallback
. (I99028, b/424470518). - Os construtores
NavigationEventState
agora são internos. Para teste, atualize o estado (o padrão éIdle
) usando oDirectNavigationEventInputHandler
. ChamehandleOnStarted
ouhandleOnProgressed
para definir o estado comoInProgress
ehandleOnCompleted
ouhandleOnCancelled
para retornar aIdle
. Para atualizarNavigationEventInfo
, useNavigationEventCallback.setInfo
. (I93dca, b/424470518) - Adição de parâmetros padrão a
NavigationEvent
para facilitar a instanciação e simplificar os testes, que devem ser usados no lugar deTestNavigationEvent
. (I5dc49, I232f4) - Adicionamos um
TestNavigationEventCallback
para testar eventos de navegação com estados atuais/anteriores específicos. (Idd22e, b/424470518) - A classe
NavigationEventInputHandler
foi transformada em uma classe abstrata para substituir oAbstractNavigationEventInputHandler
anterior por uma implementação emDirectNavigationEventInputHandler
(Iadde5, Ifed40I3897c, b/432616296, b/435416924). - Os prefixos das funções
send*
emNavigationEventInputHandler
foram renomeados comohandle*
. (Iffcaf). OnBackInvokedInputHandler
agora estende oNavigationInputHandler
abstract
recém-criado. (Ib45aa).- Mudança em
NavigationEventDispatcherOwner
para exigir um dispatcher principal em que você precisa transmitir explicitamentenull
para criar um dispatcher raiz. (Ia6f64, b/431534103)
Correções de bugs
- Melhoria da eficiência ao evitar cópias de coleta em
NavigationEventDispatcher.dispose()
. (I4ab09). - Correção de um problema em que o
NavigationEventHandler
não respondia corretamente às mudanças no estado ativado. (Ia5268,I19bec, I5be5c, b/431534103)
Atualizações do Google Docs
- KDocs para
NavigationEvent
expandido para esclarecer sua função como um wrapper de eventos unificado e detalhar o comportamento das propriedades em diferentes tipos de navegação (gestos, cliques). (I91e8d) - Atualizamos a documentação para APIs do Compose de processamento de retorno do sistema (
BackHandler
,PredictiveBackHandler
,NavigationEventHandler
) para destacar o comportamento especificamente em relação à ordem de callback. (I7ab94, )
Atualização de dependências
- O
NavigationEvent
agora depende do Compose Runtime 1.9.0-beta03, o que permite que o artefatonavigationevent-compose
ofereça suporte a todas as metas do KMP. (Ia1b87).
Versão 1.0.0-alpha05
30 de julho de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha05
. A versão 1.0.0-alpha05 contém estas confirmações.
Suporte à hierarquia pai-filho:
Um NavigationEventDispatcher
agora pode ter despachantes pai e filho, formando uma estrutura de árvore hierárquica. Isso permite que os eventos de navegação sejam propagados e gerenciados de maneira mais flexível em componentes complexos da interface do Compose, refletindo a hierarquia estrutural da interface por meio de distribuidores encadeados. (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)
A propriedade hierárquica isEnabled
permite o controle de cima para baixo de um dispatcher. Quando isEnabled
é definido como false
em um dispatcher, ele desativa automaticamente todos os dispatchers descendentes. Esse recurso permite desativar ramificações inteiras do sistema de eventos de navegação de maneira eficiente. (I9e985).
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
Além disso, a propriedade isEnabled
em NavigationEventCallback
agora respeita o estado ativado do dispatcher associado. Isso significa que um callback é considerado ativado somente se ele e o dispatcher (incluindo os ancestrais) estiverem ativados, garantindo um controle hierárquico consistente sobre a ativação do 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()
Um novo método dispose()
foi introduzido para a limpeza adequada de despachantes e filhos deles. Chamar dispose()
interrompe os listeners para evitar vazamentos de memória, descarta recursivamente todos os despachantes filhos, remove todos os retornos de chamada registrados no despachante e desvincula do pai. Isso garante que os recursos sejam liberados corretamente quando os despachantes não forem mais necessários. (I9e985).
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
Se um método público for chamado em um dispatcher descartado, uma IllegalStateException
será gerada imediatamente. Isso evita falhas silenciosas e ajuda os desenvolvedores a identificar o uso inadequado durante o desenvolvimento. (Ic2dc3).
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
Observação:vamos lançar um novo elemento combinável NavigationEventDispatcherOwner
que gerencia automaticamente um dispatcher secundário na interface do Compose em aosp/3692572. No entanto, essa mudança não foi incluída na versão atual e está planejada para a próxima.
Biblioteca de testes de navegação
- Adição do módulo
navigationevent-testing
para fornecer utilitários de teste dedicados à bibliotecanavigationevent
. (0e50b6) - Adicione a classe utilitária falsa
TestNavigationEventCallback
para testes. Ele grava chamadas de método de callback e armazena itensNavigationEvent
recebidos para oferecer suporte à verificação. (4a0246) - Adicione a função utilitária falsa
TestNavigationEvent
para criar instânciasNavigationEvent
com valores padrão, simplificando os testes de unidade para o processamento de eventos de navegação. (3b63f5). - Adicione a classe utilitária falsa
TestNavigationEventDispatcherOwner
para testes. Ele rastreia contagens de eventos de fallback e de mudança de estado ativado para oferecer suporte à verificação de interação em testes. (c8753e)
Mudanças na API
- Mova
NavigationEventInputHandler
deandroidMain
paracommonMain
para disponibilizar no código comum do KMP. Adicione novos métodospublic send*
para enviar eventos. Mude as funções de envio emNavigationEventDispatcher
depublic
parainternal
. Agora, os usuários precisam usarNavigationEventInputHandler
para enviar eventos. (Ia7114) NavigationInputHandler
foi renomeado comoOnBackInvokedInputHandler
. (I63405).
Correções de bugs
- Refatoração de
NavigationEventDispatcher
para reduzir a sobrecarga, evitando alocações de listas intermediárias e melhorando o desempenho de envio de callback. (I82702, I1a9d9). - Adicione anotações
@FloatRange
aos campostouchX
,touchY
eprogress
emNavigationEvent
para aplicar intervalos de valores válidos no momento da compilação e melhorar a segurança da API. (Iac0ec).
Versão 1.0.0-alpha04
2 de julho de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha04
. A versão 1.0.0-alpha04 contém estas confirmações.
Correções de bugs
- Usamos
implementedInJetBrainsFork
paranavigationevent-compose
e adicionamos um destinocommonStubs
para corresponder às convenções do Compose. Mudança solicitada pela JetBrains. (f60c79). - Correção da aplicação do plug-in do compilador do Compose para Kotlin/Native para garantir a geração correta de stubs. Não há impacto no comportamento ou nas APIs públicas. (1890c9)
Versão 1.0.0-alpha03
18 de junho de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha03
. A versão 1.0.0-alpha03 contém estas confirmações.
Novos recursos
- Introduzimos um novo módulo
navigationevent-compose
para oferecer suporte aos recursos do Jetpack Compose na bibliotecanavigationevent
. (980d78) - O
NavigationEvent
Compose adicionou uma nova composição localLocalNavigationEventDispatcherOwner
. Ele retorna um valor anulável para determinar melhor se ele está disponível na composição atual.NavigationEventHandler
vai gerar um erro se o proprietário não for encontrado. (62ffda) - O
NavigationEvent
Compose adicionou um novo elemento combinávelNavigationEventHandler
para processar eventos (gesto de volta preditivo). Ele fornece umFlow
de objetosNavigationEvent
que precisam ser coletados na lambda de suspensão fornecida 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
}
}
Mudanças na API
- Cada
NavigationEventCallback
agora pode ser registrado com apenas umNavigationEventDispatcher
por vez. Adicionar a vários distribuidores gera umIllegalStateException
. Esse comportamento é diferente deOnBackPressedDispatcher
, que permite vários agentes. (e82c19) - Transformamos
isPassThrough
em umval
para evitar mutações durante a navegação, o que poderia interromper o envio deNavigationEvent
. (I0b287)
Versão 1.0.0-alpha02
4 de junho de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha02
. A versão 1.0.0-alpha02 contém estas confirmações.
Mudanças na API
- Substitua o construtor secundário de
NavigationEventDispatcher
por argumentos padrão. (I716a0) - Remova a propriedade de prioridade de
NavigationEventCallback
. Em vez disso, transmita a prioridade paraNavigationEventDispatcher.addCallback()
. (I13cae).
Correções de bugs
- Foi corrigido um
ConcurrentModificationException
que podia ocorrer quandoNavigationEventCallback.remove()
era chamado devido à modificação simultânea da lista interna de elementos fecháveis. (b/420919815)
Versão 1.0.0-alpha01
20 de maio de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha01
. A versão 1.0.0-alpha01 contém estas confirmações.
Novos recursos
- A biblioteca
androidx.navigationevent
fornece uma API KMP-first para processar o retorno do sistema e o retorno preditivo. ONavigationEventDispatcher
serve como uma API comum para registrar uma ou mais instânciasNavigationEventCallback
para receber eventos de retorno do sistema. - Essa camada fica abaixo das APIs lançadas anteriormente em
androidx.activity
e tem como objetivo ser uma substituição menos opinativa para o uso das APIs Activity em componentes de nível superior ou o uso direto das APIsOnBackInvokedDispatcher
do framework Android. As APIsandroidx.activity
foram reescritas com base nas APIs Navigation Event como parte da Activity 1.12.0-alpha01.