Как использовать для l oop в setState, не переходя в бесконечность во Flutter? - PullRequest
0 голосов
/ 03 апреля 2020

Что я пытаюсь сделать

На моем экране есть просмотр списка с несколькими строками (1, 2 ... 100) и тремя столбцами (A, B, C). Я ловлю постукивающую строку и постукивающий столбец и добавляю эту информацию в список (tappedRowButtonIndex). Мой список выглядит как [[1, A], [2, C], ..]. Я написал функцию для этого процесса добавления. Он также проверяет, выбирает ли пользователь разные столбцы в одной строке (сначала 1A, затем 1 C). Если ситуация подобна этой, функция удаляет предыдущий выбор (1А) и добавляет новый (1 C). Код этой функции приведен ниже и работает правильно.

 List listTappedButtons(rowIndex, buttonIndex) {

  if (tappedRowButtonIndex.length == 0) {
    tappedRowButtonIndex.add([rowIndex, buttonIndex]);
    return tappedRowButtonIndex;
  } else {
    for (var i = 0; i < tappedRowButtonIndex.length; i++) {
      if (tappedRowButtonIndex[i][0] == rowIndex) {
        tappedRowButtonIndex.removeAt([i][0]);
      } else {
        tappedRowButtonIndex.add([rowIndex, buttonIndex]);
        print(tappedRowButtonIndex);
      }
    }
    return tappedRowButtonIndex;
  }
}

В чем проблема

Мне нужно вызывать эту функцию в setState, потому что я ее использовал изменить цвета на экране. Когда я вызываю эту функцию в setState, функция for l oop в функции продолжает работать и начинает удалять элементы, добавленные на шаг раньше. Например;

  1. При первом нажатии он добавляется в список (Результат списка: [[1, A]]).
  2. Затем я нажимаю 2B. Сначала мой список становится [[1, A], [2, B]], но для l oop продолжает работать и удаляет 2B из-за моей проверки строки. И результат всегда [[1, A]].

setState часть кода приведена ниже;

      children: <Widget>[
                          AppButton.buildAppButton(
                            context,
                            AppButtonType.BETSELECTION,
                            matchList[index][4],
                            kCategoryButtonDimensions,

                            onPressed: () {
                              tappedRowIndex = index;
                              tappedButtonIndex = 1;
                              setState(() {
                                listTappedButtons(
                                    tappedRowIndex, tappedButtonIndex);
                              });

                              print(tappedRowButtonIndex.toString());
                            },
                          ),

Это должно быть что-то о setState, но я могу не могу понять, как это решить.

...