android - @Composable 调用只能在 @Composable 函数的上下文中发生
问题描述
如何从 corrutines 的上下文中调用可组合函数?我尝试以下代码,但出现错误。
@Composable
fun ShowItems(){
var ListArticle = ArrayList<Article>()
lifecycleScope.launchWhenStarted {
// Triggers the flow and starts listening for values
viewModel.uiState.collect { uiState ->
// New value received
when (uiState) {
is MainViewModel.LatestNewsUiState.Success -> {
//Log.e(TAG,"${uiState.news}")
if(uiState.news != null){
for(i in uiState.news){
ListArticle.add(i)
}
context.ItemNews(uiState.news.get(4))
Log.e(TAG,"${uiState.news}")
}
}
is MainViewModel.LatestNewsUiState.Error -> Log.e(TAG,"${uiState.exception}")
}
}
}
}
解决方案
你应该这样做:
@Composable
fun ShowItems(){
val uiState = viewModel.uiState.collectAsState()
// Mount your UI in according to uiState object
when (uiState.value) {
is MainViewModel.LatestNewsUiState.Success -> { ... }
is MainViewModel.LatestNewsUiState.Error -> { ... }
}
// Launch a coroutine when the component is first launched
LaunchedEffect(viewModel) {
// this call should change uiState internally in your viewModel
viewModel.loadYourData()
}
}
推荐阅读
- ios - WKWebView 来回问题
- asp.net-core-2.1 - ASP.NET Core 2.1 外部登录在生产中失败
- python - SQLAlchemy 子查询列表对象没有属性
- ruby-on-rails - 如何在haml中呈现tinymce编辑器内容?
- php - PHP - 使用“选择”默认值或以前的值编辑表单字段时被删除
- javascript - 如何从 html 中的 YouTube 嵌入式 Iframe 代码中删除相关视频?
- java - 如何使用数组在文本文件中获取某些数据?
- excel - 我可以让这个宏/代码更快吗?(Excel VBA 重复查找器)
- django-rest-framework - 如何使用访问和刷新令牌返回自定义数据以识别 Django Rest Framework 简单 JWT 中的用户?
- javascript - ajax更新网址的问题