【问题标题】:How to Copy an Object without Create Reference Dart如何在不创建引用 Dart 的情况下复制对象
【发布时间】:2021-12-20 12:28:30
【问题描述】:

我想给另一个对象的值,但是当我修改 name2 时它同时修改了 name1。

Item item2 = item1;
item2.name = 'a';

我希望每个对象都不相互链接。

【问题讨论】:

  • 可以包含模型类吗?
  • 认为它是具有任何属性的任何类,当您更改属性值而不更改父类属性值时,当您将类与新类相等时,它就会成为它

标签: flutter dart object reference


【解决方案1】:

考虑到您正在使用地图, 你可以使用from来实现这个,参考答案Here

Item Item1 = {
    'foo': 'bar'
};
Item Item2 = new Item.from(Item1);

你也可以使用fromJsontoJson来实现这个

Item1 = Item.fromJson(Item2.toJson());

但为此您需要手动创建fromJsontoJson。 您可以通过粘贴 json here

轻松做到这一点

【讨论】:

  • 这不是 Json。并且对象没有“来自”属性?
【解决方案2】:

假设您有一个具有属性idname 的项目类。如果您创建一个如下所示的copyWith 方法,您可以复制一个类而不引用它。它将复制该类并仅修改您作为参数传递的值。在Dart Pad 中试用。

void main() {
  final Item item1 = Item(id: 1, name: 'Item 1');
  final Item item2 = item1.copyWith(name: 'Item 2');
  print(item1); // Item{id: 1, name: Item 1}
  print(item2); // Item{id: 1, name: Item 2}
  print(item1); // Item{id: 1, name: Item 1}
}

class Item {
  const Item({
    required this.id,
    required this.name,
  });
  final int id;
  final String name;

  Item copyWith({int? id, String? name}) => Item(
        id: id ?? this.id,
        name: name ?? this.name,
      );
  
  @override
  String toString()=> 'Item{id: $id, name: $name}';
}

【讨论】:

  • 非常感谢,我之前一直在尝试绝望。但是 dart 是否有任何功能或属性或方法使其自身不被引用?
  • 我不这么认为
  • 好的,谢谢:)
猜你喜欢
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
相关资源
最近更新 更多