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- Por exemplo:
Profile::class
- Por exemplo:
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 emcomposable("profile")
. - A classe de rota define o tipo de cada argumento de navegação, como em
val id: String
, então não é necessárioNavArgument
. - Para a rota do perfil, o método de extensão
toRoute()
recria a ObjetoProfile
doNavBackStackEntry
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.
Navegar para a rota com segurança de tipos
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.