0

嘿,我正在使用 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失败,那么我们会显示错误消息

提前致谢

4

0 回答 0