add in dependencies
implementation 'io.github.ckenergy.compose.safeargs:service:1.0.2'
ksp 'io.github.ckenergy.compose.safeargs:compiler:1.0.2'
add SafeArgs annotation in the class where you went transport data
@SafeArgs("route_name") //route_name default use class package name when is empty
class SampleData(
val index: Int,
val name: String = "",
val sampleList: List<String>
)
in NavHost register route_name
composableSafeArgs<SampleData> { entry, it ->
if (it != null)
SecondPage(it)
}
launch SecondPage with route_name
val toSecond: (NavBackStackEntry, SampleData) -> Unit = { from, bean->
navController.navigateWithSafeArgs(from, bean)
}
Safe Args use Gson format data, so class SampleData can transform to class OtherModuleSampleData when their field name and type are the same, and route_name need equally
@SafeArgs("route_name")
class OtherModuleSampleData(
val sampleList: List<String>,
val name: String = "",
val index: Int
)
in NavHost
composableSafeArgs(MainDestinations.ROUTE_THIRD) { entry, it ->
val list: List<String> = it.getParam("list") ?: listOf()
ThirdPage(it.getParam<Int>("index") ?: 0, list) {
val data = OtherModuleSampleData(
listOf("1", "2", "3"),
"OtherModule",
1
)
actions.toSecond(entry, data)
}
}
launch ThirdPage
navController.navigateWithSafeArgs(MainDestinations.ROUTE_THIRD) {
addParam("index", 1)
addParam("list", listOf("1", "2", "3"))
}