android 错误:(JetPack Compose)类型“TypeVariable(T)”没有方法“getValue(Nothing?,KProperty〈*>)”

8tntrjer  于 2023-04-04  发布在  Android
关注(0)|答案(2)|浏览(304)

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

不明白这里有什么问题?

kfgdxczn

kfgdxczn1#

我在这里看到的几件事...

首先:

您需要导入:

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
            }
        }
    }
    ...
}
s8vozzvw

s8vozzvw2#

在您的build.graddle项目级别将编写版本更新为最后一个版本

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.gradleapp level中声明的一些实现版本

相关问题