אתם יכולים להשתמש בממשקי 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 וקריאת המאפיינים שלו.