Skip to content

Instantly share code, notes, and snippets.

@Kvest
Created April 5, 2024 19:50
Show Gist options
  • Save Kvest/f2acfef603f85bfe89105a001aef16f8 to your computer and use it in GitHub Desktop.
Save Kvest/f2acfef603f85bfe89105a001aef16f8 to your computer and use it in GitHub Desktop.
ViewModel AssistedInject example
class SomeDetailsViewModel @AssistedInject constructor(
@Assisted private val code: String,
@Assisted private val type: SomeType,
private val someRepository: SomeRepository,
) : ViewModel() {
@AssistedFactory
interface SomeDetailsViewModelAssistedFactory {
fun create(code: String, type: SomeType): SomeDetailsViewModel
}
}
@Inject
lateinit var someDetailsViewModelAssistedFactory: SomeDetailsViewModel.SomeDetailsViewModelAssistedFactory
private val someDetailsViewModelFactory = createViewModelFactory {
someDetailsViewModelAssistedFactory.create(code, type)
}
private val viewModel: SomeDetailsViewModel by lazy(LazyThreadSafetyMode.NONE) {
getViewModel(someDetailsViewModelFactory)
}
inline fun <T : ViewModel> createViewModelFactory(crossinline creator: () -> T): ViewModelProvider.Factory {
return object : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return creator() as T
}
}
}
inline fun <reified T : ViewModel> Fragment.getViewModel(factory: ViewModelProvider.Factory): T {
return ViewModelProvider(this, factory)[T::class.java]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment