flutter中Dart報Concurrent modification during iteration: Instance(length:4) of ‘_GrowableList‘.
阿新 • • 發佈:2020-12-29
Dart中,如果在collection(集合)的迴圈中執行增加或刪除系統就會丟擲這個錯誤。
List list = [1, 2, 3, 4];
list.forEach((value) {
if (value == 2) {
list.remove(value); // 會丟擲標題的錯誤
}
});
其原因在於Dart為了防止多執行緒下,一個執行緒正在遍歷,而另一個執行緒修改了collection的結構。
而當我們的程式碼邏輯包含這個需求時應該怎麼做呢?第一個是用另外一個數組來存放。
List list = [1, 2, 3, 4]; List result = []; list.forEach((value) => { if (value != 2){ result.add(value) } });
第二種,Dart也為我們提供了迴圈並刪除的方法,removeWhere()。(推薦使用這種)
List list = [1, 2, 3, 4];
// 這裡使用了箭頭函式,後面的表示式為true時會刪除當前值
list.removeWhere((element) => element == 2);
// 當然也能用{}
list.removeWhere((element){
return element == 2;
});