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

问题描述 投票:0回答:2

我发现一篇文章介绍了如何在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

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

android android-jetpack-compose android-jetpack android-compose-textfield
2个回答
8
投票

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

首先:

您需要导入:

import androidx.compose.runtime.getValue

或者使用以下命令导入所有内容:

import androidx.compose.runtime.*

这将导入您缺少的

State<T>
上的扩展运算符函数(来自 SnapshotState.kt 文件)。

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

不确定为什么它

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

其次:

我相信返回类型是will

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

0
投票

在你的 build.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 中声明的一些实现版本应用程序级别

© www.soinside.com 2019 - 2024. All rights reserved.