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- .
- Na przykład:
Profile::class
- Na przykład:
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ładcomposable("profile")
. - Klasa tras określa typ każdego argumentu nawigacji, na przykład
val id: String
, więcNavArgument
nie jest potrzebny. - W przypadku trasy profilu metoda rozszerzenia
toRoute()
odtwarzaProfile
obiekt zNavBackStackEntry
i jego .
Więcej informacji o ogólnym projektowaniu wykresów znajdziesz w artykule Projektowanie wykresów stronie z wykresem nawigacji.
Nawiguj, aby wpisać bezpieczną trasę
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.