使用 ViewModel 添加项目时 MutableStateFlow 未触发

MutableStateFlow not firing when add item with ViewModel

调用 add 方法时,我需要 observe/collect 来自 ViewModel 内 Stateflow 的数据。但是当我添加一个项目时,状态不做重组。

这是我的 ViewModel 代码:

private var _selectedData = MutableStateFlow<MutableList<String>>(mutableListOf())
val data = listOf("Hello", "my", "name", "is", "Claire", "and", "I", "love", "programming")
val selectedData = _selectedData.asStateFlow()
    
fun addSelectedData(index: Int){
    _selectedData.value.add(data[index])
    Log.d("TAG", _selectedData.value.toString())
} 

这是我的可组合代码:

val mainViewModel: MainViewModel = viewModel()
val selectedData by mainViewModel.selectedData.collectAsState()
LaunchedEffect(key1 = selectedData){
    Log.d("TAG", "SELECTED $selectedData")
}

提前致谢。

MutableStateFlow 无法注意到您修改了它包含的对象。您必须将新对象设置为 MutableStateFlow,因此需要一个新列表。

_selectedData 的类型更改为 MutableStateFlow<List<String>> 然后执行:

_selectedData.value = _selectedData.value + data[index]

您可以通过以下方式缩短它:

_selectedData.value += data[index]