在jetpack compose中,当列表被清除时,可组合不能重新组合



我有一个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

最新更新