[Compose] hiltViewModel()과 viewModel() 차이

예시)


A컴포즈와 B컴포즈간에 같은 NavGraph 에 속할 경우 ViewModel 은 재생성안하고 유지시킬 수 있다.

Untitled

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