Flutter中如何为列表内嵌套对象的指定元素赋值?
问题原因
List.filled(count, instance) 会创建一个包含count个同一实例引用的列表。也就是说,你列表里的11个DurationTime其实都是指向同一个对象的指针,修改其中任何一个的属性,所有元素都会跟着变——因为它们本质上是同一个东西。
解决办法
你需要确保列表里的每个元素都是独立的DurationTime实例,常用两种方式:
方式1:用List.generate创建列表
List.generate会为每个索引执行一次你提供的生成函数,每次都返回新的实例:
List<DurationTime> instDevice = List.generate(11, (index) => DurationTime());
这样每个位置的DurationTime都是全新的对象,修改其中一个的p24H.latest.value就只会影响对应索引的元素。
方式2:手动初始化并添加元素
如果DurationTime需要复杂的初始化逻辑,可以手动循环创建:
List<DurationTime> instDevice = []; for (int i = 0; i < 11; i++) { instDevice.add(DurationTime()); // 若需给不同索引的实例设置初始值,可在此处处理 }
额外注意:嵌套对象的引用问题
如果DurationTime里的p24H、latest也是自定义类,要确保这些嵌套对象在创建DurationTime时也是新实例,而非共享引用。比如你的DurationTime构造函数里,要为p24H创建新的StatisticalParam实例,避免嵌套对象出现同样的共享问题:
class DurationTime { StatisticalParam p24H; DurationTime() : p24H = StatisticalParam(); // 每次创建DurationTime时都新建StatisticalParam } class StatisticalParam { TimeValuePair latest; StatisticalParam() : latest = TimeValuePair(); // 同理新建TimeValuePair }
内容的提问来源于stack exchange,提问作者Mahshad Parsa
相关产品推荐
相关产品推荐

