navigationevent
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
10 de setembro de 2025 | - | - | - | 1.0.0-alpha08 |
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-alpha08" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha08") }
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-alpha08
10 de setembro de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha08
. A versão 1.0.0-alpha08 contém estes commits.
Novos recursos
- Introduzir uma API
NavigationEventHandler
baseada em lambda que substitui o manipulador baseado em fluxo. Processe gestos de voltar e avançar com callbacks simples em vez de coletar fluxos, reduzindo o código boilerplate e evitando problemas de cancelamento. ForneçaNavigationBackHandler
eNavigationForwardHandler
como APIs de conveniência segmentadas. Remova oNavigationEventHandler
baseado em fluxo e migre para os novos callbacks. (I23bac, b/436248277). - Permite que listeners passivos acessem a pilha de retorno de navegação completa usando informações de retorno combinadas. Permite que as UIs renderizem prévias e histórico de navegação aninhado em vez de se limitarem ao callback mais alto. (I7a510, b/436248277).
- Introduzir um modelo explícito de retorno/atual/avanço para esclarecer o estado da navegação e oferecer suporte à navegação para frente com gerenciadores aninhados. (Ib86da, b/420443609)
- Adicione métodos
onForward*
eisForwardEnabled
aNavigationEventCallback
. (Ic100f, b/436248290) - Adicione suporte à navegação para frente em
NavigationEventInput
. (I5734b).
Mudanças na API
- Ative o teste de eventos de navegação para frente com
TestNavigationEventCallback
. Use os hooksisForwardEnabled
eonForward*
. (I21fb5, b/420443609) - Renomeie os callbacks
onEvent*
paraonBack*
emNavEvent
. (I228b3, b/436248290) - Converter
SwipeEdge
em uma classe in-line. (Id5e01). - Faça com que a biblioteca
navigationevent
seja interoperável com Java. Todas as APIs públicas agora estão totalmente acessíveis no código Java, permitindo uma integração perfeita em projetos de linguagem mista ou somente em Java. (Ibc944,I5465f, I9fb1e, b/440532890b/443040294) - Esclarecemos as funções da API renomeando
NavigationEventCallback
paraNavigationEventHandler
. Essa mudança reflete melhor a finalidade da classe de processar gestos de navegação em várias etapas. O métodoaddCallback
correspondente agora éaddHandler
. (I2492a, b/443040331)
Correções de bugs
- Impedir que o retorno de fallback seja executado na navegação para frente. (I74814, b/436248290).
- Adição de suporte à navegação preditiva para frente. As APIs
NavigationEvent
agora processam gestos para trás e para frente, permitindo animações consistentes para as duas direções de navegação. (Idc98c, b/436248290) - Evitar uma falha de
IllegalStateException
durante a recomposição quando umNavigationEventDispatcherOwner
filho é removido. (Iff50c, b/412629020) - Os ouvintes passivos agora podem acessar a pilha de retorno de navegação completa usando informações de retorno combinadas, permitindo que as UIs renderizem prévias e histórico de navegação aninhado em vez de se limitarem ao callback mais alto. (I7a510, b/436248277).
Versão 1.0.0-alpha07
27 de agosto de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha07
. A versão 1.0.0-alpha07 contém estes commits.
Mudanças na API
- O
NavigationEventDispatcher.onHasEnabledCallbacksChanged
foi removido. (I50e97). - Tornamos
NavigationEventCallback.onEventCompleted()
abstrato. (I36b38). - Mude os métodos
NavigationEventCallback#on*
paraprotected
. Atualize o código de chamada para substituir esses valores. (I6b691). - Renomeie as funções
DirectNavigationEventInput
. (Iffb62). NavigationEventInput.onAttach
foi renomeado comoonAdded
. (I2d0b8).NavigationEventInput.onDetach
foi renomeado comoonRemoved
. (I2d0b8).NavigationEventInputHandler
foi renomeado comoNavigationEventInput
. (I676a4).@EmptySuper
foi adicionada aNavigationEventInput.onHasEnabledCallbacksChanged
. (If9853).- Implemente
onAttach
emNavigationEventInputHandler
. (I03648) - Implemente
onDetach
emNavigationEventInputHandler
. (I03648) - Ativar o
NavigationEventCallback
por padrão após a criação. (Ic0188). NavigationEventInput.addOnHasEnabledCallbacksChangedCallback
foi substituída porNavigationEventInput.onHasEnabledCallbacksChanged
. (I64e93).- Exigir a linha de execução principal para
NavigationEventDispatcher.addInput
. (Ic2930) - Exigir a linha de execução principal para
NavigationEventDispatcher.removeInput
. (Ic2930) - O
Dispatcher.addOnHasEnabledCallbacksChangedCallback
foi removido. Substitua peloDispatcher.onHasEnabledCallbacksChanged
(Ida3e3, b/436530096)
Correções de bugs
- Correção de um bug em que adicionar um manipulador já anexado ou remover um não anexado acionava uma lógica de ciclo de vida incorreta. (I9e47b).
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 estes commits.
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 testar, 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, 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 estes commits.
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 despachantes 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 despachar 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 estes commits.
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 estes commits.
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 estes commits.
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 estes commits.
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.