你正在收集另一个流的收集块中的无限流。因此,当外流的第一个项目被发射时,它开始永远收集内流,而外流的第二个项目永远无法发射。使用
flatMapLatest
相反这将使它在第一个流发出新项目时中断第二个流。
//In ViewModel init:
observeDatabaseModeUseCase()
.flatMapLatest { databaseMode ->
observeAllProductsUseCase(databaseMode)
}.map { products ->
getFilteredProductListUseCase(
products,
filterProductDataState.value.filterProduct
)
}.onEach {
_uiState.value = MyPantryProductsUiState.Loaded(
MyPantryModel(
groupsProduct = getGroupProductListUseCase(it),
loadingVisible = false
)
)
}
.flowOn(Dispatchers.Default) // probably unnecessary since you don't seem to be doing blocking work.
.launchIn(viewModelScope)
你没有展示什么
_uiState
是,但您可以使用使其成为StateFlow
stateIn
以简化您的代码。