Você pode usar APIs de tipo seguro integradas para oferecer segurança de tipos no momento da compilação ao
gráfico de navegação. Essas APIs estão disponíveis quando o app usa o Navigation
Compose ou a DSL de navegação do Kotlin. Eles estão disponíveis a partir de Navigation
2.8.0
.
Essas APIs são equivalentes ao que o Safe Args fornece para os gráficos de navegação integrados aos arquivos de recursos XML
Definir rotas
Para usar rotas com segurança de tipo no Compose, primeiro é necessário definir classes ou objetos serializáveis que representem suas rotas.
- Object: use 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.
Por 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. Use a funçã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 robusta do que transmitir uma
string
route
como emcomposable("profile")
. - A classe de rota define o tipo de cada argumento de navegação, como em
val id: String
. Portanto, não é necessário usarNavArgument
. - Para a rota de perfil, o método de extensão
toRoute()
recria o objetoProfile
doNavBackStackEntry
e dos argumentos dele.
Para mais informações sobre como projetar seu gráfico em geral, consulte a página Criar o 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 a função navigate()
transmitindo a instância da rota:
navController.navigate(Profile(id = 123))
Isso leva o usuário ao destino composable<Profile>
no
gráfico de navegação. Todos os argumentos de navegação, como id
, podem ser recebidos
reconstruindo Profile
usando NavBackStackEntry.toRoute
e lendo as
propriedades dele.