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

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

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

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

כדי להשתמש במסלולים בטוחים מסוג 'כתיבה', צריך קודם להגדיר אפשרות סריאלית סיווגים או אובייקטים שמייצגים את המסלולים שלכם.

  • אובייקט: שימוש באובייקט לנתיבים ללא ארגומנטים.
  • מחלקה: שימוש במחלקה או במחלקת נתונים למסלולים עם ארגומנטים.
  • 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 ארגומנטים.

לקבלת מידע נוסף על עיצוב התרשים שלך באופן כללי, אפשר לעיין במאמר עיצוב דף תרשים הניווט.

לבסוף, תוכלו לעבור לתוכן הקומפוזבילי באמצעות navigate() על ידי מעבר במופע של הנתיב:

navController.navigate(Profile(id = 123))

הפעולה הזו תעביר את המשתמש ליעד composable<Profile> תרשים ניווט. כל ארגומנט ניווט, כמו id, אפשר לקבל באמצעות משחזרים את Profile באמצעות NavBackStackEntry.toRoute וקוראים נכסים.

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