ارگ ایمن

روش پیشنهادی برای پیمایش بین مقصدها استفاده از افزونه Safe Args Gradle است. این پلاگین کلاس های شی و سازنده ایجاد می کند که ناوبری ایمن بین مقصدها را امکان پذیر می کند. از Safe Args برای پیمایش و انتقال داده ها بین مقصدها استفاده کنید.

Safe Args را فعال کنید

برای افزودن آرگومان‌های ایمن به پروژه خود، classpath زیر را در فایل build.gradle سطح بالای خود وارد کنید:

گرووی

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

کاتلین

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

همچنین باید یکی از دو افزونه موجود را اعمال کنید.

برای تولید کد زبان جاوا که برای ماژول‌های جاوا یا ترکیبی از جاوا و کاتلین مناسب باشد، این خط را به فایل build.gradle برنامه یا ماژول خود اضافه کنید:

گرووی

plugins {
  id 'androidx.navigation.safeargs'
}

کاتلین

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

روش دیگر، برای تولید کد کاتلین مناسب برای ماژول‌های فقط کاتلین، اضافه کردن:

گرووی

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

کاتلین

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

شما باید طبق دستور Migrating to AndroidX، در فایل gradle.properties خود، android.useAndroidX=true را داشته باشید.

کد تولید شده

پس از فعال کردن Safe Args، کد تولید شده شما حاوی کلاس‌ها و روش‌هایی برای هر اقدامی است که تعریف کرده‌اید و همچنین کلاس‌هایی که با هر مقصد ارسال و دریافت مطابقت دارند.

Safe Args برای هر مقصدی که یک عمل از آنجا شروع می شود یک کلاس ایجاد می کند. نام کلاس ایجاد شده "Directions" را به نام کلاس مقصد مبدا اضافه می کند. به عنوان مثال، اگر مقصد مبدا SpecifyAmountFragment نام داشته باشد، کلاس تولید شده SpecifyAmountFragmentDirections نام دارد.

کلاس تولید شده حاوی یک متد استاتیک برای هر عملی است که در مقصد مبدا تعریف شده است. این متد هر پارامتر اقدام تعریف شده را به عنوان آرگومان می گیرد و یک شی NavDirections را برمی گرداند که می توانید مستقیماً به navigate() ارسال کنید.

مثال Safe Args

برای مثال، یک نمودار ناوبری را با یک عمل در نظر بگیرید که دو مقصد، SpecifyAmountFragment و ConfirmationFragment را به هم متصل می کند. ConfirmationFragment یک پارامتر float واحد را می گیرد که شما به عنوان بخشی از عمل ارائه می دهید.

Safe Args یک کلاس SpecifyAmountFragmentDirections با یک متد، actionSpecifyAmountFragmentToConfirmationFragment() و یک کلاس داخلی به نام ActionSpecifyAmountFragmentToConfirmationFragment تولید می کند. کلاس داخلی از NavDirections مشتق شده است و شناسه عمل مرتبط و پارامتر float را ذخیره می کند. همانطور که در مثال زیر نشان داده شده است، شیء NavDirections بازگشتی می‌تواند مستقیماً به navigate() ارسال شود:

کاتلین

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

جاوا

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

برای اطلاعات بیشتر در مورد انتقال داده بین مقصدها با Safe Args، به استفاده از Safe Args برای ارسال داده با نوع ایمنی مراجعه کنید.

با استفاده از Safe Args از ایمنی نوع اطمینان حاصل کنید

با استفاده از افزونه Safe Args Gradle بین مقصدها حرکت کنید. این پلاگین کلاس های شی و سازنده ساده ای تولید می کند که ناوبری ایمن و انتقال آرگومان بین مقصد را امکان پذیر می کند.

برای افزودن آرگومان‌های ایمن به پروژه خود، classpath زیر را در فایل build.gradle سطح بالای خود وارد کنید:

گرووی

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

کاتلین

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

همچنین باید یکی از دو افزونه موجود را اعمال کنید.

برای تولید کد زبان جاوا که برای ماژول‌های جاوا یا ترکیبی از جاوا و کاتلین مناسب باشد، این خط را به فایل build.gradle برنامه یا ماژول خود اضافه کنید:

گرووی

plugins {
  id 'androidx.navigation.safeargs'
}

کاتلین

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

روش دیگر، برای تولید کد کاتلین مناسب برای ماژول‌های فقط کاتلین، اضافه کردن:

گرووی

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

کاتلین

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

شما باید طبق دستور Migrating to AndroidX، در فایل gradle.properties خود، android.useAndroidX=true را داشته باشید.

پس از فعال کردن Safe Args، افزونه کدی تولید می کند که شامل کلاس ها و متدهایی برای هر عملی است که شما تعریف کرده اید. برای هر اقدام، Safe Args همچنین یک کلاس برای هر مقصد مبدا ایجاد می‌کند، که مقصدی است که عمل از آنجا شروع می‌شود. نام کلاس تولید شده ترکیبی از نام کلاس مقصد مبدا و کلمه "Directions" است. برای مثال، اگر مقصد SpecifyAmountFragment نام داشته باشد، کلاس تولید شده SpecifyAmountFragmentDirections نام دارد. کلاس تولید شده حاوی یک متد استاتیک برای هر عملی است که در مقصد مبدا تعریف شده است. این متد هر پارامتر اقدام تعریف شده را به عنوان آرگومان می گیرد و یک شی NavDirections برمی گرداند که می توانید به navigate() ارسال کنید.

به عنوان مثال، فرض کنید یک نمودار ناوبری با یک عمل واحد داریم که مقصد مبدا، SpecifyAmountFragment را به مقصد دریافت کننده، ConfirmationFragment متصل می کند.

Safe Args یک کلاس SpecifyAmountFragmentDirections را با یک متد، actionSpecifyAmountFragmentToConfirmationFragment() تولید می کند که یک شی NavDirections برمی گرداند. این شیء NavDirections بازگشتی می‌تواند مستقیماً به navigate() ارسال شود، همانطور که در مثال زیر نشان داده شده است:

کاتلین

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

جاوا

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

برای اطلاعات بیشتر در مورد انتقال داده ها بین مقصدها با Safe Args، به استفاده از Safe Args برای ارسال داده با نوع ایمنی در Pass data بین مقصدها مراجعه کنید.