我在两个片段之间共享 MutableStateFlow 属性时遇到问题。
为了使其易于理解:
BasicViewModel由于导航图的实现,我有一个应该始终是两个片段的一个实例
private val basicViewModel: basicViewModel by navGraphViewModels(R.id.basic_graph) { defaultViewModelProviderFactory }
Run Code Online (Sandbox Code Playgroud)
这个 ViewModel 有一个MutableStateFlow像这样声明的属性
private val _basicProperty = MutableStateFlow<BasicClass?>(null)
val basicProperty : Flow<BasicClass?> = _basicId
.filterNotNull()
.flatMapConcat { someRepository.getBasicProperty(it) }
.onEach { _basicProperty.value = it }
.catch { }
Run Code Online (Sandbox Code Playgroud)
然后,我使用导航图在导航中FragmentA声明FragmentB,该导航图类似地调用该属性,如下所示
basicViewModel.basicProperty
.filterNotNull()
.mapNotNull { it.innerProperty}
.onEach { doSomething(it) }
.launchIn(viewLifecycleOwner.lifecycleScope)
Run Code Online (Sandbox Code Playgroud)
一切看起来都很好,但是当我导航到FragmentABasicProperty 加载流程(从 WebApi 加载数据)时,我导航到FragmentB 并再次加载流程,而不是调用已加载的数据,在 App 中,由于重新加载,它看起来有点滞后
问题:我应该做什么/更改才能从BasicViewModelin 中获取已有的数据FragmentB?