如何在Jetpack Compose中正确使用拉动刷新?

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

我正在尝试在屏幕上实现拉动刷新。但我有一个问题,更新时我需要并行执行两个请求,但正如你从我的代码中看到的,我不会等待两个请求的结果,而是在数据到达时更新状态:

fun refresh() {

 viewModelScope.launch(genericErrorHandler) {
            launch {             
             
                    val data = interactor.firstRequest()
                    _state.update {
                        it.copy(
                            firstData = data,
                          
                        )
                    }               
            }

            launc {                 
                _state.update {
                    it.copy(secondData = interactor.fetchSecondData())
                }
            }
        }
}

但是我需要向我的 ViewModel 添加

isRefreshing
标志来跟踪刷新操作何时开始和完成。

val pullRefreshState = rememberPullRefreshState(
        state.isRefreshing,
        onRefresh,
    )

如何确定何时将 isRefreshing 标志的值设置为 false ?请帮助我。

android android-jetpack-compose kotlin-coroutines android-viewmodel pull-to-refresh
1个回答
0
投票

据我了解,您不希望用户在加载视图模型时意外拉取请求。所以首先你可以创建一个

enum class ScreenState { 
    LOADING, READY 
}

并让 ViewModel 保留 StateFlow,这样您的 UI 将在准备好拉取请求时进行确认。

接下来,除了逻辑部分之外,在 UI 部分你可以通过传递

enabled
of

来阻止用户
Modifier.pullRefresh(state: PullRefreshState, enabled: Boolean)
© www.soinside.com 2019 - 2024. All rights reserved.