我有一个MutableStateFlow
,它有点像emptyList
。当我添加项目时,我的视图被重新组合,没有任何问题。现在我想在列表清空时重新组合视图。我尝试了一些代码,但没有任何反应。
PairViewModel
class PairViewModel : BaseViewModel() {
val scanLowEnergyDevices by lazy { MutableStateFlow(emptyList<ScanResult>()) }
fun addDevices(result: ScanResult) {
scanLowEnergyDevices.value += result
}
}
ContentStateful
@Composable
fun ContentStateful(
context: Context = LocalContext.current,
viewModel: BloodPressurePairViewModel = getViewModel()
) {
val activity = context as ComponentActivity
val scanDeviceList by viewModel.scanLowEnergyDevices.collectAsStateWithLifecycle()
ContentStateLess(
scanDeviceList = scanDeviceList,
resetAction = {
viewModel.scanLowEnergyDevices.value.toMutableList().clear()
}
)
}
ContentStateLess
@Composable
fun ContentStateLess(
scanDeviceList: List<ScanResult>,
resetAction: () -> Unit,
) {
AnimatedVisibility(visible = scanDeviceList.isNotEmpty()) {
Text(text = "scanDeviceList ${scanDeviceList.size}")
Button(onClick = { resetAction() }) {
Text(text = "Reset")
}
}
}
这里出了什么问题?由于
尝试像这样使用SnapshotStateList
val scanLowEnergyDevices by lazy { mutableStateListOf<ScanResult>() }
添加如下条目
fun addDevices(result: ScanResult) {
scanLowEnergyDevices.add(result)
// scanLowEnergyDevices.value.add(result)
}
并清除列表,就像您对标准集合所做的那样
resetAction = {
viewModel.scanLowEnergyDevices.clear()
// viewModel.scanLowEnergyDevices.value.clear()
}
或者在你的用例中,因为它在一个状态中包装,在.add()
和.clear()
调用
.value