为何Jetpack Compose中mutableStateListOf无法使用委托属性?
为什么Jetpack Compose中
mutableStateListOf不能用委托属性语法 核心原因
mutableStateListOf返回的是SnapshotStateList<T>类型,这个类没有实现委托属性所需的getValue/setValue操作符函数,也没有对应的扩展函数支持by委托语法。你导入的import androidx.compose.runtime.getValue和import androidx.compose.runtime.setValue,是专门为MutableState类型(mutableStateOf的返回值)提供的委托扩展,对SnapshotStateList完全无效。
正确写法
不需要使用by委托,直接赋值即可:
val favourites = remember { mutableStateListOf<Int>() }
SnapshotStateList本身就是Compose的可观察集合,当你对它执行添加、删除、修改等操作时,Compose会自动感知到集合内容变化并触发重组,完全不需要依赖委托语法。
补充说明
如果非要模拟委托写法(实际没必要),你可以自行实现委托扩展,但这属于冗余操作。官方设计中,mutableStateListOf这类集合型状态本身就不需要委托,直接使用即可满足响应式需求。
内容的提问来源于stack exchange,提问作者Compose Learner
相关产品推荐
相关产品推荐

