如何在dart中复制对象而不引用它?



我想做一些非常简单的事情。我需要构建一个AlimentarModel类型的新变量,然后在不修改原始变量的情况下修改它的一个元素。我试着用=号来做,但它仍然和原来的链接在一起。我应该用什么函数呢?

AlimentarModel original = new AlimentarModel();
original.consumo = 3;
original.etiqueta = 'Good';
AlimentarModel newVariable = original;
newVariable.consumo = 4;
print(original.consumo); //It prints 4. I would expect to print 3.

我需要改变什么,以便有newVariable基于原始的,但独立的?

另一个解决方案!

class AlimentarModel {
int? consumo;
String? etiqueta;
AlimentarModel({this.consumo,this.etiqueta});
AlimentarModel copyWith({int? consumo, String? etiqueta}) {
return AlimentarModel(
consumo: consumo ?? this.consumo,
etiqueta: etiqueta ?? this.etiqueta
);
}
}
AlimentarModel original = new AlimentarModel();
original.consumo = 3;
original.etiqueta = 'Good';
AlimentarModel newVariable = original.copyWith(consumo: 4);
print(original.consumo); // prints 3 

你只是在复制引用

为了复制对象,你可能需要这样做

class AlimentarModel {
int? consumo;
String? etiqueta;
AlimentarModel();
AlimentarModel.fromJson(Map<String, dynamic> json) {
consumo = json['consumo'];
etiqueta = json['etiqueta'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['consumo'] = this.consumo;
data['etiqueta'] = this.etiqueta;
return data;
}
}
AlimentarModel x = AlimentarModel();
x.consumo = 3;
x.etiqueta = "good";

AlimentarModel y = AlimentarModel.fromJson(x.toJson()); //copies the object values
y.consumo = 4;
print(x.consumo); //prints 3

最新更新