observeAsState 不适用于列表,在 Jetpack Compose 中

observeAsState not working for list, in jetpack compose

我正在尝试显示可组合项中的对象列表。为此,我有一个带有以下列表变量的视图模型

var allProviders: LiveData<MutableList<ServiceProvider>> = MutableLiveData(mutableListOf())

此外,在视图模型初始化时,我正在调用一个 api 来填充上面的列表:-

private fun getAllMerchantList() {
    getAllMerchants(object: RetrofitCallback {
        override fun onData(data: Any?) {
            //some logic here
            allProviders.value?.addAll(allProvidersLocal)
            Log.i("TAG", "ServiceProviders inside: ${allProviders.value?.size}")
        }

        override fun onFailed(ex: String?) {
            Log.i("TAG", "onFailed: ${ex.toString()}")
        }
    })
}

并且,观察上面的情况,在可组合的情况下,例如:-

val viewModel: MainActivityViewModel = viewModel()
val allProviders by viewModel.allProviders.observeAsState()

但是,上面的代码不起作用。它总是返回可组合的空列表。但是如果我通过 viewmodel 功能登录,我可以看到数据。我该如何纠正?

在 Compose

中使用 mutableStateListOf 而不是 LiveData

var allProviders by mutableStateListOf<ServiceProvider>()

现在将其用作常规列表对象。它将触发重组。此外,尽可能在 Compose 中使用 MutableState 类型的对象,因为它们是为它构建的,反之亦然。

您也可以使用

val mutableStateFlod: MutableStateFlow<MutableList<ServiceProvider>> = MutableStateFlow(emptyList())

而不是 LiveData 和所有

collectAsState