يمكنك استخدام واجهات برمجة التطبيقات المضمّنة التي تتضمّن أمانًا من النوع لتوفير أمان من النوع في وقت الترجمة ل graph
التنقّل. تتوفّر واجهات برمجة التطبيقات هذه عندما يستخدم تطبيقك Navigation
Compose أو Navigation Kotlin DSL. وأصبحت هذه الميزة متاحة اعتبارًا من Navigation
2.8.0
.
هذه واجهات برمجة التطبيقات مكافئة لما تقدّمه Safe Args لرسومات التنقّل المُنشأة باستخدام XML.
تحديد المسارات
لاستخدام المسارات الآمنة من حيث النوع في أداة Compose، عليك أولاً تحديد klassen أو عناصر قابلة للتسلسل تمثّل مساراتك.
لتعريف العناصر القابلة للتسلسل، استخدِم التعليق التوضيحي @Serializable
الذي يوفّره مكوّن Kotlin Serialization الإضافي.
يمكن إضافة هذا المكوّن الإضافي إلى مشروعك من خلال إضافة هذه التبعيات.
استخدِم القواعد التالية لتحديد النوع الذي تريد استخدامه لمسارك:
- كائن: استخدِم كائنًا للمسارات بدون وسيطات.
- الفئة: استخدِم فئة أو فئة بيانات للمسارات التي تحتوي على وسيطات.
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
ووسيطاته.
لمزيد من المعلومات حول كيفية تصميم الرسم البياني بشكل عام، يُرجى الاطّلاع على صفحة تصميم الرسم البياني للتنقّل.
الانتقال إلى مسار آمن للكتابة
أخيرًا، يمكنك الانتقال إلى العنصر القابل للتجميع باستخدام الدالة navigate()
من خلال إدخال مثيل المسار:
navController.navigate(Profile(id = 123))
يؤدي ذلك إلى توجيه المستخدِم إلى الوجهة composable<Profile>
في
رسم بياني التنقّل. يمكن الحصول على أي وسيطات تنقّل، مثل id
، من خلال
إعادة إنشاء Profile
باستخدام NavBackStackEntry.toRoute
وقراءة
خصائصه.