Skip to content

Instantly share code, notes, and snippets.

@mitchtabian
Last active January 15, 2021 22:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mitchtabian/c1d731ffba073ec8ccf2a26171838016 to your computer and use it in GitHub Desktop.
Save mitchtabian/c1d731ffba073ec8ccf2a26171838016 to your computer and use it in GitHub Desktop.
fun <VM : ViewModel> createViewModel(
viewModelClass: KClass<VM>,
storeProducer: ViewModelStore,
factory: ViewModelProvider.Factory,
): VM {
return ViewModelProvider(storeProducer, factory).get(viewModelClass.java)
}
class MyViewModelFactory: ViewModelProvider.Factory{
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return when(modelClass){
HomeViewModel::class.java ->{
HomeViewModel() as T
}
ProfileViewModel::class.java -> {
ProfileViewModel() as T
}
SettingsViewModel::class.java -> {
SettingsViewModel() as T
}
else -> throw IllegalArgumentException("unknown model class $modelClass")
}
}
}
@Composable
fun ProfileScreen(){
val vmStore = AmbientViewModelStoreOwner.current.viewModelStore
val viewModel: ProfileViewModel = remember {
createViewModel(
viewModelClass = ProfileViewModel::class,
storeProducer = vmStore,
factory = MyViewModelFactory()
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment