Skip to content

Safe Args is for compose navigation to transport data easily

Notifications You must be signed in to change notification settings

ckenergy/compose-safe-args

Repository files navigation

Safe Args

Safe Args is for compose navigation to transport data easily

文档还是中文的好

example

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

although two module are dependencies SampleData class is sample way

@SafeArgs("route_name")
class OtherModuleSampleData(
    val sampleList: List<String>,
    val name: String = "",
    val index: Int
)

don't use SafeArgs annotation

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

About

Safe Args is for compose navigation to transport data easily

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages