Dart-如何将迭代器值传递到Dart中的回调中?

时间:2019-04-15 02:14:16

标签: variables dart flutter reference iterator

我有一些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的值?

1 个答案:

答案 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,因此无论如何您都不会试图在循环外创建变量。