如何将模型列表复制到颤振中的新列表?

Posted

技术标签:

【中文标题】如何将模型列表复制到颤振中的新列表?【英文标题】:how to copy list of models to new list in flutter? 【发布时间】:2022-01-23 08:06:01 【问题描述】:

我遇到了一个问题,我无法通过简单的方法将模型列表复制到新列表。

我想要实现的是:

List<Package> event_packages = [...]; // list with data here
List<Package> packages = List.from(event_packages);

现在的问题是,每当我编辑包中的一些数据时,事件包也会被编辑。我相信是因为它复制了对象引用。

目前的解决方案是:

List<Package> packages = [];
event_packages.forEach((package)  
   packages.add(Package.fromJson(jsonDecode(jsonEncode(package))));
);

但看起来非常笨拙和缓慢。

这样做的正确方法是什么?

【问题讨论】:

如果您想克隆Package 的实例,通过JSON 肯定是一种方法。当然,没有什么可以阻止编写一个不同的命名构造函数(例如Package.from(Package other)),将它需要的任何东西从other复制到this 【参考方案1】:

遗憾的是,我不相信有一种简单的方法可以做你想做的事,我建议创建一个构造函数,将数据从一个包复制到另一个包,但取决于包的具体内容,这可能是不可能的?

class Package 

  Package(this.title='', this.age=0, this.height=0);

  Stirng title;
  int age
  double height;

  // here
  factory Package.fromPackage(Package other) 
    return Package(title: other.title, age: other.age, height: other.height);
  

那么在制作第二个列表时:

List<Package> event_packages = [...]; // list with data here
List<Package> packages = event_packages.map((pckg) => Package.fromPackage(pckg)).toList();

【讨论】:

我正在使用这个工厂 "Package.fromJson(Map item) => _$PackageFromJson(item);"使用 JsonSerializable【参考方案2】:

您可以使用以下代码复制一个新的列表:

List<Package> event_packages = [...]; // list with data here
List<Package> packages = [];
packages.addAll(event_packages);

【讨论】:

它复制对象引用,并且您在包中所做的任何编辑也将应用于 event_packages。 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何将模型列表复制到颤振中的新列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个列表复制到 python 中的另一个列表中?

如何复制节点列表?

如何将可重复使用的多行/多列表从一个 Excel 工作表复制到另一个工作表上的数据库

如何将子列表中的数据解包到一个列表中? [复制]

如何将列表中的元素复制到数组 c/c++

如何在不影响 Flutter 中的原始列表的情况下将列表执行深层复制到另一个列表