كتابة الأمان في Kotlin DSL والتنقل Compose

يمكنك استخدام واجهات برمجة التطبيقات الآمنة المضمنة من النوع لتوفير أمان من نوع وقت التجميع الرسم البياني للتنقل. تتوفر واجهات برمجة التطبيقات هذه عندما يستخدم تطبيقك زر التنقل إنشاء أو التنقل Kotlin DSL. وستتوفر اعتبارًا من Navigation 2.8.0.

تتشابه واجهات برمجة التطبيقات هذه مع ما تقدّمه الوسيطات الآمنة للرسومات البيانية للتنقّل. التي تم إنشاؤها باستخدام XML.

تحديد المسارات

لاستخدام مسارات آمنة من حيث الكتابة في Compose، يجب أولاً تحديد قيمة تسلسلية الفئات أو الكائنات التي تمثل مساراتك.

  • كائن: استخدِم كائنًا للمسارات بدون وسيطات.
  • الفئة: استخدِم فئة أو فئة بيانات للمسارات التي تحتوي على وسيطات.
  • 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 وقراءة المواقع.

مصادر إضافية