Search code examples
android-jetpack-composedagger-hiltlazycolumn

App crashes when using view model in jetpack compose


@HiltViewModel
class TaskViewModel @Inject constructor(
    private val repository: AppRepository
) : ViewModel() {
    fun getLiveData(date: LocalDate): LiveData<List<Task>> {
        ...
    }
}

My screen:

@Composable
fun TaskScreen(modifier: Modifier = Modifier, taskViewModel: TaskViewModel = 
viewModel()) {
val date = LocalDate.now()
val tasks = taskViewModel.getLiveData(date = date).observeAsState()
tasks.value?.let { items ->
    LazyColumn(modifier = modifier) {
        items(items) { task ->
          ...
            }
        }
    }
}

The app crashes with the following exception:

  Caused by: java.lang.NoSuchMethodException: org.mycodelab.test2.viewmodel.TaskDayViewModel.<init> []
    at java.lang.Class.getConstructor0(Class.java:2363)
    at java.lang.Class.getDeclaredConstructor(Class.java:2201)
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:202)

This is my first attempt at using jetpack compose.


Solution

  • The viewModel when using Hilt in Compose becomes hiltViewModel, so your code would look like this:

    fun TaskScreen(modifier: Modifier = Modifier, taskViewModel: TaskViewModel = 
    hiltViewModel()) {}