Możesz używać wbudowanych interfejsów API, które zapewniają bezpieczeństwo podczas kompilacji w czasie kompilacji. Te interfejsy API są dostępne, gdy Twoja aplikacja korzysta z nawigacji tworzenia wiadomości lub interfejsu DSL nawigacji Kotlin. Są dostępne od Navigation
2.8.0
.
Te interfejsy API są odpowiednikiem funkcji Safe Args udostępnianych przez wykresy nawigacyjne wbudowanych w pliki XML do nawigacji.
Zdefiniuj trasy
Aby używać tras bezpiecznych dla typu w funkcji Compose, musisz najpierw zdefiniować klasy lub obiekty możliwe do serializacji, które reprezentują Twoje trasy.
- Object (Obiekt): używaj obiektu w przypadku tras bez argumentów.
- Class (Klasa): użyj klasy lub klasy danych dla tras z argumentami.
KClass<T>
: użyj tej opcji, jeśli nie musisz przekazywać argumentów, np. klasa bez parametrów lub klasa, w której wszystkie parametry mają wartości domyślne.- Przykład:
Profile::class
- Przykład:
W obu przypadkach obiekt lub klasa musi mieć możliwość serializacji.
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 zdefiniuj wykres nawigacyjny. Użyj funkcji 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)
}
}
Zaobserwuj w tym przykładzie:
composable()
przyjmuje parametr typu. Czylicomposable<Profile>
.- Definiowanie typu miejsca docelowego jest bardziej niezawodne niż przekazywanie ciągu znaków
route
(jak wcomposable("profile")
). - Klasa trasy określa typ każdego argumentu nawigacji, np.
val id: String
, więc nie ma potrzeby użycia funkcjiNavArgument
. - W przypadku trasy profilu metoda rozszerzenia
toRoute()
odtwarza obiektProfile
zNavBackStackEntry
i jego argumentów.
Więcej informacji o projektowaniu wykresu znajdziesz na stronie Projektowanie wykresu nawigacyjnego.
Nawiguj, aby wpisać bezpieczną trasę
Możesz też przejść do funkcji kompozycyjnej, używając funkcji navigate()
, przekazując wystąpienie trasy:
navController.navigate(Profile(id = 123))
Przekieruje użytkownika do miejsca docelowego composable<Profile>
na wykresie nawigacyjnym. Wszystkie argumenty nawigacyjne, takie jak id
, można uzyskać, zrekonstruując Profile
za pomocą funkcji NavBackStackEntry.toRoute
i odczytując jego właściwości.