אתם יכולים להשתמש בממשקי API מובנים ללא סכנות בטיפוסים כדי לספק בזמן הידור בטיחות טיפוסים לתרשים הניווט. ממשקי ה-API האלה זמינים כשהאפליקציה משתמשת ב-Navigation Compose או ב-Navigation Kotlin DSL. הם זמינים החל מ-Navigation
2.8.0
.
ממשקי ה-API האלה מקבילים למה ש-Safe Args מספק לתרשים הניווט שנוצר באמצעות XML.
הגדרת מסלולים
כדי להשתמש בנתיבים בטוחים מבחינת סוגים ב-Compose, קודם צריך להגדיר אובייקטים או כיתות שניתנים לסריאליזציה שמייצגים את הנתיבים.
כדי להגדיר אובייקטים שניתנים לסריאליזציה, משתמשים בהערה @Serializable
שמספקת הפלאגין של Kotlin לסידור ברצף.
כדי להוסיף את הפלאגין הזה לפרויקט, מוסיפים את יחסי התלות האלה.
אפשר להשתמש בכללים הבאים כדי להחליט באיזה סוג להשתמש במסלול:
- אובייקט: משתמשים באובייקט למסלולים ללא ארגומנטים.
- Class: משתמשים בכיתה או בכיתה נתונים למסלולים עם ארגומנטים.
KClass<T>
: משתמשים באפשרות הזו אם אין צורך להעביר ארגומנטים, למשל כיתה ללא פרמטרים או כיתה שבה לכל הפרמטרים יש ערכי ברירת מחדל- לדוגמה:
Profile::class
- לדוגמה:
בכל המקרים, האובייקט או הכיתה חייבים להיות ניתנים לסריאליזציה.
לדוגמה:
// 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)
יצירת תרשים
בשלב הבא, צריך להגדיר את תרשים הניווט. משתמשים בפונקציה composable()
כדי להגדיר רכיבים מורכבים כיעדים בתרשים הניווט.
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile.id)
}
}
שימו לב לדברים הבאים בדוגמה הזו:
composable()
מקבל פרמטר מסוג. כלומר,composable<Profile>
.- הגדרת סוג היעד היא גישה חזקה יותר מאשר העברת מחרוזת של
route
, כמו ב-composable("profile")
. - סוג כל ארגומנט ניווט מוגדר על ידי סוג המסלול, כמו ב-
val id: String
, כך שאין צורך ב-NavArgument
. - עבור מסלול הפרופיל, שיטת התוסף
toRoute()
יוצרת מחדש את האובייקטProfile
מ-NavBackStackEntry
ומארגומנטים שלו.
מידע נוסף על עיצוב התרשים באופן כללי זמין בדף עיצוב התרשים של הניווט.
ניווט לנתיב בטוח לסוג
לבסוף, אפשר לנווט אל ה-composable באמצעות הפונקציה navigate()
, על ידי העברת המופע של המסלול:
navController.navigate(Profile(id = 123))
הפעולה הזו תעביר את המשתמש ליעד composable<Profile>
בתרשים הניווט. אפשר לקבל כל ארגומנט ניווט, כמו id
, על ידי שחזור של Profile
באמצעות NavBackStackEntry.toRoute
וקריאת המאפיינים שלו.