Kevin ABRIOUX
Kevin ABRIOUX

Reputation: 17735

Create HiltViewModel with custom ViewModelStoreOwner

I have this compose code who works perfectly:

val pagerVM = hiltViewModel(
    creationCallback = { factory: JourneySummaryPagerViewModel.Factory ->
        factory.create(selectedIndex.value)
    },
    key = viewModel.journeys.toString()
)
JourneySummaryPager(
    viewModel = pagerVM
)

For my project, I need to scope the generation of the VMs into a specific ViewModelStoreOwner.

So I have this code:

val storeOwner = object : ViewModelStoreOwner {
    override val viewModelStore = ViewModelStore()
}

CompositionLocalProvider(value = LocalViewModelStoreOwner provides storeOwner) {

    val pagerVM = hiltViewModel(
        creationCallback = { factory: JourneySummaryPagerViewModel.Factory ->
            factory.create(selectedIndex.value)
        },
        key = viewModel.journeys.toString()
    )
    JourneySummaryPager(
        viewModel = pagerVM
    )
}

But when I launch it, I have a crash:

java.lang.RuntimeException: Cannot create an instance of class fr.tisseo.android.screen.map.header.journey.journeySummaryPager.JourneySummaryPagerViewModel at androidx.lifecycle.viewmodel.internal.JvmViewModelProviders.createViewModel(JvmViewModelProviders.kt:40)

What can I do to make Hilt able to create my viewmodel with my custom StoreOwner ?

Upvotes: 0

Views: 42

Answers (0)

Related Questions