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

Tyg*_*ris 10 android android-jetpack-compose

我正在尝试迭代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,

                )
        }
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rat 15

items参数在LazyColumn

LazyColumn {
        items(listy) { message ->
            testCard(message)
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者你可以简单地更改LazyColumnColumn


san*_*tds 15

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

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