我发现了一篇文章,它描述了如何在LazyColumn中实现视差视图,并且有这样一种方法:
@Composable
fun ImageParallaxScroll() {
val lazyListState = rememberLazyListState()
val list = (0..1_000).map{ "Item $it" }.toList()
val firstItemTranslationY: LazyListState by remember {
derivedStateOf {
when {
lazyListState.layoutInfo.visibleItemsInfo.isNotEmpty() && lazyListState.firstVisibleItemIndex == 0 -> lazyListState.firstVisibleItemScrollOffset * .6f
else -> 0f
}
}
}
...
}
问题是整个remember
块用红线下划线,这样的错误来:
Type 'TypeVariable(T)' has no method 'getValue(Nothing?, KProperty<*>)' and thus it cannot serve as a delegate
不明白这里有什么问题?
2条答案
按热度按时间kfgdxczn1#
我在这里看到的几件事...
首先:
您需要导入:
或使用以下命令导入所有内容:
这将导入您缺少的
State<T>
上的扩展运算符函数(从SnapshotState.kt文件)。由于某种原因,IDE似乎很难自动导入顶级扩展函数。
不知道为什么它的
inlined
,但这可能是不只是添加到State<T>
接口,而是有松散的顶级功能,需要额外的进口的原因。其次:
我相信返回类型是
Float
而不是LazyListState
。因此,导入的函数将是(也记住列表本身,因此在重组时不会重新计算):
s8vozzvw2#
在您的build.graddle项目级别将编写版本更新为最后一个版本
并升级kotlin.android插件版本
}
看起来像是版本兼容性问题
这样做可能需要更新build.gradleapp level中声明的一些实现版本