Skip to content

Commit 1bc5a2f

Browse files
committed
Add possibility of having VM key
1 parent d5fcee4 commit 1bc5a2f

File tree

4 files changed

+15
-12
lines changed

4 files changed

+15
-12
lines changed

Fruitties/iosApp/iosApp/ViewModelStoreProvider.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ class IOSViewModelStoreOwner: ObservableObject {
3434
Lifecycle_viewmodelViewModelStore()
3535

3636
func viewModel<T: AnyObject>(
37+
key: String? = nil,
3738
factory: Lifecycle_viewmodelViewModelProviderFactory,
3839
extras: Lifecycle_viewmodelCreationExtras,
3940
) -> T {
4041
let vm =
4142
viewModelStore.getViewModel(
4243
modelClass: T.self,
4344
factory: factory,
45+
key: key,
4446
extras: extras
4547
) as! T
4648

Fruitties/shared/src/commonMain/kotlin/com/example/fruitties/viewmodel/CartViewModel.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,6 @@ class CartViewModel(
3030
private val repository: DataRepository,
3131
) : ViewModel() {
3232

33-
init {
34-
println("hello from CartViewmodel")
35-
}
36-
37-
override fun onCleared() {
38-
super.onCleared()
39-
println("clearing CartViewModel")
40-
}
41-
4233
val cartUiState: StateFlow<CartUiState> =
4334
repository.cartDetails
4435
.map { details ->

Fruitties/shared/src/commonMain/kotlin/com/example/fruitties/viewmodel/ViewModelFactory.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ fun creationExtras(appContainer: AppContainer): CreationExtras =
2525
set(APP_CONTAINER_KEY, appContainer)
2626
}
2727

28+
fun creationExtras(
29+
appContainer: AppContainer,
30+
additional: MutableCreationExtras.() -> Unit
31+
): CreationExtras =
32+
MutableCreationExtras().apply {
33+
set(APP_CONTAINER_KEY, appContainer)
34+
additional()
35+
}
36+
2837
inline fun <reified T : ViewModel> vmFactory(
2938
crossinline initializer: CreationExtras.(AppContainer) -> T
3039
) =

Fruitties/shared/src/iosMain/kotlin/com/example/fruitties/di/viewmodel/IOSViewModelStoreOwner.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ import kotlin.reflect.KClass
1414
fun ViewModelStore.getViewModel(
1515
modelClass: ObjCClass,
1616
factory: ViewModelProvider.Factory,
17+
key: String?,
1718
extras: CreationExtras,
1819
): ViewModel {
1920
@Suppress("UNCHECKED_CAST")
20-
val vmClass = (getOriginalKotlinClass(modelClass) as? KClass<ViewModel>)
21+
val vmClass = getOriginalKotlinClass(modelClass) as? KClass<ViewModel>
2122
?: error("modelClass isn't a ViewModel type")
2223
val provider = ViewModelProvider.create(this, factory, extras)
23-
return provider[vmClass]
24-
}
24+
return key?.let { provider[key, vmClass] } ?: provider[vmClass]
25+
}

0 commit comments

Comments
 (0)