compose foreach 循环:@Composable 调用只能在@Composable 函数的上下文中发生

时间:2021-06-13 18:41:57

标签: android android-jetpack-compose

我正在尝试迭代 List 个对象,对于我想要显示可组合卡片的每个对象。问题是你不能从 list.forEach{} 括号内调用 Composable 函数。

代码:

@Composable
fun Greeting(listy : List<SomethingForLater>) {
  LazyColumn {
    listy.forEach {
        //error here
        testCard(somethingForLater = it)
        }

    }
}
@Composable
fun testCard(somethingForLater: SomethingForLater){
val theme = MaterialTheme
Card(shape = theme.shapes.small,backgroundColor = theme.colors.secondary){
    Column {
        Row {
            Text(
                text = somethingForLater.task,
                modifier = Modifier.padding(start = 5.dp,
                    top = 3.dp,bottom = 3.dp
                ),
                fontSize = 18.sp,
                fontWeight = FontWeight.Bold,

                )
        }
    }
    }
}

2 个答案:

答案 0 :(得分:2)

items 中有 LazyColumn 参数

LazyColumn {
        items(listy) { message ->
            testCard(message)
        }
    }

或者您可以简单地将 LazyColumn 更改为 Column

答案 1 :(得分:2)

LazyColumn 不提供任何可组合的内容。因此,您必须将可组合函数包装在 items 参数中。

@Composable
fun Greetings(listy : List<SomethingForLater>) {
  LazyColumn {
    item(listy.size) {
      listy.forEach { somethingForLater ->
        TestCard(somethingForLater = somethingForLater)
      }
    }
  }
}