如何将模型列表复制到颤振中的新列表?
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您可以使用以下代码复制一个新的列表:
List<Package> event_packages = [...]; // list with data here
List<Package> packages = [];
packages.addAll(event_packages);
【讨论】:
它复制对象引用,并且您在包中所做的任何编辑也将应用于 event_packages。 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于如何将模型列表复制到颤振中的新列表?的主要内容,如果未能解决你的问题,请参考以下文章