navigationevent
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
8 de outubro de 2025 | - | - | 1.0.0-beta01 | - |
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-beta01" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-beta01") }
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-beta01
8 de outubro de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-beta01
. A versão 1.0.0-beta01 contém estes commits.
Mudanças na API
- Correção da anotação
FloatRange
paraNavigationEvent.touchX
eNavigationEvent.touchY
. Esses valores representam coordenadas de pixel absolutas e não têm um limite superior de1.0
. (I4b205, b/445989313). - Refatore o elemento combinável
NavigationEventDispatcherOwner
pararememberNavigationEventDispatcherOwner
. Agora, a função retorna oNavigationEventDispatcherOwner
diretamente. Para fornecer esse proprietário a uma subcomposição, useCompositionLocalProvider
. (I874b2, b/444446629)
Versão 1.0.0-alpha09
24 de setembro de 2025
Lançamento de androidx.navigationevent:navigationevent-*:1.0.0-alpha09
. A versão 1.0.0-alpha09 contém estes commits.
Mudanças na API
- Use o objeto singleton
NavigationEventTransitionState.Idle
diretamente em vez de instanciarIdle()
. (Ic7d9e, b/444734264). - Torne os construtores de conveniência internos e receba instâncias usando
NavigationEventDispatcher.history
público em vez de construção direta. (I3b7e0, b/444734264) - É necessário criar
NavigationEventState
usandorememberNavigationEventState
. O construtor agora é interno. (Ie143c, b/444734264). - Adote
onBackCompletedFallback
, substitua os usos defallbackOnBackPressed
e o parâmetro do construtor. O comportamento não muda. É invocado apenas em eventos de retorno concluídos e não processados. (Idabe9, b/444734264) - O construtor principal de
NavigationEventHistory(mergedHistory, currentIndex)
agora éinternal
. Os consumidores externos precisam usar os construtores públicos (o vazio ou o baseado em partição) para criar instâncias. (I1c047, b/444734264) - Fazer com que
View.setViewTreeNavigationEventDispatcherOwner
aceite um proprietário anulável (Ic9eb6, b/444436762). NavigationEventInfo
agora é umabstract class
em vez de uminterface
. Atualize todas as implementações personalizadas para herdar da classe (por exemplo,data class MyInfo : NavigationEventInfo()
). (I1e59c, b/444734264)- A propriedade
NavigationEventDispatcher.state
e a funçãogetState<T>()
legadas foram removidas. Use os novos fluxos separadosdispatcher.transitionState
(para o progresso do gesto) edispatcher.history
(para a pilha de navegação). (Ic2ceb, b/444734264) - O callback
NavigationEventInput.onInfoChanged(...)
é substituído. Implemente o novo callbackonHistoryChanged(history: NavigationEventHistory)
para receber atualizações como um único objetoNavigationEventHistory
. (I23e0b, b/444734264) - Introduza um novo
NavigationEventDispatcher.history
StateFlow
global. Esse fluxo não genérico permite que os observadores se inscrevam apenas para receber mudanças na pilha de navegação e permanece estável durante o progresso do gesto. É a contrapartida detransitionState
. (I1db10, b/444734264). - Introduza um novo
NavigationEventDispatcher.transitionState
StateFlow
global. Esse fluxo não genérico permite que os observadores se inscrevam apenas no estado do gesto físico (Idle/InProgress), separado do histórico. (I171fa, b/444734264) - Apresente a classe
NavigationEventHistoryState
. Essa será a API principal para observar o histórico de informações de navegação, separada do estado do gesto. (I81ca5, b/444734264) NavigationEvent
agora está marcado como@Immutable
, permitindo que o Compose Compiler otimize recomposições. (If78c7, b/444734264)- As APIs de manipulador
navigationevent-compose
foram atualizadas.NavigationEventHandler
eNavigationBackHandler
(e variantes) agora são compatíveis com uma nova sobrecarga que aceitaNavigationEventState
s içados. As sobrecargas simples (que usamcurrentInfo
) são preservadas e agora usam esse novo modelo de estado internamente. (Ic3251, b/444734264) - Adicione o novo
@Stable
NavigationEventState<T>
aonavigationevent-compose
. Esse objeto combina o histórico local com o estado do gesto local e será o principal link entrerememberNavigationEventState
eNavigationEventHandler
. (Ifb69f, b/444734264) - Adicione uma nova propriedade
transitionState: TransitionState
pública e somente leitura aNavigationEventHandler
. Os manipuladores agora mantêm o próprio estado de transição, que pode ser observado por sistemas externos. (I9acd2, b/444734264) - Apresente a nova classe sealed
TransitionState
. Essa será a API principal para observar o estado do gesto, separada do histórico de navegação. (Id4beb, b/444734264). - Exponha
currentInfo
,backInfo
eforwardInfo
como propriedades públicas somente leitura emNavigationEventHandler
. (Ia7636, b/444734264) - As implementações de
NavigationEventHandler
agora precisam fornecer um valorinitialInfo: T
ao construtor de base. (Idcfea, b/444734264) - Substitua
OnBackInvokedInput
porOnBackInvokedOverlayInput
ouOnBackInvokedDefaultInput
. (I5323f, b/428948766) - Marque
NavigationEventState
como@Immutable
. Isso melhora a performance do Compose, garantindo que os combináveis que observam esse estado possam pular a recomposição corretamente. (I399c8) - Renomeie
NavigationEventInfo.NotProvided
paraNavigationEventInfo.None;
e atualize as referências. Nenhuma mudança de comportamento. (I5e2d4). NavigationEventInfo
agora está marcado como@Immutable
, permitindo que o Compose Compiler otimize recomposições. (I7c112).- Melhorar a ergonomia do Java com uma interface divertida para o fallback de conclusão de volta. (I8a860).
onHasEnabledHandlerChanged
foi renomeado comoonHasEnabledHandlersChanged
. Isso esclarece que o callback informa o estado de ativação coletiva de todos os manipuladores, não apenas um. (I1af61, b/443711297).- Remova
hasEnabledHandler()
deNavigationEventDispatcher;
e useNavigationEventInput.onHasEnabledHandlersChanged
. (Idef72, b/443711297) - Adicione o callback
onInfoChanged
aNavigationEventInput
para notificar os listeners sobre mudanças no histórico de navegação. Isso fornece o contexto completo das pilhas atuais, de volta e para frente, permitindo que as entradas reajam às informações contextuais. (I69a8b, b/443282983) - Transformar o
swipeEdge
doNavigationEvent
em um@IntDef
(Icee54, b/443950342) - Adicione um parâmetro
priority
aNavigationEventDispatcher.addInput
para limitar um dispatcher a uma prioridade. Eventos comoonHasEnabledCallbacksChanged
agora são acionados apenas quando os callbacks nessa prioridade mudam. (I3e488, b/443711297). - Renomeie o parâmetro
NavigationEventDispatcher
deparentDispatcher
para parent para maior clareza. (Id4f1f, b/443801782) - Remoção de
NavigationEventPriority
em favor de@IntDef
para usuários do Java (I10a9f, b/440514265). - Aplicar o contrato do gerenciador de navegação. Se o
NavigationEventHandler
definirisBackEnabled
ouisForwardEnabled
comotrue
, agora você precisará substituironBackCompleted
ouonForwardCompleted
, respectivamente. As implementações padrão agora geram uma exceção para evitar falhas silenciosas. (I17c62). - Impor valores de prioridade válidos ao adicionar manipuladores de eventos de navegação. Chamar
addHandler
com uma prioridade não compatível agora vai gerar umIllegalArgumentException
, fornecendo feedback imediato para uso incorreto em todas as plataformas de destino. (I3c474).
Correções de bugs
- Faça
addHandler
ser idempotente e ignore registros duplicados. (I052aa, b/444734264) - Mantenha as propriedades
NavigationEventState
sincronizadas durante a recomposição. (Ib3b4d, b/444734264) - Verifique se
NavigationEventInputs
recebe as informações contextuais atuais (atual, voltar, avançar) imediatamente após o registro. (Ie65bf, b/443282983).
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 ativa animações baseadas no contexto 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.