O Navigation Event é uma biblioteca que oferece uma solução multiplataforma do Kotlin (KMP) para integrar eventos de navegação no nível do sistema ao seu aplicativo. Ela foi projetada para ser a camada fundamental no processamento de rotas de navegação em várias plataformas compatíveis.
Principais conceitos
O sistema de eventos de navegação é criado em torno de um modelo centralizado de despachante-processador, geralmente usado em uma hierarquia pai-filho para mapear estruturas de UI complexas, como as encontradas no Jetpack Compose.
NavigationEventDispatcher
O NavigationEventDispatcher é a classe central responsável por
gerenciar todos os consumidores de eventos de navegação registrados
(NavigationEventHandler) e orquestrar o fluxo de eventos.
Em uma configuração hierárquica, todos os despachantes na mesma cadeia compartilham um único
NavigationEventProcessor, que gerencia o estado global e garante uma ordem de
despacho única e unificada em toda a árvore.
NavigationEventHandler
NavigationEventHandler é uma classe abstrata que recebe e processa
eventos de navegação enviados por um NavigationEventDispatcher. Ele define
métodos de callback que correspondem a diferentes estágios de um ciclo de vida
de gesto de navegação, como quando um gesto começa, progride, é concluído ou é
cancelado.
Os manipuladores podem responder a esses eventos para atualizar a interface ou o estado do aplicativo em resposta às ações de navegação do usuário. Vários manipuladores podem ser registrados com um dispatcher e são invocados com base na prioridade e na ordem de registro.
NavigationEvent
NavigationEvent é uma classe de dados que contém os detalhes do
gesto de navegação.
NavigationEventInfo
NavigationEventInfo é uma classe abstrata que fornece informações contextuais sobre um estado de navegação.
NavigationEventInput
NavigationEventInput é uma classe abstrata para componentes que geram
e enviam eventos de navegação. Ele atua como o lado de "entrada" do sistema
de navegação, traduzindo eventos específicos da plataforma (como gestos de retorno do sistema ou
cliques de botão) em eventos padronizados que podem ser enviados para um
NavigationEventDispatcher.
Rotas e gatilhos compatíveis
O sistema de eventos de navegação foi projetado para abranger mais do que apenas o botão "Voltar" do sistema, com designs que oferecem suporte a várias direções de navegação e métodos de entrada em várias plataformas.
Direções aceitas
Plataformas diferentes oferecem suporte a direções de navegação variadas:
Plataforma |
Voltar |
Acima |
Avançar |
Início |
Smartphones Android |
✅ |
✅ |
🚫 |
✅ |
Tablets Android |
✅ |
✅ |
🚫 |
✅ |
Web (navegador) |
✅ |
✅ |
✅ |
🚫 |
iOS (iPhone/iPad) |
✅ |
🚫 |
✅ |
✅ |
Acionadores compatíveis
O processamento de entrada é feito por vários mecanismos em cada plataforma:
Acionador |
Smartphone Android |
Web (navegador) |
iOS (iPhone/iPad) |
Botão "Voltar" do teclado |
✅ Voltar |
❓ |
✅ Voltar |
Botão "Voltar" de software |
🚫 |
✅ Voltar |
✅ Voltar |
Botão de aumentar o software |
✅ Aumento |
🚫 |
🚫 |
Gesto da esquerda |
✅ Voltar |
❓ |
✅ Voltar |
Gesto da direita |
✅ Voltar |
❓ |
✅ Encaminhar |
Gesto de baixo para cima |
✅ Início |
🚫 |
✅ Início |