【问题标题】: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

标签: list flutter dart model


【解决方案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
猜你喜欢
  • 2020-02-11
  • 2022-01-22
  • 2021-10-07
  • 2020-11-14
  • 1970-01-01
  • 2020-04-19
  • 2021-04-24
  • 2020-06-13
  • 2019-07-10
相关资源
最近更新 更多