我有一个 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 中。
任何帮助将不胜感激。
您可以使用
LaunchedEffect
在状态发生变化时运行一些代码:
val listOfTopicsWithState by myViewModel.stateTopicItemList.collectAsState()
LaunchedEffect(listOfTopicsWithState) {
if(listOfTopicsWithState.isNotEmpty()) {
// do something
}
}
也就是说,更常见的是在视图模型中运行这种逻辑,并将可组合项限制为 UI 相关代码。
在 ViewModel 中使用 User MutableStateList 而不是 Flow
val stateTopicItemList = mutableStateListOf<TopicItem>()
在您的可组合函数中像这样使用它:
val listOfTopicsWithState by remember { myViewModel.stateTopicItemList }