合并 2 个流程但保持流程不变

问题描述 投票:0回答:1
 val animeHistory: Flow<PagingData<Anime>> = useCases
        .getAnimeHistory()
        .cachedIn(viewModelScope)

 val animeWatchList: Flow<PagingData<Anime>> = useCases
        .getAnimeWatchList()
        .cachedIn(viewModelScope)

所以,我有 2 个这样的流程,并希望通过使用数据类将其公开给 UI 并使用单个流程。

data class CollectionState(
    val history: Flow<PagingData<Anime>> = flowOf(),
    val watchList: Flow<PagingData<Anime>> = flowOf(),
)

但这里的问题是,我无法组合 2 个流并同时将其保留为流。如果我使用

combine
,它会将两个流转换为 PagingData,并且我无法在 UI 中使用它来进行撰写。有办法实现这一点吗?或者替代方案?

android kotlin android-jetpack-compose coroutine
1个回答
0
投票

我不确定我是否理解您真正想要实现的目标,但是查看代码,您希望将两个流合并为一个流,同时还将它们的内容转换为一个

CollectionState
,然后将其包装到其中,这似乎是合理的单一流。您需要首先将数据类更改为:

data class CollectionState(
    val history: PagingData<Anime>,
    val watchList: PagingData<Anime>,
)

毕竟,拥有一系列的流程对于 compose 来说没有任何意义。

然后创建您想要公开给 compose 的最终 ui 状态将像这样简单:

val uiState: Flow<CollectionState> = combine(animeHistory, animeWatchList) { history, watchList ->
    CollectionState(
        history = history,
        watchList = watchList,
    )
}

您可能应该通过调用

StateFlow
将其变为
stateIn

您现在拥有 one 流,其中包含其他两个流的内容作为

CollectionState
,只要其中任何一个流产生新值,该流就会更新。

© www.soinside.com 2019 - 2024. All rights reserved.