observeAsState不工作的列表,在jetpack撰写



我试图在一个可组合的。为此,我有一个视图模型下面的列表变量

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()

但是,上面的代码不起作用。在composable中它总是返回空列表。但如果我通过视图模型功能登录,我可以看到数据。我怎样才能纠正这个问题?

使用mutableStateListOf代替LiveData

var allProviders by mutableStateListOf<ServiceProvider>()

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

您也可以使用

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

代替LiveData和all

collectAsState

相关内容

  • 没有找到相关文章