如何在不创建引用 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);
您也可以使用 fromJson
和 toJson
来实现此目的
Item1 = Item.fromJson(Item2.toJson());
但是为此您需要手动创建 fromJson
和 toJson
。
您可以通过粘贴 json here
轻松做到这一点
假设您有一个项目 class,其属性为 id
和 name
。如果您创建如下所示的 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}';
}
我想给另一个对象赋值,但是当我修改 name2 时,它同时修改了 name1。
Item item2 = item1;
item2.name = 'a';
我希望每个对象都没有相互链接。
考虑到您使用的是地图,
可以用from
来实现,参考答案Here
Item Item1 = {
'foo': 'bar'
};
Item Item2 = new Item.from(Item1);
您也可以使用 fromJson
和 toJson
来实现此目的
Item1 = Item.fromJson(Item2.toJson());
但是为此您需要手动创建 fromJson
和 toJson
。
您可以通过粘贴 json here
假设您有一个项目 class,其属性为 id
和 name
。如果您创建如下所示的 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}';
}