Jetpack Compose 应如何引用可组合的高阶函数?

How should a composable higher order function be referenced with Jetpack Compose?

我正在使用 Jetpack Compose 版本 0.1.0-dev13

我编写了一个简单的可组合函数,它使用带有项目列表的 AdapterList。 (注意:当使用 lambda 而不是使用 :: 语法的引用时,这会按预期工作)

AdapterList(data = items, itemCallback = ::ItemCard)

供参考,AdapterList签名如下:

@Composable
fun <T> AdapterList(
    data: List<T>,
    modifier: Modifier = Modifier,
    itemCallback: @Composable (T) -> Unit
)

为了更好地促进个人预览,我将项目回调分解为一个单独的可组合函数。

ItemCard 函数如下所示:

@Composable
private fun ItemCard(item: Item) {
    Card(
        color = item.type.getColor()
    ) {
        Text(
            item.name,
            style = MaterialTheme.typography.h5
        )
    }
}

据我了解,ItemCard函数的签名为@Composable (Item) -> Unit,应该满足AdapterListitemCallback参数的类型。

此时 IDE 中没有错误显示。

但是,在尝试构建项目时,显示以下错误:

Type mismatch: inferred type is KFunction1<Item, Unit> but (Item) -> Unit was expected

这两种类型有什么区别,应该如何更改 ItemCard(或对它的引用)以满足类型约束?

您可以使用:

AdapterList(data = items){ ItemCard(item = it) }

AdapterList(data = items, itemCallback= { ItemCard(it) } )

好的,the preliminary analysis是:这是一个错误。

(注意:上一段中的 link 需要 Kotlinlang Slack 访问权限)

我提交了 an issue for this (which was subsequently marked as a duplicate of this issue)。所以,与此同时,你被 lambda 表达式困住了。但是,请密切关注该问题,因为我们可能会在那里找到解决方法。