【问题标题】:"@Composable invocations can only happen from the context of a @Composable function"“@Composable 调用只能在 @Composable 函数的上下文中发生”
【发布时间】:2021-11-01 22:53:32
【问题描述】:
@Composable
fun CategorySection(context: Context) {
    Column(modifier = Modifier.padding(8.dp)) {
        Text(
            text = "Api Data",
            style = MaterialTheme.typography.h5,
            modifier = Modifier.padding(vertical = 7.dp, horizontal = 8.dp)
        )
        val coroutineScope = rememberCoroutineScope()

        coroutineScope.launch(Dispatchers.Main) {
            val response = ApiPhoto.apiService.getPhotos()

            if (response.isSuccessful && response.body() != null) {
                val photos = response.body()
                photos?.let {
                    CategoryItemSection(it)
                }
            } else {
                Toast.makeText(
                    context,
                    "Error Occurred: ${response.message()}",
                    Toast.LENGTH_LONG
                ).show()
            }
        }
    }
}

@Composable
fun CategoryItemSection(photos: List<Photo>) {
    LazyColumn(
        modifier = Modifier.fillMaxWidth()
    ){
        items(photos.size){
            CardView(photos[it])
        }
    }
}

【问题讨论】:

  • 请提供更多信息 - 错误发生在哪一行,完整的堆栈跟踪是什么,您尝试修复什么?

标签: android kotlin kotlin-coroutines android-jetpack-compose android-jetpack


【解决方案1】:

你不能从协程内部调用CategoryItemSection。您在这里的编码实践是完全错误的。您不应该从可组合物中对数据源进行 API 调用。使用视图模型和状态提升:

阅读状态提升和单向数据流:

https://developer.android.com/jetpack/compose/state

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多