Puoi utilizzare le API integrate sicure per la sicurezza dei tipi per garantire la sicurezza del tipo in fase di compilazione
grafico di navigazione. Queste API sono disponibili quando la tua app utilizza il Navigatore
Compose o Navigator Kotlin DSL. Sono disponibili dal giorno Navigation
2.8.0
.
Queste API corrispondono alle funzionalità fornite dagli argomenti sicuri per i grafici di navigazione creati utilizzando XML.
Definisci route
Per utilizzare route sicure per il tipo in Compose, devi prima definire la possibilità di serializzare che rappresentano le tue route.
- Oggetto: utilizza un oggetto per le route senza argomenti.
- Classe: utilizza una classe o una classe di dati per le route con argomenti.
KClass<T>
: da utilizzare se non devi passare argomenti, ad esempio una classe senza parametri o una classe in cui tutti i parametri hanno valori predefiniti- Ad esempio:
Profile::class
- Ad esempio:
In ogni caso, l'oggetto o la classe deve essere serializzabile.
Ad esempio:
// 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)
Crea il tuo grafico
Poi devi definire il grafico di navigazione. Utilizza la composable()
per definire gli elementi componibili come destinazioni nel grafico di navigazione.
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile.id)
}
}
In questo esempio, osserva quanto segue:
composable()
richiede un parametro di tipo. Vale a dire checomposable<Profile>
.- La definizione del tipo di destinazione è un approccio più efficace rispetto al passaggio di una
route
string come incomposable("profile")
. - La classe route definisce il tipo di ogni argomento di navigazione, ad esempio
val id: String
, quindiNavArgument
non è necessario. - Per la route del profilo, il metodo di estensione
toRoute()
ricrea il valoreProfile
oggetto daNavBackStackEntry
e dai relativi argomenti.
Per ulteriori informazioni su come progettare il tuo grafico in generale, consulta la sezione Progettazione pagina del grafico di navigazione.
Naviga per digitare un percorso sicuro
Infine, puoi accedere al componibile utilizzando navigate()
passando l'istanza della route:
navController.navigate(Profile(id = 123))
L'utente viene indirizzato alla destinazione composable<Profile>
in
grafico di navigazione. Eventuali argomenti di navigazione, ad esempio id
, possono essere ottenuti
ricostruire Profile
utilizzando NavBackStackEntry.toRoute
e leggerne
proprietà.