- copia superficial: puntero de copia
- Copia profunda: copiar un nuevo objeto
El problema con la copia superficial : operar una matriz y otra matriz también cambia
Lista lista = ['1', '2', '3', '4', '5'];
Lista copiaLista = lista;
copiaLista[0] = 'abc';
print(lista);///Imprimir: [ abc,2,3,4,5]
imprimir(copiarLista);///imprimir: [abc,2,3,4,5]
1. La solución al problema anterior: use deep copy list.from()
Lista lista = ['1', '2', '3', '4', '5'];
Lista copyList = List.from(list);
copiarLista[0] = 'abc';
print(list);///打印: [1,2,3,4,5]
print(copyList);///打印: [abc,2,3,4,5]
pista:
- Solo los tipos como int String se almacenan en la Lista, que se pueden usar para
List.from
regenerar una nueva Lista- Si el almacenamiento en Lista es Mapa o Modelo, use
List.from也会出现问题,
2. El objeto HomeModel se almacena en la Lista, debe llamar al mapa transversal y luego llamar al método toList() para hacer una copia profunda
copyList = list
.map((e) => HomeModel.fromJson(e.toJson()))
.toList();
3. Cuando el objeto Mapa se almacena en la Lista para recorrer cada objeto, se debe llamar al método Map.from(item) para hacer una copia profunda
Lista lista = [{'etiqueta': '1'}, {'etiqueta': '2'}];
Lista copyList = copyWithList(lista);
copiarLista[0]['etiqueta'] = 'abc';
print(list);///打印:[{tag: 1}, {tag: 2}]
print(copyList);///打印:[{tag: abc}, {tag: 2}]
el código se muestra a continuación:
List copyWithList(List list) {
List copyList = [];
for (var item in list) {
if (item is Map) {
copyList.add(Map.from(item));
} else if (item is List) {
copyList.add(copyWithList(item));
} else {
copyList.add(item);
}
}
return copyList;
}