调用flipButtonClicked()后State未更新,请问原因是什么?
问题原因及解决方法
问题出在你修改State内部对象属性的方式上——Compose的mutableStateOf只会在持有对象的引用发生改变时触发重组,而不是对象内部属性变化时。
具体分析
你的_state是用mutableStateOf包裹的CardState实例,当你执行_state.isFlipped = !_state.isFlipped时,只是修改了这个实例的内部属性,但_state指向的对象引用完全没变,所以Compose感知不到状态变化,自然不会更新UI。
解决方法
要让Compose检测到状态变化,你需要给_state赋值一个新的CardState实例,而不是修改原有实例的属性:
首先确保
CardState是数据类(如果还不是的话),数据类自带copy方法,能方便地创建新实例:data class CardState(val isFlipped: Boolean)修改
flipButtonClicked方法,用copy生成新实例并赋值给_state:fun flipButtonClicked(){ _state = _state.copy(isFlipped = !_state.isFlipped) }
这样每次点击按钮时,_state的引用都会指向一个新的CardState对象,mutableStateOf就能检测到变化,触发UI重组,更新你的卡片翻转状态。
内容的提问来源于stack exchange,提问作者Eliah Gerber
相关产品推荐
相关产品推荐

