Flutter中ListView内ListTile的Switch切换时其他开关同步触发如何解决
问题原因
- 初始化
scheduleList时使用了List.filled方法,该方法会将传入的同一个ScheduleProgram实例填充到列表的所有位置,最终列表内10个元素本质是指向同一对象的引用,修改任意一个元素的属性都会同步作用到所有其他元素,是Switch同步切换的核心原因。
修复方案
将原列表初始化代码替换为List.generate实现,保证每个索引位置生成独立的ScheduleProgram实例:
// 修正后的列表初始化代码 List<ScheduleProgram> scheduleList = List.generate(10, (index) => ScheduleProgram( enabled: false, isStart: false, time: const TimeOfDay(minute: 0, hour: 0), duration: 0, dow: [false, false, false, false, false, false, false] ), growable: false );
可选优化建议
- 可给
ListTile添加唯一key,例如key: ValueKey(index),避免ListView滚动复用组件时出现状态错乱问题 - 建议将
ScheduleProgram改为不可变类,通过copyWith方法修改属性,更符合Flutter不可变状态的设计规范
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

