يمكنك تقديم معلومات إضافية أو تطبيق المبدأ نفسه على وجهات باستخدام فئة NavEntryDecorator. تغلف هذه الفئة كل
NavEntry في حزمة احتياطية باستخدام دالة قابلة للإنشاء. بعبارة أخرى، تزيّن هذه السمة محتوى الإدخال.
إنشاء أداة تزيين مخصّصة
لإنشاء أداة تزيين، عليك توسيع فئة NavEntryDecorator وتجاوز الطرق التالية:
-
decorate: دالة lambda قابلة للإنشاء يتم استدعاؤها لكلNavEntryفي سجلّ الرجوع. تتلقّىNavEntryكمعلّمة. يتيح لك ذلك إنشاء عناصر حالة يتم ربطها بمفتاحcontentKeyالخاص بالإدخال. يمكنك استخدامCompositionLocalProviderلتوفير التبعيات لمحتوى الإدخال. يمكنك أيضًا تضمين المحتوى في دالة قابلة للإنشاء أو تشغيل آثار جانبية. يجب دائمًا استدعاءentry.Content()داخل هذه الطريقة. -
onPop: دالة ردّ نداء يتم استدعاؤها عند إزالةNavEntryمن سجلّ الرجوع ومغادرة التركيب. يتلقّى هذا الحقلcontentKeyالخاص بالإدخال الذي تمت إزالته. استخدِمcontentKeyلتحديد أي حالة مرتبطة بهذا الإدخال وتنظيفها.
يوضّح المثال التالي كيفية توسيع الفئة NavEntryDecorator لإنشاء أداة تزيين مخصّصة.
// import androidx.navigation3.runtime.NavEntryDecorator class CustomNavEntryDecorator<T : Any> : NavEntryDecorator<T>( decorate = { entry -> Log.d("CustomNavEntryDecorator", "entry with ${entry.contentKey} entered composition and was decorated") entry.Content() }, onPop = { contentKey -> Log.d("CustomNavEntryDecorator", "entry with $contentKey was popped") } )
إذا كان العنصر الزخرفي يحتاج إلى الوصول إلى الحالة، أنشئ دالة قابلة للإنشاء تنشئ هذه الحالة ثم استخدِمها لإنشاء العنصر الزخرفي. للاطّلاع على مثال
للتنفيذ، راجِع الرمز المصدر
rememberSaveableStateHolderNavEntryDecorator. يؤدي ذلك إلى إنشاء حالة، وهي SaveableStateHolder، واستخدامها لإنشاء أداة التزيين.
تزيين الأنشطة السابقة
بعد إنشاء NavEntryDecorator، يمكنك تزيين الإدخالات في سجلّ التصفّح الخلفي بإحدى الطريقتَين التاليتَين:
- استخدِم
rememberDecoratedNavEntries. تكون هذه الدالة مفيدة عندما يكون لديك عدة حِزم سابقة، كل منها يتضمّن مجموعة خاصة من أدوات التزيين (راجِع وصفة التعليمات البرمجية هذه لمزيد من التفاصيل). تُرجع الدالة قائمة مزيّنة منNavEntryيمكنك استخدامها معNavDisplay. - قدِّم أداة التزيين مباشرةً إلى
NavDisplayباستخدام المَعلمةentryDecorators. تُجريNavDisplayمكالماتrememberDecoratedNavEntriesفي الخلفية وتعرض الإدخالات المعدَّلة.
تضمين أداة التزيين التلقائية
تتضمّن Navigation 3 أداة تزيين تلقائية باسم SaveableStateHolderNavEntryDecorator تتيح الاحتفاظ بحالة NavEntry عند حدوث تغييرات في الإعدادات أو إيقاف العملية. وهو يغلّف محتوى NavEntry بعنصر SaveableStateProvider، ما يتيح عمل طلبات rememberSaveable داخل محتوى NavEntry بشكل صحيح.
ما لم يوفّر الديكور SaveableStateProvider، عليك تضمين SaveableStateHolderNavEntryDecorator كأول ديكور في قائمة الديكورات التي تقدّمها. تم إنشاؤها باستخدام
rememberSaveableStateHolderNavEntryDecorator.
مثلاً:
// import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator NavDisplay( entryDecorators = listOf( rememberSaveableStateHolderNavEntryDecorator(), remember { CustomNavEntryDecorator() } ), // ... )
حالات استخدام أداة التزيين
يمكنك استخدام أداة تزيين لإجراء ما يلي:
- أنشئ عنصرًا تابعًا لكل
NavEntryفي حزمة الخلف. على سبيل المثال، ينشئViewModelStoreNavEntryDecoratorViewModelStoreلكلNavEntry. - تحديد نطاق عنصر لعدة
NavEntry. على سبيل المثال، لمشاركةViewModelبين عدة إدخالات. - نفِّذ الإجراء نفسه لعدة
NavEntry. على سبيل المثال، لتنفيذ عمليات التسجيل أو تصحيح الأخطاء أو التتبُّع لكل إدخال. - لفّ
NavEntrys باستخدام الدالة البرمجية القابلة للإنشاء نفسها. - تنظيف الحالة المرتبطة بـ
NavEntryعلى سبيل المثال، عند إزالة إدخال من سجلّ الرجوع، يمحوViewModelStoreNavEntryDecoratorViewModelStoreالمرتبط به.
لا تستخدِم أداة تزيين للأغراض التالية:
- تمرير عنصر تابع إلى
NavEntryواحد - توفير التبعيات التي يكون نطاقها أوسع من حزمة الخلف.
في كلتا الحالتين، مرِّر العنصر التابع مباشرةً عند إنشاء NavEntry بدلاً من ذلك.
للاطّلاع على المزيد من أمثلة الرموز، راجِع NavEntryDecorator.