第一步确定是 mutableStateListOf
var newData = remember {
mutableStateListOf<HaiveCheckBox>()
}
第二部 常规的 更新所在元素是不生效的。
但是删除和新增是生效的
正确写法:
newData
.find { it.isChecked }
?.let {
val tempData = it
//获取索引位置
val index = newData.indexOf(tempData)
newData.removeAt(index)
newData.add(index,tempData.copy(isChecked = false))
}
newData
.find { it == newData[index] }
?.let {
val tempData = it
//获取索引位置
val index = newData.indexOf(tempData)
newData.removeAt(index)
newData.add(index,tempData.copy(isChecked = true))
}
错误示例 :
也是我们以往写法比较多的一种。
newData.forEach {
it.isChecked = false
}
newData[index].isChecked = true
上面的可以抽取共用方法
fun <T> SnapshotStateList<T>.updateElement(
predicate: (T) -> Boolean, transform: (T) -> T
) {
this.find(predicate)?.let {
val tempData = it
val index = this.indexOf(tempData)
this.removeAt(index)
this.add(index, transform(it))
}
}
更新就变成了
newData.updateElement(predicate = {it.isChecked}, transform = {
it.copy(isChecked = false)
})
newData.updateElement(predicate = { it == newData[index]}, transform = {
it.copy(isChecked = true)
})