ViewModel 中的缓存流程

问题描述 投票:0回答:1

我有一个视图模型

@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
中,但是在重新组合我的屏幕时,流程不会被缓存,它实际上重新创建了新的流程

那么如何缓存函数返回的流呢?请帮忙

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

流程已缓存,但您在每次重组时都会创建新流程。仅当场合代码或 viewModel 发生变化时,才使用

remember
来调用
getIllustrations

val pagingItems = remember(viewModel, occasion.code) {
    viewModel.getIllustrations(
        occasionCode = occasion.code
    )
}.collectAsLazyPagingItems()
© www.soinside.com 2019 - 2024. All rights reserved.