可组合函数可以调用非组合函数吗?

时间:2020-09-05 14:27:23

标签: android kotlin android-jetpack-compose

我看到了Android中的新Jetpack Compose,并决定将其签出。我一直在尝试了解有关可组合物的一些基本概念。 我的问题是:composable functions是否可以调用non-composable函数? 我没有搜索过Google。

1 个答案:

答案 0 :(得分:3)

我的问题是:可组合函数可以调用非组合函数吗?

是的。 Kotlin中的几乎所有内容都会作为函数调用结束,并且您可以使用的大多数功能都是不可组合的。

以下是Google的示例撰写用户界面代码之一:

@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函数的一小群最终用户之一调用(例如,像{{1 }}。