Eingabesicherheit in Kotlin DSL und Navigation Compose
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Sie können integrierte typsichere APIs verwenden, um für Ihren Navigationsgraphen eine typsichere Kompilierung zu ermöglichen. Diese APIs sind verfügbar, wenn Ihre App Navigation Compose oder Navigation Kotlin DSL verwendet. Sie sind seit dem Navigation
2.8.0 verfügbar.
Diese APIs entsprechen dem, was Safe Args für Navigationsgraphen bietet, die mit XML erstellt wurden.
Routen definieren
Wenn Sie typsichere Routen in Compose verwenden möchten, müssen Sie zuerst serialisierbare Klassen oder Objekte definieren, die Ihre Routen darstellen.
Anhand der folgenden Regeln können Sie entscheiden, welchen Typ Sie für Ihre Route verwenden möchten:
Object: Verwenden Sie ein Objekt für Routen ohne Argumente.
Klasse: Verwenden Sie eine Klasse oder Datenklasse für Routen mit Argumenten.
KClass<T>: Verwenden Sie diesen Parameter, wenn Sie keine Argumente übergeben müssen, z. B. für eine Klasse ohne Parameter oder eine Klasse, bei der alle Parameter Standardwerte haben.
Beispiel: Profile::class
In allen Fällen muss das Objekt oder die Klasse serialisierbar sein.
Beispiel:
// Define a home route that doesn't take any arguments@SerializableobjectHome// Define a profile route that takes an ID@SerializabledataclassProfile(valid:String)
Diagramm erstellen
Als Nächstes müssen Sie Ihren Navigationsgraphen definieren. Verwenden Sie die Funktion composable(), um Elemente als Ziele in Ihrem Navigationsgraphen zu definieren.
composable() nimmt einen Typparameter an. Der Wert ist composable<Profile>.
Das Definieren des Zieltyps ist ein robusterer Ansatz als das Übergeben eines Strings vom Typ route wie in composable("profile").
Die Routenklasse definiert den Typ jedes Navigationsarguments, wie in val id:
String. NavArgument ist daher nicht erforderlich.
Für die Profilroute erstellt die toRoute()-Erweiterungsmethode das Profile-Objekt aus NavBackStackEntry und seinen Argumenten neu.
Weitere Informationen zum Erstellen von Navigationsdiagrammen finden Sie auf der Seite Navigationsdiagramm erstellen.
Zu einer sicheren Route für die Eingabe von Text gehen
Schließlich können Sie mit der Funktion navigate() zur Zusammenstellung wechseln, indem Sie die Instanz der Route übergeben:
navController.navigate(Profile(id=123))
Dadurch gelangt der Nutzer zum Ziel composable<Profile> im Navigationsgraphen. Navigationsargumente wie id können abgerufen werden, indem Profile mithilfe von NavBackStackEntry.toRoute rekonstruiert und die Eigenschaften gelesen werden.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-27 (UTC)."],[],[],null,["# Type safety in Kotlin DSL and Navigation Compose\n\nYou can use built-in type safe APIs to provide compile-time type safety for your\nnavigation graph. These APIs are available when your app uses the [Navigation\nCompose](/jetpack/compose/navigation) or [Navigation Kotlin DSL](/guide/navigation/navigation-kotlin-dsl). They are available as of `Navigation\n2.8.0`.\n\nThese APIs are equivalent to what [Safe Args](/guide/navigation/navigation-pass-data#Safe-args) provides to navigation graphs\nbuilt using XML.\n\nDefine routes\n-------------\n\nTo use type-safe routes in Compose, you first need to define serializable\nclasses or objects that represent your routes.\n\nTo define serializable objects use `@Serializable` annotation provided by the\n[Kotlin Serialization plugin](https://kotlinlang.org/docs/serialization.html).\nThis plugin can be added to your project by [adding these\ndependencies](/guide/navigation#set-up).\n\nUse the following rules to decide what type to use for your route:\n\n- **Object**: Use an object for routes without arguments.\n- **Class**: Use a class or data class for routes with arguments.\n- **`KClass\u003cT\u003e`** : Use if you don't need to pass arguments, such as a class without parameters, or a class where all parameters have default values\n 1. For example: `Profile::class`\n\nIn all cases the object or class must be serializable.\n\nFor example: \n\n // Define a home route that doesn't take any arguments\n @Serializable\n object Home\n\n // Define a profile route that takes an ID\n @Serializable\n data class Profile(val id: String)\n\n### Build your graph\n\nNext, you need to define your navigation graph. Use the [`composable()`](/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.collections.Map,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2))\nfunction to define composables as destinations in your navigation graph. \n\n NavHost(navController, startDestination = Home) {\n composable\u003cHome\u003e {\n HomeScreen(onNavigateToProfile = { id -\u003e\n navController.navigate(Profile(id))\n })\n }\n composable\u003cProfile\u003e { backStackEntry -\u003e\n val profile: Profile = backStackEntry.toRoute()\n ProfileScreen(profile.id)\n }\n }\n\nObserve the following in this example:\n\n- `composable()` takes a type parameter. That is, `composable\u003cProfile\u003e`.\n- Defining the destination type is a more robust approach than passing a [`route`](/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.String,kotlin.collections.List,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2)) [string](/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.String,kotlin.collections.List,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2)) as in `composable(\"profile\")`.\n- The route class defines the type of each navigation argument, as in `val id:\n String`, so there's no need for [`NavArgument`](/reference/kotlin/androidx/navigation/NavArgument).\n- For the profile route, the `toRoute()` extension method recreates the `Profile` object from the [`NavBackStackEntry`](/reference/androidx/navigation/NavBackStackEntry) and its arguments.\n\nFor more information on how to design your graph in general, see the [Design\nyour Navigation graph](/guide/navigation/design) page.\n\n### Navigate to type safe route\n\nFinally, you can navigate to your composable using the [`navigate()`](/reference/kotlin/androidx/navigation/NavGraphBuilder#(androidx.navigation.NavGraphBuilder).composable(kotlin.collections.Map,kotlin.collections.List,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function1,kotlin.Function2))\nfunction by passing in the instance of the route: \n\n navController.navigate(Profile(id = 123))\n\nThis navigates the user to the `composable\u003cProfile\u003e` destination in the\nnavigation graph. Any navigation arguments, such as `id`, can be obtained by\nreconstructing `Profile` using `NavBackStackEntry.toRoute` and reading its\nproperties.\n| **Important:** Because the parameters of the data class are typed, when you pass an instance of that class to `navigate()`, the arguments are necessarily type safe.\n\n### Additional resources\n\n- [Design your navigation graph](/guide/navigation/design)\n- [Use your navigation graph](/guide/navigation/use-graph)"]]