Skip to content

Instantly share code, notes, and snippets.

@hlayan
Created January 15, 2024 03:44
Show Gist options
  • Save hlayan/4a67f0c9f46f5fb66888449f3fd61ed1 to your computer and use it in GitHub Desktop.
Save hlayan/4a67f0c9f46f5fb66888449f3fd61ed1 to your computer and use it in GitHub Desktop.
Share ViewModel Between Composable
@Composable
fun DefaultNavHost(
modifier: Modifier = Modifier
) {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = HOME_ROUTE,
modifier = modifier,
) {
composable(HOME_ROUTE) {
HomeScreen { navController.navigate(SECOND_ROUTE) }
}
composable(SECOND_ROUTE) {
SecondScreen(
viewModel = hiltViewModel(),
onClickBack = navController::popBackStack,
onClickNext = { navController.navigate(THIRD_ROUTE) }
)
}
composable(THIRD_ROUTE) {
val secondViewModel = navController.hiltNavGraphViewModel<SecondViewModel>(SECOND_ROUTE, currentEntry)
ThirdScreen(
viewModel = secondViewModel,
onClickBack = navController::popBackStack,
)
}
}
}
@Composable
inline fun <reified VM : ViewModel> NavController.hiltNavGraphViewModel(
route: String, currentEntry: NavBackStackEntry
): VM {
val routeEntry = remember(currentEntry) { getBackStackEntry(route) }
return hiltViewModel<VM>(routeEntry)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment