Safe Args est un assistant fidèle du composant de navigation

Dans cet article, vous apprendrez qui est ce Safe Args, comment il facilite la vie et quel est le produit de son travail, y compris dans les coulisses.





Vous êtes maintenant dans la deuxième partie d'un grand article sur le composant de navigation dans un projet multi-module. Si c'est la première fois que vous entendez parler du composant de navigation, je vous recommande de lire d'abord ce qu'est le composant de navigation . Si vous connaissez déjà les bases, vous pouvez passer au plus intéressant:





Safe Args est un plugin qui est distinct du composant de navigation, mais a été créé spécifiquement pour rendre la bibliothèque plus facile à utiliser. Avec lui, il n'est pas nécessaire de spécifier l'ID de destination et de passer les paramètres via le Bundle - le plugin génère des classes séparées pour cela et dispose d'un ensemble d'extensions pour travailler avec elles. Voyons comment tout cela fonctionne.





Tout d'abord, avec le plugin, il y a une nouvelle balise en xml: <argument>. Il peut être appliqué à la fois à l'action et à la destination - de cette façon, vous pouvez envoyer et recevoir des paramètres de manière plus pratique. Deuxièmement, en fonction des écrans et des transitions spécifiés dans le graphique, des classes spéciales sont générées qui peuvent être spécifiées dans NavController au lieu de l'action id.





Montre-moi le code!

<navigation    
    xmlns:android=”http://schemas.android.com/apk/res/android"    
    xmlns:app=”http://schemas.android.com/apk/res-auto"    
    xmlns:tools=”http://schemas.android.com/tools"    
    android:id=”@+id/graphuserflow”    
    app:startDestination=”@id/fragmentUserList”>    
    <fragment        
        android:id=”@+id/fragmentUserList”        
        android:label=”FragmentUserList”        
        android:name=”com.example.usersList.UserListFragment”        
        tools:layout=”@layout/fragmentuserlist”>            
        <action            
            android:id=”@+id/actiontouserdetails”            
            pp:destination=”@id/fragmentUserList” >            
            <argument                
                android:name=”userId”                
                app:argType=”integer”                
                app:nullable=”false” />         
        </action>    
    </fragment>    
    <fragment        
        android:id=”@+id/fragmentUserDetails”        
        android:label=”FragmentUserDetails”        
        android:name=”com.example.usersList.UserDetails”        
        tools:layout=”@layout/fragmentuser_details”/>
</navigation>
      
      



: , , .  —  <argument>, users details userId. , .





class UserListFragmentDirections private constructor() {
    private data class ActionUserFromListToDetails(
    val userId: Int
    ) : NavDirections {
        override fun getActionId(): Int = R.id.actionToUserDetails
        
        override fun getArguments(): Bundle {
            val result = Bundle()
            result.putInt(“userId”, this.userId)
            return result
        }
    }
    companion object {
        fun actionToUserDetails(userId: Int): NavDirections =
        ActionToUserDetails(userId)
    }
}
      
      



generated- , ,  — , , . userId.





:





navController.navigate(
    UserListFragmentDirections.actionToUserDetails(userId)
)
      
      



destination- extension, .





private val args by navArgs<UserDetailsFragmentArgs>()
private val userId by lazy { args.userId }
      
      



, Bundle, .





Safe Args est un ajout intéressant au composant de navigation, grâce auquel nous nous sommes facilités le travail avec l'identifiant de transition et la gestion de la réception / l'envoi de leurs arguments. Que vous l'utilisiez ou non, cela dépend de vous, mais une autre narration est basée sur l'utilisation de ce plugin. Alerte spoiler: cela apportera beaucoup de problèmes, mais au final tout le monde sera content :)





Et maintenant à la partie amusante. Voyons comment vous pouvez organiser le travail avec le composant de navigation dans un projet multi-module avec SafeArgs et la navigation multipiste de type iOS .












All Articles