Safe Args

تتمثل الطريقة الموصى بها للتنقل بين الوجهات في استخدام المكون الإضافي Safe Args Gradle. يُنشئ هذا المكون الإضافي فئات الكائنات والمنشئات التي تمكّن التنقل الآمن بين الوجهات. استخدم الوسيطات الآمنة للتنقل وتمرير البيانات بين الوجهات.

تفعيل الوسيطات الآمنة

لإضافة الوسيطات الآمنة إلى مشروعك، ضمِّن classpath التالي في ملف build.gradle ذي المستوى الأعلى:

رائع

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.7.7"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.7.7"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

يجب أيضًا تطبيق أحد المكوّنَين الإضافيَين المتاحَين.

لإنشاء رمز لغة Java مناسب لوحدات Java وKotlin المختلطة، يمكنك إضافة هذا السطر إلى ملف build.gradle في التطبيق أو الوحدة:

رائع

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

وبدلاً من ذلك، لإنشاء رمز Kotlin المناسب للوحدات الخاصة بلغة Kotlin فقط، أضِف ما يلي:

رائع

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

يجب أن يكون لديك android.useAndroidX=true في ملف gradle.properties وفقًا لنقل البيانات إلى AndroidX.

الرمز الذي تم إنشاؤه

بعد تفعيل Safe Args، تحتوي التعليمة البرمجية التي تم إنشاؤها على فئات وطرق لكل إجراء حددته بالإضافة إلى الفئات التي تتوافق مع كل وجهة إرسال واستلام.

تنشئ Safe Args فئة لكل وجهة ينشأ فيها إجراء. يضيف اسم الفئة الذي تم إنشاؤه "Directions" (الاتجاهات) إلى اسم فئة الوجهة الأصلي. على سبيل المثال، إذا كانت الوجهة الأصلية باسم SpecifyAmountFragment، تتم تسمية الفئة التي يتم إنشاؤها SpecifyAmountFragmentDirections.

تحتوي الفئة التي يتم إنشاؤها على طريقة ثابتة لكل إجراء محدّد في الوجهة الأصلية. تستخدم هذه الطريقة أي مَعلمات إجراء محدّدة كوسيطات، وتعرض كائن NavDirections يمكنك تمريره مباشرةً إلى navigate().

مثال على الوسيطات الآمنة

على سبيل المثال، ضع في الاعتبار رسمًا بيانيًا للتنقل يتضمن إجراء واحد يربط بين وجهتين، SpecifyAmountFragment وConfirmationFragment. تأخذ السمة ConfirmationFragment معلَمة float واحدة توفّرها كجزء من الإجراء.

تنشئ Safe Args فئة SpecifyAmountFragmentDirections باستخدام طريقة واحدة، وهي actionSpecifyAmountFragmentToConfirmationFragment()، وفئة داخلية تسمى ActionSpecifyAmountFragmentToConfirmationFragment. تُستمَد الفئة الداخلية من NavDirections وتخزِّن معرّف الإجراء المرتبط ومَعلمة float. بعد ذلك، يمكن تمرير الكائن NavDirections الذي تم عرضه مباشرةً إلى navigate()، كما هو موضّح في المثال التالي:

Kotlin

override fun onClick(v: View) {
    val amount: Float = ...
    val action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment(amount)
    v.findNavController().navigate(action)
}

Java

@Override
public void onClick(View view) {
    float amount = ...;
    action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment(amount);
    Navigation.findNavController(view).navigate(action);
}

لمزيد من المعلومات حول تمرير البيانات بين الوجهات باستخدام الوسيطات الآمنة، يُرجى الاطّلاع على المقالة استخدام الوسيطات الآمنة لتمرير البيانات ذات النوع الآمن.

ضمان أمان الكتابة باستخدام الوسيطات الآمنة

يمكنك التنقل بين الوجهات باستخدام المكوّن الإضافي Safe Args Gradle. ينشئ هذا المكون الإضافي فئات الكائنات والمنشئات البسيطة التي تمكن التنقل الآمن النوع والوسيطة التي يتم تمريرها بين الوجهات.

لإضافة الوسيطات الآمنة إلى مشروعك، ضمِّن classpath التالي في ملف build.gradle ذي المستوى الأعلى:

رائع

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.7.7"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.7.7"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

يجب أيضًا تطبيق أحد المكوّنَين الإضافيَين المتاحَين.

لإنشاء رمز لغة Java مناسب لوحدات Java وKotlin المختلطة، يمكنك إضافة هذا السطر إلى ملف build.gradle في التطبيق أو الوحدة:

رائع

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

وبدلاً من ذلك، لإنشاء رمز Kotlin المناسب للوحدات الخاصة بلغة Kotlin فقط، أضِف ما يلي:

رائع

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

يجب أن يكون لديك android.useAndroidX=true في ملف gradle.properties وفقًا لنقل البيانات إلى AndroidX.

بعد تمكين Safe Args، ينشئ المكون الإضافي رمزًا برمجيًا يحتوي على فئات وطرق لكل إجراء حددته. لكل إجراء، تنشئ Safe Args أيضًا فئة لكل وجهة تنشأ، وهي الوجهة التي ينشأ منها الإجراء. اسم الفئة الذي تم إنشاؤه هو مزيج من اسم فئة الوجهة المنشأ وكلمة "Directions" (الاتجاهات). على سبيل المثال، إذا كانت الوجهة باسم SpecifyAmountFragment، يتم تسمية الفئة التي يتم إنشاؤها باسم SpecifyAmountFragmentDirections. تحتوي الفئة التي يتم إنشاؤها على طريقة ثابتة لكل إجراء محدّد في الوجهة الأصلية. تستخدم هذه الطريقة أي معلَمات إجراءات محدّدة كوسيطات، وتعرض كائن NavDirections يمكنك تمريره إلى navigate().

كمثال، لنفترض أن لدينا رسمًا بيانيًا للتنقل يتضمن إجراء واحد يربط الوجهة الأصلية، SpecifyAmountFragment، بوجهة الاستلام، ConfirmationFragment.

تنشئ Safe Args فئة SpecifyAmountFragmentDirections بطريقة واحدة، وهي actionSpecifyAmountFragmentToConfirmationFragment()، تعرض كائن NavDirections. يمكن بعد ذلك تمرير عنصر NavDirections الذي تم عرضه مباشرةً إلى navigate()، كما هو موضّح في المثال التالي:

Kotlin

override fun onClick(view: View) {
    val action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment()
    view.findNavController().navigate(action)
}

Java

@Override
public void onClick(View view) {
    NavDirections action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment();
    Navigation.findNavController(view).navigate(action);
}

لمزيد من المعلومات حول تمرير البيانات بين الوجهات باستخدام الوسيطات الآمنة، يُرجى الاطّلاع على القسم استخدام الوسيطات الآمنة لتمرير البيانات ذات النوع الآمن في تمرير البيانات بين الوجهات.