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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:05:23