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

Quw*_*sim 4 android kotlin android-jetpack-compose

我在 Android 中看到了新的 Jetpack Compose,并决定尝试一下。我一直在尝试理解有关可组合项的一些基本概念。我的问题是:可以composable functions调用non-composable函数吗?我用谷歌搜索没有结果。

Com*_*are 7

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

是的。Kotlin 中的几乎所有内容最终都是函数调用,并且大多数可用的函数都是不可组合的。

以下是 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")
    }
}
Run Code Online (Sandbox Code Playgroud)

其中,以下功能不是@Composable

  • imageResource()
  • Modifier.padding()
  • Modifier.preferredHeight()
  • Modifier.fillMaxWidth()

规则是,标记为 的函数@Composable需要由标记为@Composable或可组合函数的一小群最终消费者之一的另一个函数调用。这让人想起协程,其中suspend函数需要由其他suspend函数或函数的一小部分最终消费者之一suspend(例如,协程构建器,如launch())调用。