如何在不创建引用 Dart 的情况下复制对象

How to Copy an Object without Create Reference Dart

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

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

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

考虑到您使用的是地图, 可以用from来实现,参考答案Here

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

您也可以使用 fromJsontoJson 来实现此目的

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

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

轻松做到这一点

假设您有一个项目 class,其属性为 idname。如果您创建如下所示的 copyWith 方法,则可以复制 class 而无需引用它。它将复制 class 并仅修改您作为参数传递的值。在 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}';
}