使用 koin 2.2.3 和 jetpack 导航在 2 个片段之间限定视图模型
Posted
技术标签:
【中文标题】使用 koin 2.2.3 和 jetpack 导航在 2 个片段之间限定视图模型【英文标题】:Scope a viewmodel between 2 fragments with koin 2.2.3 and jetpack navigation 【发布时间】:2021-12-17 17:08:37 【问题描述】:Bonsoir à tous, je suis sur koin 2.2.3 et je cherche à scope un viewModel en fonction d'un graph。 j'ai ceci:
我的项目是在 Koin 2.2.3 上,我搜索了一个视图模型的范围以图的功能。 在我的 ViewModelModule 中,我得到了这个:
val Int.navQualifier: Qualifier
get() = named("FlowQualifier (NavGraphId@$this)")
fun navQualifier(navGraphId: Int) =
navGraphId.navQualifier
val Int.navScopeId: ScopeID
get() = "ScopeId (NavGraphId@$this)"
scope(navQualifier(R.id.expenses_list_nav_graph))
viewModel (activity: AppCompatActivity) ->
ExpensesListViewModel(get(), get(), get(), activity, androidContext())
在我的片段中,我得到了这个:
private val viewModel: ExpensesListViewModel by sharedGraphViewModel(R.id.expenses_list_nav_graph)
parametersOf(requireActivity())
这是我的函数 sharedGraphViewModel:
inline fun <reified VM : ViewModel> Fragment.sharedGraphViewModel(
@IdRes navGraphId: Int,
qualifier: Qualifier? = null,
noinline parameters: ParametersDefinition? = null) = lazy
val store = findNavController().getViewModelStoreOwner(navGraphId).viewModelStore
getKoin().getViewModel(ViewModelParameter(VM::class, qualifier, parameters, null, store, null))
感谢您的帮助
【问题讨论】:
【参考方案1】:你应该将你的 koin 版本增加到 3.1.3,有一个全新的委托:koinNavGraphViewModel https://insert-koin.io/docs/reference/koin-android/viewmodel/#navigation-graph-viewmodel-updated-in-313
【讨论】:
以上是关于使用 koin 2.2.3 和 jetpack 导航在 2 个片段之间限定视图模型的主要内容,如果未能解决你的问题,请参考以下文章