ارگ ایمن

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

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

برای افزودن Safe Args به پروژه خود، classpath زیر را در فایل build.gradle سطح بالای خود قرار دهید:

شیار

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

کاتلین

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

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

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

شیار

plugins {
  id 'androidx.navigation.safeargs'
}

کاتلین

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

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

شیار

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

کاتلین

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

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

کد تولید شده

پس از فعال کردن 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 بین مقصدها حرکت کنید. این پلاگین کلاس های شی و سازنده ساده ای تولید می کند که ناوبری ایمن و انتقال آرگومان بین مقصد را امکان پذیر می کند.

برای افزودن Safe Args به پروژه خود، classpath زیر را در فایل build.gradle سطح بالای خود قرار دهید:

شیار

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

کاتلین

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

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

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

شیار

plugins {
  id 'androidx.navigation.safeargs'
}

کاتلین

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

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

شیار

plugins {
  id 'androidx.navigation.safeargs.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() ارسال شود، همانطور که در مثال زیر نشان داده شده است:

کاتلین

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 بین مقصدها مراجعه کنید.