Sie können integrierte typsichere APIs verwenden, um die Sicherheit von Typen bei der Kompilierung
Navigationsdiagramm. Diese APIs sind verfügbar, wenn Ihre App die Navigationssysteme
Compose oder Navigation Kotlin DSL Sie sind ab dem Navigation
2.8.0
verfügbar.
Diese APIs entsprechen den Informationen, die sichere Args in Navigationsgrafiken bieten. die mit XML erstellt wurden.
Routen definieren
Um typsichere Routen in Compose zu verwenden, müssen Sie zuerst serialisierbare Routen definieren Klassen oder Objekte, die Ihre Routen darstellen.
- Objekt: Verwenden Sie ein Objekt für Routen ohne Argumente.
- Klasse: Verwenden Sie eine Klasse oder Datenklasse für Routen mit Argumenten.
KClass<T>
: Wählen Sie diese Option, wenn Sie keine Argumente übergeben müssen, z. B. eine Klasse. ohne Parameter oder eine Klasse, bei der alle Parameter Standardwerte haben <ph type="x-smartling-placeholder">- </ph>
- Beispiel:
Profile::class
- Beispiel:
In beiden Fällen muss das Objekt oder die Klasse serialisierbar sein.
Beispiel:
// 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)
Grafik erstellen
Als Nächstes müssen Sie Ihr Navigationsdiagramm definieren. Verwenden Sie den composable()
.
, um zusammensetzbare Funktionen als Ziele in Ihrer Navigationsgrafik zu definieren.
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile.id)
}
}
Sehen Sie sich in diesem Beispiel Folgendes an:
composable()
verwendet einen Typparameter. Das heißt:composable<Profile>
- Das Definieren des Zieltyps ist zuverlässiger als das Übergeben eines
route
String wie incomposable("profile")
. - Die Routenklasse definiert den Typ jedes Navigationsarguments, wie in
val id: String
, sodassNavArgument
nicht erforderlich ist. - Für die Profilroute erstellt die Erweiterungsmethode
toRoute()
dasProfile
-Objekt ausNavBackStackEntry
und dessen Argumente.
Weitere Informationen zum Entwerfen von Grafiken im Allgemeinen finden Sie im Artikel Diagramm entwerfen Ihres Navigationsdiagramms.
Zum Typ „sichere Route“ gehen
Schließlich können Sie Ihre zusammensetzbare Funktion über den navigate()
aufrufen.
, indem Sie die Instanz der Route übergeben:
navController.navigate(Profile(id = 123))
Dadurch wird der Nutzer zum Ziel composable<Profile>
im
Navigationsdiagramm. Alle Navigationsargumente, wie z. B. id
, können durch folgenden Befehl abgerufen werden:
Rekonstruktion von Profile
mit NavBackStackEntry.toRoute
und Lesen der
Eigenschaften.