Dart不了解forEach应该如何工作

Has*_*sen 1 foreach dart flutter

我只是想用来将forEacha中的所有值设置List为false,但我不明白为什么它不起作用。我创建了一个固定长度的填充列表,如下所示:

List<bool> myList = List<bool>.filled(6, false);
Run Code Online (Sandbox Code Playgroud)

然后我将一个值设置为true:

setState(() => myList[3] = true);
Run Code Online (Sandbox Code Playgroud)

然后,我尝试再次将所有值重置为false,但是从print输出中可以看到它不起作用:

setState(() {
  myList.forEach((val) => val = false);
  print(myList);
});
Run Code Online (Sandbox Code Playgroud)

I/flutter (29049): [false, false, false, true, false, false]

die*_*per 5

您可以在forEach此处检查为什么不能更新其中的值的答案:List.forEach无法修改元素?

Dart没有变量引用,所有元素都作为对对象而不是变量的引用传递。(换句话说,Dart像Java和JavaScript一样,纯粹是“共享呼叫”)。

这意味着forEach回调的e参数只是一个普通的局部变量,对其赋值在回调之外无效。迭代器也是如此:它们返回可迭代对象中的值,但此后没有对可迭代对象的引用。

您可以filled使用创建列表所使用的方法来执行所需的操作。

setState(() {
  myList = List<bool>.filled(myList.length, false);
  print(myList);
});

Run Code Online (Sandbox Code Playgroud)