我正在尝试在屏幕上实现拉动刷新。但我有一个问题,更新时我需要并行执行两个请求,但正如你从我的代码中看到的,我不会等待两个请求的结果,而是在数据到达时更新状态:
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 ?请帮助我。
据我了解,您不希望用户在加载视图模型时意外拉取请求。所以首先你可以创建一个
enum class ScreenState {
LOADING, READY
}
并让 ViewModel 保留 StateFlow
接下来,除了逻辑部分之外,在 UI 部分你可以通过传递
enabled
of 来阻止用户
Modifier.pullRefresh(state: PullRefreshState, enabled: Boolean)