Jetpack Compose Navigation Pass Arguments/Data

December 15, 2021

Refer to Jetpack Compose Navigation.

NavHost(navController = navController, startDestination = Screen.Home.route) {
    composable(
        "selectPhoto/{albumId}",
        arguments = listOf(navArgument("albumId") { type = NavType.StringType })
    ) { backStackEntry ->
        backStackEntry.arguments?.getString("albumId")?.let {
            SelectPhotoScreen(
                // viewModel = hiltViewModel(),
                albumId = it)
        }
    }
}
@Composable
fun SelectPhotoScreen(viewModel: SelectPhotoViewModel = viewModel(), albumId: String) {
    Text("Album Id = $albumId")
}
val albumId = ...

navController.navigate("selectPhoto/$albumId")

Alternatively, you can also read compose navigation arguments via ViewModel’s SavedStateHandle.

class SelectPhotoViewModel(
    savedStateHandle: SavedStateHandle
): ViewModel() {

    val albumId = savedStateHandle.get<String>("albumId")
}

References:

This work is licensed under a
Creative Commons Attribution-NonCommercial 4.0 International License.