我有一些Dart / Flutter代码,基本上是这样做的:
for(int i = 0; i < dataArray.length; i++){
int curr = i;
table.add(
new DataRow(
...
onSelectChanged: (bool selected){
DataRow toSwap = table[curr];
/*This is how I "get" a row to select it,
as there is no getter for the "checked" property*/
...
}
)
);
}
我需要在此回调中使用curr
变量,但是,在方法中调用它时,它反映了迭代器的最终值。在Dart中添加回调时如何使用curr
的值?
答案 0 :(得分:0)
我假设您在发布代码之前对其进行了修改。如jamesdlin comment所示,您的代码可以使用。因此,要解决您的原始问题,只需为每次迭代创建一个新变量,我假设您的原始代码在循环外部定义了该变量。
即,由@jamesdlin example展示:
// working as expected
for (int i = 0; i < 10; i += 1) {
final int current = i;
functionList.add(() => print('$i $current')); // 0 0, 1 1, 2 2, ...
}
// current will be updated
int current;
for (int i = 0; i < 10; i += 1) {
current = i;
functionList.add(() => print('$i $current')); // 0 9, 1 9, 2 9, ...
}
总之:可变状态是邪恶的;-)拥抱final
,因此无论如何您都不会试图在循环外创建变量。