[Compose] hiltViewModel()과 viewModel() 차이
A컴포즈와 B컴포즈간에 같은 NavGraph 에 속할 경우 ViewModel 은 재생성안하고 유지시킬 수 있다.
@Composable
fun TestRouter() {
val navController = rememberNavController()
NavHost(
modifier = Modifier.background(Color.White),
navController = navController, startDestination = "start"
) {
composable("start") {
StartScreen(
navigateToRoot = {
navController.navigate("root")
}
)
}
navigation(
route = "root",
startDestination = "home"
) {
composable("home") { backStackEntry ->
val parentEntry = remember(backStackEntry) { navController.getBackStackEntry("root") }
AScreen(
viewModel = hiltViewModel<AViewModel>(parentEntry),
navigateToB = {
navController.navigate("profile")
}
)
}
composable("profile") { backStackEntry ->
val parentEntry = remember(backStackEntry) { navController.getBackStackEntry("root") }
BScreen(
viewModel = hiltViewModel<BViewModel>(parentEntry),
navigateToA = {
navController.navigate("home")
},
navigateToStart = {
navController.navigate("start")
}
)
}
}
}
}