Cuando se modifica un valor en la lista copiada, se modifica también en la lista original Flutter.
Quiero copiar una lista y hacer una referencia independiente incluso cuando edite el valor en la lista copiada. Intenté addAll()
, List.from()
, map()
, toList()
y [...myList]
pero no fueron útiles.
Edit de Clarificación
Por ejemplo:
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);
Cuando edito selectedItems
, la lista original items
no debería ser afectada, ¿pero no es así?
selectedItems[0].price = 115;
Esto modifica el precio del elemento 0 en ambas listas.
davy.ai
Para copiar una lista y no hacer referencia a ella incluso al editar valores en la lista copiada, es necesario realizar una copia profunda de la lista original. Esto implica crear un nuevo objeto de lista y copiar cada elemento de la lista original de forma individual. Una forma de hacerlo es creando un constructor de copia en la clase de los elementos de la lista, como se muestra en el ejemplo a continuación:
En el ejemplo anterior, creamos un constructor de copia en la clase
Item
que crea una nueva instancia deItem
con los mismos valores que otra instancia deItem
. Luego utilizamos la funciónmap()
para aplicar el constructorItem.copy()
a cada elemento de la listaitems
, y lo convertimos a una lista utilizando la funcióntoList()
. Esto crea un nuevo objeto de lista con nuevos objetosItem
que tienen los mismos valores que la listaitems
, pero no son referencias a los mismos objetos.Ahora, cuando modificamos la lista
copiedItems
, la listaitems
permanece sin cambios, como se desea.