Safe Args é um assistente fiel do componente de navegação

Neste artigo, você aprenderá quem é esse Safe Args, como ele facilita a vida e qual é o produto de seu trabalho, inclusive nos bastidores.





Agora você está na segunda parte de um grande artigo sobre o Componente de Navegação em um projeto de vários módulos. Se esta é a primeira vez que você ouve falar do Navigation Component, recomendo que você leia primeiro o que é o Navigation Component . Se você já está familiarizado com o básico, pode passar para o mais interessante:





Safe Args é um plugin separado do Navigation Component, mas foi criado especificamente para tornar a biblioteca mais fácil de trabalhar. Com ele, não há necessidade de especificar o id de destino e passar parâmetros através do Bundle - o plugin gera classes separadas para isso e possui um conjunto de extensões para trabalhar com elas. Vamos descobrir como tudo funciona.





Primeiro, junto com o plugin, há uma nova tag no xml: <argument>. Ele pode ser aplicado tanto à ação quanto ao destino - dessa forma, você pode enviar e receber parâmetros de uma forma mais conveniente. Em segundo lugar, com base nas telas e transições especificadas no gráfico, são geradas classes especiais que podem ser especificadas no NavController ao invés da ação id.





Mostre-me o código!

<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 é uma boa adição ao Componente de Navegação, graças ao qual tornamos mais fácil para nós mesmos trabalharmos com id de transição e como receber / enviar seus argumentos. Se vai usar ou não é com você, mas a narração adicional é baseada no uso deste plugin. Alerta de spoiler: vai trazer muitos problemas, mas no final todos ficarão felizes :)





E agora a parte divertida. Vamos dar uma olhada em como você pode organizar o trabalho com o Componente de navegação em um projeto de vários módulos junto com SafeArgs e navegação multistack semelhante ao iOS .












All Articles