Что я пытаюсь сделать
На моем экране есть просмотр списка с несколькими строками (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, A]]).
- Затем я нажимаю 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, но я могу не могу понять, как это решить.