首页 > 解决方案 > 我如何创建列表的副本当 T 是对象时在飞镖中,请参见下面的代码

问题描述

https://dartpad.dartlang.org/编辑器中,我在下面输入以测试我的问题。

根据我的测试显然 list.from 函数仅在 T 不是对象/类时创建一个新副本

我为 List 测试了 list.from,它的作用类似于魅力,但不是类/对象。

请让我知道如何在下面的代码中创建 T 列表的新副本,这样当我们在一个地方更改列表时,另一个地方不会改变。

谢谢

void main() {
  List<Status> statuses = <Status>[
    Status(name: 'Confirmed', isCheck: true),
    Status(name: 'Cancelled', isCheck: true),
  ];
  print('statuses = ${statuses.toList().map((x) => x.name + '=' + x.isCheck.toString())}');

  //this supposed to create a new list of T but apparently only work for non-object
  List<Status> otherStatuses =  new List<Status>.from(statuses);

  print('otherStatuses= ${otherStatuses.toList().map((x) => x.name + '=' + x.isCheck.toString())}');

 otherStatuses.singleWhere((x)=>x.name=='Cancelled').isCheck=false;

  print('after the changes only on otherStatuses');
  print('statuses = ${statuses.toList().map((x) => x.name + '=' + x.isCheck.toString())}');

  print('statuses2 = ${otherStatuses.toList().map((x) => x.name + '=' + x.isCheck.toString())}');

  print('why the original status (cancelled) equal to false?');

}


class Status {
  String name;
  bool isCheck;

  Status({
    this.name,
    this.isCheck,
  });
}

标签: dartflutter

解决方案


要创建新元素列表,请使用map()您已在代码中用于其他目的的函数:

List<Status> otherStatuses = statuses.map((status)=>Status(name:status.name, isCheck:status.isCheck)).toList()

推荐阅读