嘿,我正在使用 Android Kotlin。我正在从 Android 文档学习这个LatestNewsUiState密封类示例。我做了我自己的sealed class
例子。但我有点困惑,我怎么能做到这一点。我是否适合我的场景?
数据状态.kt
sealed class DataState {
data class DataFetch(val data: List<Xyz>?) : DataState()
object EmptyOnFetch : DataState()
object ErrorOnFetch : DataState()
}
视图模型.kt
var dataMutableStateFlow = MutableStateFlow<DataState>(DataState.EmptyOnFetch)
fun fetchData() {
viewModelScope.launch {
val result = repository.getData()
result.handleResult(
onSuccess = { response ->
if (response?.items.isNullOrEmpty()) {
dataMutableStateFlow.value = DataState.EmptyOnFetch
} else {
dataMutableStateFlow.value = DataState.DataFetch(response?.items)
}
},
onError = {
dataMutableStateFlow.value = DataState.ErrorOnFetch
}
)
}
}
fun fetchMoreData() {
viewModelScope.launch {
val result = repository.getData()
result.handleResult(
onSuccess = { response ->
if (response?.items.isNullOrEmpty()) {
dataMutableStateFlow.value = DataState.EmptyOnFetch
} else {
dataMutableStateFlow.value = DataState.DataFetch(response?.items)
}
},
onError = {
dataMutableStateFlow.value = DataState.ErrorOnFetch
}
)
}
}
活动.kt
lifecycleScope.launchWhenStarted {
viewModel.dataMutableStateFlow.collectLatest { state ->
when (state) {
is DataState.DataFetch -> {
binding.group.visibility = View.VISIBLE
}
DataState.EmptyOnFetch,
DataState.ErrorOnFetch -> {
binding.group.visibility = View.GONE
}
}
}
}
}
我有一些我想以标准方式实现的点。
1.当你第一次调用api时fetchData()
,如果数据不为空或为空,那么我们需要显示视图。如果数据为空或为空,那么我们需要隐藏视图。但是如果 api失败,那么我们需要显示一条错误消息。
2.当视图可见并且视图显示一些数据时。然后我们调用另一个 apifetchMoreData()
并且数据为空或null然后我不想按照上面编写的代码隐藏视图。如果 api失败,那么我们会显示错误消息。
提前致谢