Дарт - Как передать значение итератора в обратный вызов в Дарт? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть некоторый код Дартс / Флаттер, который по сути делает это:

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 в этом обратном вызове, но к тому времени, когда он вызывается в методе, он отражает окончательное значение итератора. Как я могу использовать значение curr во время добавления обратного вызова в Dart?

1 Ответ

0 голосов
/ 15 апреля 2019

Я предполагаю, что вы изменили свой код перед публикацией .. как показывает комментарий jamesdlin , ваш код будет работать.Таким образом, чтобы решить вашу исходную проблему, вам просто нужно создать новую переменную для каждой итерации, я предполагаю, что ваш исходный код имел переменную, определенную вне цикла.

, то есть, чтобы показать @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, так что вы все равно не будете создавать свои переменные вне цикла.

...