使用 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]
调用 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]