Segurança de tipo na DSL do Kotlin e no Navigation Compose

Você pode usar APIs com segurança de tipos integradas para fornecer segurança de tipo no momento da compilação para seus gráfico de navegação. Essas APIs ficam disponíveis quando o app usa a API Navigation Compose ou DSL do Kotlin de navegação. Eles estão disponíveis desde Navigation 2.8.0.

Essas APIs são equivalentes ao que o Safe Args fornece aos gráficos de navegação. criado usando XML.

Definir trajetos

Para usar rotas com segurança de tipos no Compose, primeiro defina o que é serializável classes ou objetos que representam suas rotas.

  • Objeto: usa um objeto para rotas sem argumentos.
  • Class: use uma classe ou classe de dados para rotas com argumentos.
  • KClass<T>: use se você não precisar transmitir argumentos, como uma classe. sem parâmetros ou uma classe em que todos os parâmetros têm valores padrão
    1. Por exemplo: Profile::class

Em ambos os casos, o objeto ou a classe precisa ser serializável.

Exemplo:

// Define a home route that doesn't take any arguments
@Serializable
object Home

// Define a profile route that takes an ID
@Serializable
data class Profile(val id: String)

Criar seu gráfico

Em seguida, você precisa definir seu gráfico de navegação. Usar o composable() para definir elementos combináveis como destinos no gráfico de navegação.

NavHost(navController, startDestination = Home) {
     composable<Home> {
         HomeScreen(onNavigateToProfile = { id ->
             navController.navigate(Profile(id))
         })
     }
     composable<Profile> { backStackEntry ->
         val profile: Profile = backStackEntry.toRoute()
         ProfileScreen(profile.id)
     }
}

Observe o seguinte neste exemplo:

  • composable() usa um parâmetro de tipo. Ou seja, composable<Profile>:
  • Definir o tipo de destino é uma abordagem mais eficiente do que passar um route string como em composable("profile").
  • A classe de rota define o tipo de cada argumento de navegação, como em val id: String, então não é necessário NavArgument.
  • Para a rota do perfil, o método de extensão toRoute() recria a Objeto Profile do NavBackStackEntry e da .

Para mais informações sobre como projetar um gráfico em geral, consulte a página "Design" na página do gráfico de navegação.

Por fim, você pode navegar até o elemento combinável usando navigate(). passando na instância do trajeto:

navController.navigate(Profile(id = 123))

Isso direciona o usuário para o destino composable<Profile> no gráfico de navegação. Todos os argumentos de navegação, como id, podem ser recebidos pelo reconstruindo Profile usando NavBackStackEntry.toRoute e lendo a propriedades.

Outros recursos