Android:Jetpack Compose:如何获取 Composable 内 StateFlow 值更改的通知?

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

我有一个 ViewModel,其中包含以下列表作为 StateFlow

private val _mutableStateTopicItemList = MutableStateFlow<List<TopicItem>>(listOf())
val stateTopicItemList = _mutableStateTopicItemList.asStateFlow()

现在在我的 Composable 函数中,只要上述变量的值发生变化,我就想获得更新

stateTopicItemList

TopicItem
是我的自定义类。

我想要在我的 Composable 内部有一个可观察对象,它可以观察任何更改,例如从 viewModel 列表变量中添加/更新/删除

stateTopicItemList

我尝试使用collectAsState()方法来获取更新,但不确定如何监听这些更新。看看我尝试过的。

val listOfTopicsWithState = myViewModel.stateTopicItemList.collectAsState()

我想要实现的只是每当列表中发生更改时,我想将其存储在我的 SharedPreference 中。

任何帮助将不胜感激。

android android-jetpack-compose sharedpreferences android-viewmodel kotlin-stateflow
2个回答
0
投票

您可以使用

LaunchedEffect
在状态发生变化时运行一些代码:

val listOfTopicsWithState by myViewModel.stateTopicItemList.collectAsState()

LaunchedEffect(listOfTopicsWithState) {
    if(listOfTopicsWithState.isNotEmpty()) {
        // do something
    }
}

也就是说,更常见的是在视图模型中运行这种逻辑,并将可组合项限制为 UI 相关代码。


0
投票

在 ViewModel 中使用 User MutableStateList 而不是 Flow

val stateTopicItemList = mutableStateListOf<TopicItem>()

在您的可组合函数中像这样使用它:

val listOfTopicsWithState by remember { myViewModel.stateTopicItemList }
© www.soinside.com 2019 - 2024. All rights reserved.