Skip to content
Snippets Groups Projects
Verified Commit 8625785f authored by Mikolai Gütschow's avatar Mikolai Gütschow
Browse files

avoid matching instances of different classes to same key

parent a1123169
No related branches found
No related tags found
1 merge request!38Inject ViewModels similar to the Android world
Pipeline #8278 passed
...@@ -52,11 +52,7 @@ fun <VM : ViewModel> viewModel( ...@@ -52,11 +52,7 @@ fun <VM : ViewModel> viewModel(
"No ViewModelProvider was provided via LocalViewModelProvider" "No ViewModelProvider was provided via LocalViewModelProvider"
} }
): VM { ): VM {
val viewModel = if (key == null) { val viewModel = viewModelProvider.get(modelClass, key)
viewModelProvider.get(modelClass)
} else {
viewModelProvider.get(key, modelClass)
}
DisposableEffect(key) { DisposableEffect(key) {
viewModel.onInit() viewModel.onInit()
......
...@@ -16,11 +16,9 @@ constructor( ...@@ -16,11 +16,9 @@ constructor(
private val viewModels = HashMap<String, ViewModel>() private val viewModels = HashMap<String, ViewModel>()
fun <VM : ViewModel> get(modelClass: KClass<VM>): VM = fun <VM : ViewModel> get(modelClass: KClass<VM>, key: String? = null): VM {
get(modelClass.qualifiedName!!, modelClass) val viewModelKey = "${modelClass.qualifiedName}:$key"
val viewModel = viewModels[viewModelKey]
fun <VM : ViewModel> get(key: String, modelClass: KClass<VM>): VM {
val viewModel = viewModels[key]
if (modelClass.isInstance(viewModel)) { if (modelClass.isInstance(viewModel)) {
return viewModel as VM return viewModel as VM
...@@ -28,7 +26,7 @@ constructor( ...@@ -28,7 +26,7 @@ constructor(
try { try {
val viewModel = viewModelFactory.create(modelClass) val viewModel = viewModelFactory.create(modelClass)
viewModels[key] = viewModel viewModels[viewModelKey] = viewModel
return viewModel return viewModel
} catch (e: InstantiationException) { } catch (e: InstantiationException) {
throw RuntimeException("Cannot create an instance of $modelClass", e) throw RuntimeException("Cannot create an instance of $modelClass", e)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment