错误:(JetPack Compose)类型 'TypeVariable(T)' 没有方法 'getValue(Nothing?, KProperty<*>)



我发现了一篇文章,其中描述了如何在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

不明白这里出了什么问题?

我可以在这里看到一些东西。。。

首先:

您需要导入:

import androidx.compose.runtime.getValue

或者使用导入所有内容

import androidx.compose.runtime.*

这将导入State<T>上缺少的扩展运算符函数(来自SnapshotState.kt文件(。

由于某种原因,IDE似乎很难自动导入顶级扩展函数。

不确定为什么是inlined,但这可能是不只是将其添加到State<T>接口,而是具有松散的顶层功能的原因,需要额外的导入。

第二:

我相信返回类型将是Float而不是LazyListState

因此,导入的函数将是(还记住列表本身,这样它就不会在重新组合中重新计算(:

import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
@Composable
fun ImageParallaxScroll() {
val lazyListState = rememberLazyListState()
val list = remember { (0..1_000).map{ "Item $it" }.toList() }
val firstItemTranslationY: Float by remember {
derivedStateOf {
when {
lazyListState.layoutInfo.visibleItemsInfo.isNotEmpty() && lazyListState.firstVisibleItemIndex == 0 -> lazyListState.firstVisibleItemScrollOffset * .6f
else -> 0f
}
}
}
...
}

在您的构建中.graddle项目级别将compose版本更新为最后一个

buildscript {
ext {
compose_version = '1.4.0'
}
} 

并升级kotlin.android插件版本

plugins {
id 'com.android.application' version '7.4.1' apply false
id 'com.android.library' version '7.4.1' apply false
id 'org.jetbrains.kotlin.android' version '1.8.10' apply false

}

看起来像是版本兼容性问题

这样做可能需要更新build.gradle应用程序级别中声明的一些实现版本

最新更新