1. 程式人生 > 其它 >flutter中Dart報Concurrent modification during iteration: Instance(length:4) of ‘_GrowableList‘.

flutter中Dart報Concurrent modification during iteration: Instance(length:4) of ‘_GrowableList‘.

技術標籤:FlutterDart

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;
    });