这两个场景之间的行为差异与Jetpack Compose处理@Composable
个函数的方式以及调用它们的上下文有关.
在第一个场景中:
val list: List<@Composable ()-> Unit> = listOf({Text("Cat")}, {Text("Dog")})
这两个Text("Cat") and Text("Dog")
都包装在列表中的@Composable lambda表达式中.当您直接使用该列表时,将在@Composable函数的上下文中调用lambda表达式.
在第二个场景中:
val list: List<@Composable ()-> Unit> = listOf({Text("Cat")}) + listOf({Text("Dog")})
在这里,您使用+
运算符来连接两个列表.结果列表包含两个@Composable
lambda表达式,但它们不会在@Composable
上下文中自动调用.
为了更好地理解,请try 使用此示例
@Composable
fun MainView() {
val list: List<@Composable () -> Unit> = combineComposableLists()
// Important: Render each composable in the combined list
list.forEach { composable -> composable() }
}
@Composable
fun combineComposableLists(): List<@Composable () -> Unit> {
val list1: List<@Composable () -> Unit> = getList1()
val list2: List<@Composable () -> Unit> = getList2()
return list1 + list2
}
@Composable
fun getList1(): List<@Composable () -> Unit> {
return listOf(
{ Text("Cat") },
{ Text("Dog") }
)
}
@Composable
fun getList2(): List<@Composable () -> Unit> {
return listOf(
{ Text("Fish") },
{ Text("Bird") }
)
}