Как отключить события щелчка для всех детей, кроме одного выбранного дочернего элемента во флаттере? - PullRequest
0 голосов
/ 13 июля 2020

Сценарий: у меня есть дочерние элементы в Listview.builder. Для каждого ребенка есть кнопка, которая вызывает TTS (преобразование текста в речь). Я хотел, чтобы когда любой из дочерних элементов был нажат, все дочерние элементы должны быть в Listview.builder неактивными, пока нажатый дочерний элемент не закончит свой TTS.

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

1 Ответ

1 голос
/ 13 июля 2020

Сохраните bool в State класса, содержащего ListView.builder. Этот bool должен хранить, если один из потомков в настоящее время выполняет свою TTS. Если это true, вы должны установить для всего метода onPressed (или эквивалентного) значения null, чтобы другие касания не запускали действие. Пример:

bool hasBeenClicked = false;

void yourTTSMethod() {
  setState(() {
    hasBeenClicked = true;
  });

  ... //Do normal method body

  setState(() {
    hasBeenClicked = true;
  });
}

//In build method with each `List` item:
GestureDetector(//Just for sample, use whatever click detector you're currently using
  onTap: hasBeenClicked ? null : yourTTSMethod
)
...