Skip to content

Instantly share code, notes, and snippets.

@thecodeside
Created February 20, 2022 18:02
Show Gist options
  • Save thecodeside/f60d0527b74e08bd28d20073f6390e82 to your computer and use it in GitHub Desktop.
Save thecodeside/f60d0527b74e08bd28d20073f6390e82 to your computer and use it in GitHub Desktop.
@Suppress("UNCHECKED_CAST")
class ViewModelFactory<VM : ViewModel>(
private val creator: () -> VM
) : ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel> create(modelClass: Class<T>): T = creator() as T
}
inline fun <reified VM : ViewModel> Fragment.viewModels(
noinline ownerProducer: () -> ViewModelStoreOwner = { this },
noinline customCreator: (() -> VM)? = null
): Lazy<VM> =
viewModels(ownerProducer = ownerProducer, factoryProducer = customCreator?.let { { ViewModelFactory(it) } })
// Usage:
private val OtherViewModel: OtherViewModel by viewModels {
OtherViewModel(fancyViewModel)
}
class OtherViewModel(
private val fancyViewModel: FancyViewModel,
private val dispatchers: DispatchersProvider = DefaultDispatchersProvider(),
) : ViewModel() {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment