Dart 的 List Call By Value 方法


#Flutter#Dart#List

最近把 List 存到 BLoC 發現在 A 頁面取出後對這 List 操作後,B 頁面也會跟著被改變,是因為 Dart 物件預設是 call by reference。

void main() {
  List<int> aList = [8787];
  List<int> bList = aList;
  
  print('aList: $aList');// aList: [8787]
  print('bList: $bList');// bList: [8787]
  
  bList.add(87);
  
  print('aList: $aList');// aList: [8787, 87]
  print('bList: $bList');// bList: [8787, 87]
}

解決方法


只要在給值的時候使用加上 toList() 即可

void main() {
  List<int> aList = [8787];
- List<int> bList = aList;
+ List<int> bList = aList.toList();
  
  print('aList: $aList');// aList: [8787]
  print('bList: $bList');// bList: [8787]
  
  bList.add(87);
  
  print('aList: $aList');// aList: [8787]
  print('bList: $bList');// bList: [8787, 87]
} 

試一試吧:https://dartpad.dev/?id=26d30bcd783277c83d00041279de673e


參考:
https://stackoverflow.com/questions/58389591/how-to-copy-list-values-to-another-list-in-flutter