您可以在此处List.forEach unable to modify element?
中查看为什么无法更新
forEach
中的值的答案。
Dart没有变量引用,所有元素都作为对对象而不是变量的引用传递。 (换句话说,Dart像Java和JavaScript一样纯粹是“按需共享”)。
这意味着forEach回调的e参数只是一个普通的局部变量,对其赋值在回调之外没有任何作用。迭代器也是如此:它们返回可迭代对象中的值,但此后没有对可迭代对象的引用。
您可以像创建列表一样使用filled
方法执行所需的操作。
setState(() {
myList = List<bool>.filled(myList.length,false);
print(myList);
});
,
forEach
元素无法修改列表中的实际元素。假设此代码:
var list = [false,true,false,false];
list.forEach((item) {
item = false;
});
print("List: $list");
输出仍然是:
List: [false,false]
所以您可以使用索引的for
:
for (int i=0; i < list.length; i++) {
list[i] = false;
}
或将其映射并重新分配:
var list = [true,false];
list = list.map((item) {
return false;
}).toList();
您将获得:
List: [false,false]
,
如上所述,forEach
函数不会为您提供对列表的写访问权,它只是为您提供了值。更改forEach
回调函数的参数对该函数调用无效,仅更改局部变量即可。
要更改列表,必须直接将其存储到其元素插槽中。要么:
for (int i = 0; i < list.length; i++) list[i] = false;
或
list.fillRange(0,list.length,false);
应该做这项工作。
本文链接:https://www.f2er.com/3126505.html