Wpisz zabezpieczenia w Kotlin DSL i w nawigacji – tworzenie

Możesz użyć wbudowanych interfejsów API zapewniających bezpieczne typy, aby zapewnić bezpieczeństwo typów w czasie kompilowania wykres nawigacyjny. Te interfejsy API są dostępne, gdy aplikacja korzysta z Nawigacji Compose lub Navigation Kotlin DSL. Są dostępne od Navigation 2.8.0.

Te interfejsy API są odpowiednikiem funkcji Safe Args z wykresami nawigacyjnymi oparty na języku XML.

Zdefiniuj trasy

Aby używać w funkcji tworzenia tras odpowiednich dla typu, musisz najpierw zdefiniować serializowalny klas lub obiektów, które reprezentują Twoje trasy.

  • Obiekt: użyj obiektu w przypadku tras bez argumentów.
  • Klasa: użyj klasy lub klasy danych w przypadku tras z argumentami.
  • KClass<T>: użyj tej opcji, jeśli nie musisz przekazywać argumentów, takich jak klasa. bez parametrów lub klasa, w której wszystkie parametry mają wartości domyślne
      .
    1. Na przykład: Profile::class

W obu przypadkach obiekt lub klasa musi być serializowalna.

Na przykład:

// 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)

Utwórz wykres

Następnie musisz zdefiniować wykres nawigacyjny. Korzystanie z composable() , aby zdefiniować elementy kompozycyjne jako miejsca docelowe na wykresie nawigacyjnym.

NavHost(navController, startDestination = Home) {
     composable<Home> {
         HomeScreen(onNavigateToProfile = { id ->
             navController.navigate(Profile(id))
         })
     }
     composable<Profile> { backStackEntry ->
         val profile: Profile = backStackEntry.toRoute()
         ProfileScreen(profile.id)
     }
}

Zwróć uwagę na te kwestie w tym przykładzie:

  • Funkcja composable() przyjmuje parametr typu. To znaczy, composable<Profile>
  • Definiowanie typu miejsca docelowego jest bardziej restrykcyjne niż przekazanie route ciąg znaków, na przykład composable("profile").
  • Klasa tras określa typ każdego argumentu nawigacji, na przykład val id: String, więc NavArgument nie jest potrzebny.
  • W przypadku trasy profilu metoda rozszerzenia toRoute() odtwarza Profile obiekt z NavBackStackEntry i jego .

Więcej informacji o ogólnym projektowaniu wykresów znajdziesz w artykule Projektowanie wykresów stronie z wykresem nawigacji.

Możesz też przejść do funkcji kompozycyjnej przy użyciu interfejsu navigate() funkcji, przekazując wystąpienie trasy:

navController.navigate(Profile(id = 123))

Spowoduje to przejście użytkownika do miejsca docelowego composable<Profile> w tabeli wykres nawigacyjny. Wszystkie argumenty nawigacyjne, takie jak id, można uzyskać przez rekonstruowanie zbioru Profile za pomocą NavBackStackEntry.toRoute i odczyt jego danych usług.

Dodatkowe materiały