当修改复制列表中的值时,它会修改原始列表中的值 Flutter
When Modify a Value in the Copied List, It Modify the Value in The Original List Flutter
我想复制列表并且即使在编辑复制列表中的值时也不做任何引用。我尝试了 addAll()
、List.from()
、map()
、toList()
和 [...myList]
,但没有用。
编辑澄清
例如:
class Item{
String description;
int price;
Item(this.description, this.price);
}
List<Item> items = [
Item('item 1', 100),
Item('item 2', 200),
Item('item 3', 300),
];
List<Item> selectedItems = List.from(items);
当我编辑 selectedItems
原始列表时 items
应该不会受到影响,但事实并非如此?!
selectedItems[0].price = 115;
它修改了两者中元素 0 的价格。
Flutter 没有对象的复制函数,你应该手动创建“复制构造函数”。在这里讨论:How can I clone an Object (deep copy) in Dart?
您的示例的解决方案:
void main() {
// Original list
List<Item> items = [
Item('item 1', 100),
Item('item 2', 200),
Item('item 3', 300),
];
// Copied list
List<Item> selectedItems = items.map((it) => Item.copy(it)).toList();
// Change price for item in copied list
selectedItems[0].price = 115;
print("Original list:");
items.forEach((it) => print("Description: ${it.description}, price: ${it.price}"));
print("Copied list:");
selectedItems.forEach((it) => print("Description: ${it.description}, price: ${it.price}"));
}
class Item {
String description;
int price;
Item(this.description, this.price);
// Copied constructor
Item.copy(Item item) : this(item.description, item.price);
}
我想复制列表并且即使在编辑复制列表中的值时也不做任何引用。我尝试了 addAll()
、List.from()
、map()
、toList()
和 [...myList]
,但没有用。
编辑澄清
例如:
class Item{
String description;
int price;
Item(this.description, this.price);
}
List<Item> items = [
Item('item 1', 100),
Item('item 2', 200),
Item('item 3', 300),
];
List<Item> selectedItems = List.from(items);
当我编辑 selectedItems
原始列表时 items
应该不会受到影响,但事实并非如此?!
selectedItems[0].price = 115;
它修改了两者中元素 0 的价格。
Flutter 没有对象的复制函数,你应该手动创建“复制构造函数”。在这里讨论:How can I clone an Object (deep copy) in Dart?
您的示例的解决方案:
void main() {
// Original list
List<Item> items = [
Item('item 1', 100),
Item('item 2', 200),
Item('item 3', 300),
];
// Copied list
List<Item> selectedItems = items.map((it) => Item.copy(it)).toList();
// Change price for item in copied list
selectedItems[0].price = 115;
print("Original list:");
items.forEach((it) => print("Description: ${it.description}, price: ${it.price}"));
print("Copied list:");
selectedItems.forEach((it) => print("Description: ${it.description}, price: ${it.price}"));
}
class Item {
String description;
int price;
Item(this.description, this.price);
// Copied constructor
Item.copy(Item item) : this(item.description, item.price);
}