Colton Idle
07/23/2021, 6:35 PMColton Idle
07/23/2021, 6:36 PM@Composable
fun HomeScreen(
navController: NavController,
screenTitle: String,
viewModel: HomeScreenViewModel = viewModel()
) {
...
}
and
@HiltViewModel
class HomeScreenViewModel
@Inject
constructor(
private val doSomething: Boolean,
) : ViewModel() {
...
}
and I thought this would work.
It does not.
error: viewModel has no zero argument constructor
Colton Idle
07/23/2021, 6:50 PM@Composable
fun HomeScreen(
navController: NavController,
screenTitle: String,
viewModel: HomeScreenViewModel
) {
...
}
and then in the NavHost I do this
composable(Screen.Home.route) {
HomeScreen(
navController = navController,
screenTitle = Screen.Home.title,
viewModel = hiltViewModel()) <------ Add this
}
then everything works.Javier
07/23/2021, 6:51 PMColton Idle
07/23/2021, 6:55 PMclass ExampleViewModel : ViewModel() { /*...*/ }
@Composable
fun MyExample(
viewModel: ExampleViewModel = viewModel()
) {
// use viewModel here
}
Halil Ozercan
07/23/2021, 6:55 PMviewModel
is the default Jetpack ViewModel which simply initializes a ViewModel using default store and provider. In that case, no external dependency should be required by the ViewModel because ViewModelProvider doesn't know how to provide it. ViewModel has to have a zero argument constructor, meaning that no dependencies.
Now, you have a HiltViewModel
which certainly knows how to provide those dependencies using Hilt. However, you have to use hiltViewModel
function to initialize a Hilt specific ViewModelColton Idle
07/23/2021, 6:56 PMColton Idle
07/23/2021, 6:57 PM