【发布时间】:2020-06-13 16:29:35
【问题描述】:
我正在使用 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,它应该满足AdapterList 的itemCallback 参数的类型。
此时 IDE 中没有显示错误。
但是,在尝试构建项目时,显示以下错误:
类型不匹配:推断类型为 KFunction1
- 但 (Item) -> Unit 是预期的
这两种类型有什么区别,应该如何更改ItemCard(或对它的引用)以满足类型约束?
【问题讨论】:
-
我也见过这个。我假设这是 Compose 的 Kotlin 编译器插件中的错误/限制。创建可重现的测试用例后,我会在 Kotlinlang Slack 中的
#compose中提问,如果我们找到解决方案,我会在此处添加答案。 -
听起来不错,干杯!
标签: android kotlin higher-order-functions android-jetpack-compose