繁体   English   中英

Jetpack Compose 应该如何引用可组合的高阶 function?

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

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

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

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

作为参考, AdapterList的签名如下:

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

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

ItemCard function 看起来像这样:

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

据我了解, ItemCard function 的签名为@Composable (Item) -> Unit ,它应该满足 AdapterList 的itemCallback参数的AdapterList

此时 IDE 中没有显示错误。

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

类型不匹配:推断类型为 KFunction1<Item, Unit> 但 (Item) -> Unit 是预期的

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

OK, 初步分析是:是个bug。

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

我为此提交了一个问题(随后被标记为此问题的副本)。 因此,与此同时,您会遇到 lambda 表达式。 但是,请密切关注该问题,因为我们可能会在那里找到解决方法。

您可以使用:

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

或者

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM