Jetpack Compose - 未解决的引用:observeAsState

78

我正在学习Jetpack Compose, 尝试为我的@Composable创建一个View Model。

在文档(https://developer.android.com/codelabs/jetpack-compose-state#3)中,当观察可组合状态变化时,他们使用了observeAsState,但在我的实现中,该方法找不到。相反,我获得了Unresolved reference: observeAsState

ViewModel

class MainActivityViewModel : ViewModel() {
    val list: LiveData<MutableList<String>> = MutableLiveData(mutableListOf("Ana", "are", "mere"))

    fun addString(item: String) {
        val list: MutableList<String> = list.value!!
        list.add(item)
    }

}

可组合的 enter image description here

我正在使用Compose 1.0.0-beta01


3
仅供参考,如果有人阅读此内容但未遵循:2021年的原始问题是关于State Codelab v2021的。在2022年,创建并上传了一个新的State Codelab,因此上面的URL不再带您到可以查看代码和此API的位置,而是带您到新codelab中的页面。干杯! - Alejandra
3个回答

170

observeAsStateruntime-livedata库的一部分。

将依赖项添加到您的模块的build.gradle文件中。将$compose_version替换为您使用的Compose版本,例如1.0.0-beta01

implementation "androidx.compose.runtime:runtime-livedata:$compose_version"

您可以在Google的Maven存储库这里找到可用版本。


8
然而,仍然没有更新所需依赖的相同文档。 - NightFury
这是Compose的一部分吗? - IgorGanapolsky

10

虽然不是直接回答你的问题,但我的建议是你可以迁移到Flow,而不是使用LiveData。

ViewModel ->

val yourList: MutableStateFlow<List<String>> = MutableStateFlow(listOf("String1","String2","String3"))

可组合的 ->

val yourList by yourViewModel.yourList.collectAsState()

相同的代码..找不到该方法。 - Vetalll
你是否正确导入了setter和getter方法? - mario chois
问题出在不同的库和版本。 - Vetalll
我的问题是,使用类似于Observestate与LiveData或CollectAsstate与Flow之类的状态管理方式哪种更方便?我很困惑应该使用哪一种。 - Pratik Fagadiya

1

CollectAsStateWithLifecycle现在被Google开发人员推荐用于Android,它的生命周期API也是稳定的。Flow也是开发人员推荐的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接