You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 11:45:04