Anvil-Sample icon indicating copy to clipboard operation
Anvil-Sample copied to clipboard

Setup with mavericks compose

Open ganfra opened this issue 1 year ago • 0 comments

Thanks for this sample, it's very helpful. But we are missing a part here. We use mavericks-compose so we have this method available to create the ViewModel inside a Composable: inline fun <reified VM : MavericksViewModel<S>, reified S : MavericksState> mavericksViewModel

We are using a Single-Activity and no fragments at all. We rely on NavController How can we tie a DaggerComponent to a Composable?

Because this:

class DaggerMavericksViewModelFactory<VM : MavericksViewModel<S>, S : MavericksState>(
    private val viewModelClass: Class<VM>
) : MavericksViewModelFactory<VM, S> {

    override fun create(viewModelContext: ViewModelContext, state: S): VM {
        val bindings: DaggerMavericksBindings = when (viewModelContext) {
            is FragmentViewModelContext -> viewModelContext.fragment.bindings()
            else -> viewModelContext.activity.bindings()
        }
        val viewModelFactoryMap = bindings.viewModelFactories()
        val viewModelFactory = viewModelFactoryMap[viewModelClass] ?: error("Cannot find ViewModelFactory for ${viewModelClass.name}.")

        @Suppress("UNCHECKED_CAST")
        val castedViewModelFactory = viewModelFactory as? AssistedViewModelFactory<VM, S>
        val viewModel = castedViewModelFactory?.create(state)
        return viewModel as VM
    }
}

will always look for our single Activity as we have no fragments.

ganfra avatar Dec 09 '22 18:12 ganfra