add `getStore` method to retrieve shared store from ViewModelStoreOwner
Добавить метод, получения стора, без передачи фабрики для него, надо сделать, что бы это метод возвращал nullable
значение, и обрабатывал кейс, когда гугловые компоненты выкидывают исключение, что не могут создать StoreViewModel
, отдавать в этом случае nullable
значение, так как в этом store owner
нет такого ключа
примерно, что то такое получится
fun <T : Store<*, *, *>> getStore(
sharedViewModelKey: String? = null,
viewModelStoreOwnerProvider: (() -> ViewModelStoreOwner)? = null,
): ReadOnlyProperty<ViewModelStoreOwner, T> {
return object : ReadOnlyProperty<ViewModelStoreOwner, T> {
override fun getValue(thisRef: ViewModelStoreOwner, property: KProperty<*>): T {
val key = sharedViewModelKey ?: keyFromProperty(thisRef, property)
val viewModelStoreOwner = viewModelStoreOwnerProvider?.invoke() ?: thisRef
val viewModelProvider = ViewModelProvider(viewModelStoreOwner)
val viewModel = viewModelProvider.get(key, StoreViewModel::class.java) as StoreViewModel<T>
return viewModel.store
}
private fun keyFromProperty(thisRef: ViewModelStoreOwner, property: KProperty<*>): String {
return thisRef::class.java.canonicalName!! + "#" + property.name
}
}
}