How to inject viewModel in base classes like baseActivity or baseFragment using hilt. Android kotlin

Viewed 647

I tried to inject viewModel to my base activity using hilt

abstract class BaseActivity<VB: ViewBinding, VM: BaseViewModel>(val bindingFactory(LayoutInflater) -> VB) : AppCompatActivity() {

    private val viewModel: VM by viewModels<>()
    lateinit var binding: VB
}

but am getting error here on viewModels() function as "Property delegate must have a 'getValue(BaseActivity , KProperty*>)' method. None of the following functions are suitable."

how do I inject viewModel in base classes using hilt, or is it possible to use base classes with hilt?

1 Answers

I hope this is not too late but I was able to inject viewModel into base fragment this way:

class BaseFragment<T : ViewDataBinding, V: ViewModel>(private val modelClass: Class<V>) : Fragment() {
@Inject
protected lateinit var viewModel: V
}

and the usage would be like:

@AndroidEntryPoint
ScanFragment:BaseFragment<FragmentScanBinding, ScanViewModel>(ScanViewModel::class.java){
Related