我正在尝试通过jetpack中的observeAsState从LiveData中获取一个值,但出现一个奇怪的错误
类型'State
'没有方法'getValue(Nothing ?, KProperty <*>)',因此无法充当代理人
@Composable
fun UserScreen(userViewModel:UserViewModel){
val items: List<User> by userViewModel.fetchUserList.observeAsState()
UserList(userList = items)
}
class UserViewModel: ViewModel() {
private val dataSource = UserDataSource()
val fetchUserList = liveData {
emit(dataSource.dummyUserList)
}
}
答案 0 :(得分:36)
要修复错误,请添加以下导入:
// 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
变量以及 getValue
和 operator function 函数提供 getValue
setValue
用于 var
变量。
要了解有关如何在 jetpack compose 中组合属性委托和状态的更多信息,请参阅 Use remember to create internal state in a composable 文档部分。 an explanation 视频中还有 Thinking in Compose。
答案 1 :(得分:26)
如果遇到未定义observeAsState或getValue的编译器错误,请确保您具有以下导入:
导入androidx.compose.runtime.getValue
导入androidx.compose.runtime.livedata.observeAsState
此信息来自“在Jetpack Compose中使用状态”代码实验室中的步骤4。
答案 2 :(得分:4)
自您观察LiveData以来,我认为商品类型必须为空:
val items: List<User>? by userViewModel.fetchUserList.observeAsState()
答案 3 :(得分:1)
在我的例子中,在撰写应用程序中,正是这个缺少的导入引发了错误
<块引用>导入 androidx.compose.getValue
答案 4 :(得分:1)
尽管有导入,我还是遇到了这个问题!花了一点时间,但后来我意识到我的问题是您观察到的任何变量都需要是 val 而不是 var:
就我而言是
var background: Int by currentBackgroundColor.observeAsState(0)
应该是:
val background: Int by currentBackgroundColor.observeAsState(0)
答案 5 :(得分:1)
您可以使用: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("") }
答案 6 :(得分:0)
您需要导入
WS_THICKFRAME
这将导入这个函数,它基本上是 import androidx.compose.runtime.getValue
by