בטיחות הקלדה ב-Kotlin DSL וב-Navigation Compose

אתם יכולים להשתמש בממשקי API מובנים ללא סכנות בטיפוסים כדי לספק בזמן הידור בטיחות טיפוסים לתרשים הניווט. ממשקי ה-API האלה זמינים כשהאפליקציה משתמשת ב-Navigation Compose או ב-Navigation Kotlin DSL. הם זמינים החל מ-Navigation 2.8.0.

ממשקי ה-API האלה מקבילים למה ש-Safe Args מספק לתרשים הניווט שנוצר באמצעות XML.

הגדרת מסלולים

כדי להשתמש בנתיבים בטוחים מבחינת סוגים ב-Compose, קודם צריך להגדיר אובייקטים או כיתות שניתנים לסריאליזציה שמייצגים את הנתיבים.

כדי להגדיר אובייקטים שניתנים לסריאליזציה, משתמשים בהערה @Serializable שמספקת הפלאגין של Kotlin לסידור ברצף. כדי להוסיף את הפלאגין הזה לפרויקט, מוסיפים את יחסי התלות האלה.

אפשר להשתמש בכללים הבאים כדי להחליט באיזה סוג להשתמש במסלול:

  • אובייקט: משתמשים באובייקט למסלולים ללא ארגומנטים.
  • Class: משתמשים בכיתה או בכיתה נתונים למסלולים עם ארגומנטים.
  • KClass<T>: משתמשים באפשרות הזו אם אין צורך להעביר ארגומנטים, למשל כיתה ללא פרמטרים או כיתה שבה לכל הפרמטרים יש ערכי ברירת מחדל
    1. לדוגמה: 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 וקריאת המאפיינים שלו.

מקורות מידע נוספים