Safe Args

Pour naviguer entre les destinations, nous vous recommandons d'utiliser le plug-in Gradle Safe Args. Ce plug-in génère des classes d'objets et de compilateurs simples qui permettent une navigation sécurisée entre les destinations. Utilisez Safe Args pour naviguer et transmettre des données entre les destinations.

Activer Safe Args

Pour ajouter Safe Args à votre projet, incluez le classpath suivant dans votre fichier build.gradle de premier niveau :

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")
    }
}

Vous devez également appliquer l'un des deux plug-ins disponibles.

Pour générer un code en langage Java adapté aux modules en Java ou mixant du Java et du Kotlin, ajoutez la ligne suivante au fichier build.gradle de votre application ou module :

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Sinon, pour générer un code Kotlin adapté aux modules exclusivement en Kotlin, ajoutez la ligne suivante :

Groovy

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

Kotlin

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

android.useAndroidX=true doit figurer dans votre fichier gradle.properties, tel qu'indiqué sur la page Migrer vers AndroidX.

Code généré

Une fois que vous avez activé Safe Args, votre code généré contient des classes et des méthodes pour chaque action que vous avez définie, ainsi que des classes correspondant à chaque destination d'envoi et de réception.

Safe Args génère une classe pour chaque destination à l'origine d'une action. Le nom de classe généré ajoute "Directions" au nom de la classe de destination à l'origine de l'action. Par exemple, si la destination à l'origine de l'action est SpecifyAmountFragment, la classe générée est nommée SpecifyAmountFragmentDirections.

La classe générée contient une méthode statique pour chaque action définie dans la destination à l'origine de l'action. Cette méthode accepte tous les paramètres d'action définis comme arguments et renvoie un objet NavDirections que vous pouvez transmettre directement à navigate().

Exemple Safe Args

Supposons par exemple que nous ayons un graphe de navigation avec une seule action qui relie deux destinations, SpecifyAmountFragment et ConfirmationFragment. ConfirmationFragment accepte un seul paramètre float que vous fournissez dans le cadre de l'action.

Safe Args génère une classe SpecifyAmountFragmentDirections avec une seule méthode, actionSpecifyAmountFragmentToConfirmationFragment(), et une classe interne appelée ActionSpecifyAmountFragmentToConfirmationFragment. La classe interne est dérivée de NavDirections et stocke l'ID d'action associé et le paramètre float. L'objet NavDirections renvoyé peut ensuite être transmis directement à navigate(), comme illustré dans l'exemple suivant :

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);
}

Pour en savoir plus sur la transmission de données entre des destinations avec Safe Args, consultez la section Utiliser Safe Args pour transmettre des données en assurant la sûreté du typage.

Assurer la sûreté du typage à l'aide de Safe Args

Naviguez entre les destinations à l'aide du plug-in Gradle Safe Args. Ce plug-in génère des classes d'objets et de compilateurs simples qui permettent une navigation sécurisée par type et un transfert d'argument entre les destinations.

Pour ajouter Safe Args à votre projet, incluez le classpath suivant dans votre fichier build.gradle de premier niveau :

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")
    }
}

Vous devez également appliquer l'un des deux plug-ins disponibles.

Pour générer un code en langage Java adapté aux modules en Java ou mixant du Java et du Kotlin, ajoutez la ligne suivante au fichier build.gradle de votre application ou module :

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Sinon, pour générer un code Kotlin adapté aux modules exclusivement en Kotlin, ajoutez la ligne suivante :

Groovy

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

Kotlin

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

android.useAndroidX=true doit figurer dans votre fichier gradle.properties, tel qu'indiqué sur la page Migrer vers AndroidX.

Une fois que vous avez activé Safe Args, le plug-in génère du code contenant des classes et des méthodes pour chaque action que vous avez définie. Pour chaque action, Safe Args génère également une classe pour chaque destination d'origine, qui correspond à la destination d'où provient l'action. Le nom de classe généré est une combinaison du nom de la classe de destination d'origine et du mot "Directions". Par exemple, si la destination est nommée SpecifyAmountFragment, la classe générée est nommée SpecifyAmountFragmentDirections. La classe générée contient une méthode statique pour chaque action définie dans la destination d'origine. Cette méthode utilise tous les paramètres d'action définis comme arguments et renvoie un objet NavDirections que vous pouvez transmettre à navigate().

Par exemple, supposons que nous ayons un graphique de navigation avec une seule action qui connecte la destination d'origine, SpecifyAmountFragment, à une destination de réception, ConfirmationFragment.

Safe Args génère une classe SpecifyAmountFragmentDirections avec une seule méthode, actionSpecifyAmountFragmentToConfirmationFragment() qui renvoie un objet NavDirections. Cet objet NavDirections renvoyé peut ensuite être transmis directement à navigate(), comme illustré dans l'exemple suivant :

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);
}

Pour en savoir plus sur la transmission de données entre des destinations avec Safe Args, consultez la section Utiliser Safe Args pour transmettre des données en assurant la sûreté du typage dans Transmettre des données entre les destinations.