pitpit
05/13/2022, 2:10 PMcurioustechizen
05/13/2022, 2:13 PMimplementation "io.insert-koin:koin-androidx-navigation:$koin_version"
pitpit
05/13/2022, 4:41 PM@OptIn(KoinInternalApi::class)
inline fun <reified VM : ViewModel> Fragment.koinNavGraphViewModel(
@IdRes navGraphId: Int,
noinline bundleDefinition: BundleDefinition? = emptyState(),
noinline parameters: ParametersDefinition? = null
): Lazy<VM> {
val backStackEntry: NavBackStackEntry by lazy { findNavController().getBackStackEntry(navGraphId) }
val owner = {
ViewModelOwner(
storeOwner = backStackEntry,
stateRegistry = backStackEntry
)
}
val scope = getKoinScope()
return viewModels(ownerProducer = { backStackEntry }) {
getViewModelFactory(
owner = owner,
qualifier = null,
parameters = parameters,
scope = scope,
state = bundleDefinition,
clazz = VM::class
)
}
}
pitpit
05/13/2022, 4:41 PMval owner = {
ViewModelOwner(
storeOwner = backStackEntry,
stateRegistry = backStackEntry
)
}