Eingabesicherheit in Kotlin DSL und Navigation Compose

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>
    1. Beispiel: Profile::class

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 in composable("profile").
  • Die Routenklasse definiert den Typ jedes Navigationsarguments, wie in val id: String, sodass NavArgument nicht erforderlich ist.
  • Für die Profilroute erstellt die Erweiterungsmethode toRoute() das Profile-Objekt aus NavBackStackEntry und dessen Argumente.

Weitere Informationen zum Entwerfen von Grafiken im Allgemeinen finden Sie im Artikel Diagramm entwerfen Ihres Navigationsdiagramms.

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.

Weitere Informationen