Safe Args

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

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

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

Groovy

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

Kotlin

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

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

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

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Groovy

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

Kotlin

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

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

رمز تم إنشاؤه

بعد تفعيل "الوسيطات الآمنة"، يحتوي الرمز الذي أنشأته على فئات وطرق كل إجراء قمت بتحديده، بالإضافة إلى الفئات التي تتوافق مع كل عملية إرسال وتتلقى الوجهة.

تُنشئ أداة Safe Args فئة لكل وجهة تنشأ فيها الإجراء. تشير رسالة الأشكال البيانية يضيف اسم الفئة المُنشأ "الاتجاهات" إلى فئة الوجهة الأصلية الاسم. على سبيل المثال، إذا تمت تسمية الوجهة الأصلية 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);
}

لمزيد من المعلومات حول تمرير البيانات بين الوجهات باستخدام "الوسيطات الآمنة"، يمكنك الاطّلاع على استخدام "الوسيطات الآمنة" لتمرير البيانات مع الحفاظ على أمان النوع

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

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

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

Groovy

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

Kotlin

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

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

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

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Groovy

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

Kotlin

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

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

بعد تفعيل الوسيطات الآمنة، ينشئ المكوّن الإضافي رمزًا يحتوي على فئات الطرق لكل إجراء قمت بتحديده. بالنسبة إلى كل إجراء، تتضمن "الوسيطات الآمنة" أيضًا تنشئ فئة لكل وجهة ناشئة، وهي الوجهة الذي نشأ منه الإجراء. يتكوّن اسم الفئة الذي يتم إنشاؤه من مجموعة من اسم فئة الوجهة الأصلية وكلمة "الاتجاهات". على سبيل المثال: إذا كانت الوجهة تحمل اسم 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);
}

لمزيد من المعلومات حول تمرير البيانات بين الوجهات باستخدام "الوسيطات الآمنة"، يمكنك الاطّلاع على استخدام "الوسيطات الآمنة" لإرسال البيانات مع الحفاظ على أمان النوع في بيانات البطاقة بين .