Skip to content

Instantly share code, notes, and snippets.

@SumeraMartin
Created December 11, 2021 17:16
Show Gist options
  • Save SumeraMartin/e31a9bf7103d50d803665d1fe93a0a81 to your computer and use it in GitHub Desktop.
Save SumeraMartin/e31a9bf7103d50d803665d1fe93a0a81 to your computer and use it in GitHub Desktop.
ViewModel without Hilt in Jetpack Compose
@Composable
inline fun <reified VIEW_MODEL : ViewModel> viewModelFactory(
key: String? = null,
crossinline viewModelCreator: () -> VIEW_MODEL
): VIEW_MODEL = viewModel(
modelClass = VIEW_MODEL::class.java,
key = key,
factory = object : ViewModelProvider.Factory {
override fun <VIEW_MODEL : ViewModel> create(modelClass: Class<VIEW_MODEL>): VIEW_MODEL {
val viewModel = viewModelCreator() as? VIEW_MODEL ?: error("Unexpected viewModel")
if (viewModel is BaseViewModel<*>) {
viewModel.onCreated()
}
return viewModel
}
}
)
@Composable
fun rememberHomeViewModel() = viewModelFactory {
... create ViewModel somehow ...
}
@Composable
fun HomeScreen(
navigation: NavigationDestinations,
viewModel: HomeViewModel = rememberHomeViewModel()
) {
...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment