Spikey Sanju
06/06/2021, 9:10 AMbeta-08
& Compose nav graph
dependencies. Iām not able to scope my viewmodel
to the nav graph component
šš»āāļø
Code sample in thread šSpikey Sanju
06/06/2021, 9:11 AM@Composable
fun NavGraph(toggleTheme: () -> Unit) {
val navController = rememberNavController()
val actions = remember(navController) { MainActions(navController) }
NavHost(navController, startDestination = Screen.Home.route) {
composable(Screen.Home.route) {
val viewModel: MainViewModel = viewModel(
factory = HiltViewModelFactory(LocalContext.current, it)
)
HomeScreen(viewModel, actions)
}
composable(Screen.AddTask.route) {
val viewModel = hiltNavGraphViewModel<MainViewModel>(backStackEntry = it)
AddTaskScreen(viewModel, actions)
}
composable(Screen.AllTask.route) {
val viewModel = hiltNavGraphViewModel<MainViewModel>(backStackEntry = it)
viewModel.getAllTask()
AllTaskScreen(viewModel, actions)
}
composable(
"${Screen.TaskDetails.route}/{id}",
arguments = listOf(navArgument(EndPoints.ID) { type = NavType.LongType })
) {
val viewModel = hiltNavGraphViewModel<MainViewModel>(backStackEntry = it)
val taskID = it.arguments?.getLong(EndPoints.ID)
?: throw IllegalStateException("'task ID' shouldn't be null")
viewModel.findTaskByID(taskID)
TaskDetailsScreen(viewModel, actions)
}
composable(Screen.Settings.route) {
val viewModel = hiltNavGraphViewModel<MainViewModel>(backStackEntry = it)
SettingsScreen(viewModel, actions)
}
}
}
Spikey Sanju
06/06/2021, 9:13 AMSpikey Sanju
06/06/2021, 9:28 AMandroidx.hilt:hilt-navigation-compose:1.0.0-alpha02
Step 2ļøā£
I updated the code to below š
@Composable
fun NavGraph(toggleTheme: () -> Unit) {
val navController = rememberNavController()
val actions = remember(navController) { MainActions(navController) }
NavHost(navController, startDestination = Screen.Home.route) {
// Home
composable(Screen.Home.route) {
val viewModel: MainViewModel = viewModel(
factory = HiltViewModelFactory(LocalContext.current, it)
)
HomeScreen(viewModel, actions)
}
// Add Task
composable(Screen.AddTask.route) {
val viewModel = hiltViewModel<MainViewModel>(it)
AddTaskScreen(viewModel, actions)
}
// All Task
composable(Screen.AllTask.route) {
val viewModel = hiltViewModel<MainViewModel>(it)
viewModel.getAllTask()
AllTaskScreen(viewModel, actions)
}
// Task Details
composable(
"${Screen.TaskDetails.route}/{id}",
arguments = listOf(navArgument(EndPoints.ID) { type = NavType.LongType })
) {
val viewModel = hiltViewModel<MainViewModel>(it)
val taskID = it.arguments?.getLong(EndPoints.ID)
?: throw IllegalStateException("'task ID' shouldn't be null")
viewModel.findTaskByID(taskID)
TaskDetailsScreen(viewModel, actions)
}
// Settings
composable(Screen.Settings.route) {
val viewModel = hiltViewModel<MainViewModel>(it)
SettingsScreen(viewModel, actions)
}
}
}