Pada artikel ini, Anda akan mempelajari siapa Safe Args ini, bagaimana cara membuat hidup lebih mudah dan apa produk dari pekerjaannya, termasuk di balik layar.
Anda sekarang berada di bagian kedua dari artikel besar tentang Komponen Navigasi dalam proyek multi-modul. Jika ini pertama kalinya Anda mendengar tentang Komponen Navigasi, saya sarankan Anda membaca terlebih dahulu apa itu Komponen Navigasi . Jika Anda sudah terbiasa dengan dasar-dasarnya, maka Anda dapat melanjutkan ke yang paling menarik:
Safe Args adalah plugin yang terpisah dari Komponen Navigasi, tetapi dibuat khusus untuk membuat perpustakaan lebih mudah digunakan. Dengan itu, tidak perlu menentukan id tujuan dan meneruskan parameter melalui Bundle - plugin membuat kelas terpisah untuk ini dan memiliki sekumpulan ekstensi untuk bekerja dengannya. Mari kita cari tahu bagaimana semuanya bekerja.
Pertama, bersama dengan plugin, ada tag baru di xml: <argument>. Ini dapat diterapkan ke tindakan dan tujuan - dengan cara ini Anda dapat mengirim dan menerima parameter dengan cara yang lebih nyaman. Kedua, berdasarkan layar dan transisi yang ditentukan dalam grafik, class khusus dibuat yang dapat ditentukan di NavController sebagai ganti tindakan id.
Tunjukkan kodenya!
<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 adalah tambahan yang bagus untuk Komponen Navigasi, berkat itu kami mempermudah diri kami sendiri untuk bekerja dengan id transisi dan menangani penerimaan / pengiriman argumen mereka. Apakah akan digunakan atau tidak terserah Anda, tetapi narasi lebih lanjut didasarkan pada penggunaan plugin ini. Peringatan spoiler: itu akan membawa banyak masalah, tetapi pada akhirnya semua orang akan senang :)
Dan sekarang ke bagian yang menyenangkan. Mari kita lihat bagaimana Anda dapat mengatur pekerjaan dengan Komponen Navigasi dalam proyek multi-modul bersama dengan SafeArgs dan navigasi multistack mirip iOS .