listEquals или содержат не работают для 2d List в Flutter - PullRequest
0 голосов
/ 05 апреля 2020

Что я пытаюсь сделать Я создаю список, включая строку и столбец, которые пользователь нажимает в ListView. Затем я воспользуюсь этим списком для запоминания выбора пользователя и изменения цвета выборов через setState.

Что уже сделано

Мой код функции списка как ниже, и это работает отлично. Добавляет когда пользователь нажимает, удаляет когда пользователь untap et c.

List listTappedButtons(rowIndex, buttonIndex) {
  int isExist = 0;
  int rowExist = 0;

  for (int j = 0; j < tappedRowButtonIndex.length; j++) {
    //if the element is exist in the list or not
    if (tappedRowButtonIndex[j][0] == rowIndex &&
        tappedRowButtonIndex[j][1] == buttonIndex) isExist++;
    //if the row is selected before or not
    if (tappedRowButtonIndex[j][0] == rowIndex &&
        tappedRowButtonIndex[j][1] != buttonIndex) rowExist++;
  }

  if (isExist == 0 && rowExist == 0) {
    tappedRowButtonIndex.add([rowIndex, buttonIndex]);
  } else if (isExist != 0 && rowExist == 0) {
    for (var i = 0; i < tappedRowButtonIndex.length; i++) {
      if (tappedRowButtonIndex[i][0] == rowIndex &&
          tappedRowButtonIndex[i][1] == buttonIndex)
        tappedRowButtonIndex.removeAt(i);
    }
  } else {
    for (var i = 0; i < tappedRowButtonIndex.length; i++) {
      if (tappedRowButtonIndex[i][0] == rowIndex) {
        tappedRowButtonIndex.removeAt(i);
        tappedRowButtonIndex.add([rowIndex, buttonIndex]);
      }
    }
  }
  print('list: ' + tappedRowButtonIndex.toString());
  return tappedRowButtonIndex;
}

Проблема в том, что когда я вызываю его в setState, мне нужно проверить, выбран ли элемент, который генерирует builderItem, раньше или нет, а затем изменить цвет. Вот соответствующая часть кода. Я пробовал содержит и listEquals, но оба они не работали. Есть идеи как это решить?

AppButton.buildAppButton(
                            context,
                            AppButtonType.BETSELECTION,
                            matchList[index][5],
                            kCategoryButtonDimensions,
                            color:
                                listEquals(tappedRowButtonIndex, [index, 2])
                                    ? Colors.yellow
                                    : Colors.white,
                            onPressed: () {
                              tappedRowIndex = index;
                              tappedButtonIndex = 2;

                              setState(() {
                                listTappedButtons(
                                    tappedRowIndex, tappedButtonIndex);
                              });
                            },
                          ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...