可组合函数可以调用不可组合函数吗?
Can composable functions call non-composable functions?
我在 Android 中看到了新的 Jetpack Compose,并决定去看看。我一直在尝试了解有关可组合项的一些基本概念。
我的问题是:composable functions
可以调用 non-composable
函数吗?
我已经搜索 Google 没有结果。
My question is: Can composable functions call non-composable functions?
是的。 Kotlin 中的几乎所有内容都以函数调用结束,您可用的大多数函数是 non-composable.
这是 Google 的示例 Compose UI 代码之一:
@Composable
fun NewsStory() {
val image = imageResource(R.drawable.header)
Column(
modifier = Modifier.padding(16.dp)
) {
val imageModifier = Modifier
.preferredHeight(180.dp)
.fillMaxWidth()
Image(image, modifier = imageModifier,
contentScale = ContentScale.Crop)
Spacer(Modifier.preferredHeight(16.dp))
Text("A day in Shark Fin Cove")
Text("Davenport, California")
Text("December 2018")
}
}
也就是说,以下函数不是@Composable
:
imageResource()
Modifier.padding()
Modifier.preferredHeight()
Modifier.fillMaxWidth()
规则是标记为 @Composable
的函数需要被标记为 @Composable
的另一个函数或可组合函数的一小部分最终消费者之一调用。这让人想起协程,其中 suspend
函数需要被其他 suspend
函数或 suspend
函数的一小部分最终消费者之一调用(例如,协程构建器 launch()
).
我在 Android 中看到了新的 Jetpack Compose,并决定去看看。我一直在尝试了解有关可组合项的一些基本概念。
我的问题是:composable functions
可以调用 non-composable
函数吗?
我已经搜索 Google 没有结果。
My question is: Can composable functions call non-composable functions?
是的。 Kotlin 中的几乎所有内容都以函数调用结束,您可用的大多数函数是 non-composable.
这是 Google 的示例 Compose UI 代码之一:
@Composable
fun NewsStory() {
val image = imageResource(R.drawable.header)
Column(
modifier = Modifier.padding(16.dp)
) {
val imageModifier = Modifier
.preferredHeight(180.dp)
.fillMaxWidth()
Image(image, modifier = imageModifier,
contentScale = ContentScale.Crop)
Spacer(Modifier.preferredHeight(16.dp))
Text("A day in Shark Fin Cove")
Text("Davenport, California")
Text("December 2018")
}
}
也就是说,以下函数不是@Composable
:
imageResource()
Modifier.padding()
Modifier.preferredHeight()
Modifier.fillMaxWidth()
规则是标记为 @Composable
的函数需要被标记为 @Composable
的另一个函数或可组合函数的一小部分最终消费者之一调用。这让人想起协程,其中 suspend
函数需要被其他 suspend
函数或 suspend
函数的一小部分最终消费者之一调用(例如,协程构建器 launch()
).