我有一个视图模型
@HiltViewModel
class GreetingCoverScreenViewModel @Inject constructor(
private val repository: PersonalizationRepository
) : ViewModel(){
fun getIllustrations(occasionCode: String): Flow<PagingData<Illustration>> = repository.getIllustrations(
occasionCode
).cachedIn(viewModelScope)
}
LazyColumn(
state = listState,
modifier = Modifier
.fillMaxWidth()
.weight(1f)
) {
occasions.forEach{occasion ->
item {
IllustrationsItemView(
occasion = occasion
){ illustration ->
viewModel.onSelectIllustration(illustration)
}
}
}
}
@Composable
internal fun IllustrationsItemView(
viewModel: GreetingCoverScreenViewModel = hiltViewModel(),
occasion: Occasion,
onIllustrationsSelected: (illustration: Illustration) -> Unit
) {
val pagingItems = viewModel.getIllustrations(
occasionCode = occasion.code
).collectAsLazyPagingItems()
}
函数
getIllustrations
返回一个带有 Flow
的 PagingData
,我想将其缓存在我的 GreetingCoverScreenViewModel
中,但是在重新组合我的屏幕时,流程不会被缓存,它实际上重新创建了新的流程
那么如何缓存函数返回的流呢?请帮忙
流程已缓存,但您在每次重组时都会创建新流程。仅当场合代码或 viewModel 发生变化时,才使用
remember
来调用 getIllustrations
:
val pagingItems = remember(viewModel, occasion.code) {
viewModel.getIllustrations(
occasionCode = occasion.code
)
}.collectAsLazyPagingItems()