类型'State <List <User>?>'没有方法'getValueNothing ?, KProperty <*>',因此它不能充当委托

问题描述

我正在尝试通过jetpack中的observeAsState从LiveData中获取一个值,但出现一个奇怪的错误

类型'State '没有方法'getValue(Nothing ?,KProperty )',因此无法充当​​代理人

代码

@Composable
fun UserScreen(userViewModel:UserViewModel){
    val items: List<User> by userViewModel.fetchUserList.observeAsState()
    UserList(userList = items)
}

enter image description here

ViewModel

class UserViewModel: ViewModel() {

    private val dataSource = UserDataSource()
    val fetchUserList = liveData {
        emit(dataSource.dummyUserList)
    }
}

解决方法

要修复错误,请添加以下导入:

// for a 'val' variable
import androidx.compose.runtime.getValue

// for a `var` variable also add
import androidx.compose.runtime.setValue

// or just
import androidx.compose.runtime.*

要将变量用作 property delegate,您应该为只读 val 变量以及 getValueoperator function 函数提供 getValue setValue用于 var 变量。

要了解有关如何在 jetpack compose 中组合属性委托和状态的更多信息,请参阅 Use remember to create internal state in a composable 文档部分。 an explanation 视频中还有 Thinking in Compose

,

如果遇到未定义observeAsState或getValue的编译器错误,请确保您具有以下导入:

导入androidx.compose.runtime.getValue

导入androidx.compose.runtime.livedata.observeAsState

此信息来自“在Jetpack Compose中使用状态”代码实验室中的步骤4。

,

自您观察LiveData以来,我认为商品类型必须为空:

val items: List<User>? by userViewModel.fetchUserList.observeAsState()
,

在我的例子中,在撰写应用程序中,正是这个缺少的导入引发了错误

导入 androidx.compose.getValue

,

尽管有导入,我还是遇到了这个问题!花了一点时间,但后来我意识到我的问题是您观察到的任何变量都需要是 val 而不是 var

就我而言是
var background: Int by currentBackgroundColor.observeAsState(0)

应该是:
val background: Int by currentBackgroundColor.observeAsState(0)

,

您可以使用:import androidx.compose.runtime.*


必要的进口是:

import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.runtime.mutableStateOf

var value by remember { mutableStateOf("") }
,

您需要导入

WS_THICKFRAME

这将导入这个函数,它基本上是 import androidx.compose.runtime.getValue

by

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...