@Composable函数中才能调用@Composable函数。在foreach循环中编写@Composable函数将导致编译时错误。

10

我想迭代一个对象 List,对于每个对象,我都想显示一个可组合的卡片。问题是您无法从 list.forEach{} 括号内部调用可组合的函数。

代码如下:

@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个回答

15

LazyColumn中有items参数。

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

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


14

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接