我试图在一个可组合的。为此,我有一个视图模型下面的列表变量
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