Запуск Flutter GestureDetector не всегда вызывается

#flutter #gesturedetector

#flutter #gesturedetector

Вопрос:

Я использую GestureDetector как:

     GestureDetector(
      onTapDown: (_) => store.startRecording(),
      onTapUp: (_) => store.stopRecording(),
      child: ...
  

Однако я заметил, что onTapUp иногда это не вызывается (например, когда я перетаскиваю палец и отпускаю его после этого).
Какой обратный вызов будет вызываться всегда, когда мой палец отпущен?

Комментарии:

1. пробовал onTapCancel ? в документах говорится: «Указатель, который ранее запускал onTapDown, в конечном итоге не вызовет отвод. Это вызывается после onTapDown и вместо onTapUp и onTap, если жест касания не выиграл.»

2. @pskink спасибо! onTapCancel похоже, что это работает для крайних случаев, мне все еще нужно продолжать onTapUp обрабатывать все ситуации.

Ответ №1:

Благодаря @pskink мое решение выглядит так:

 GestureDetector(
   onTapDown: (_) => store.startRecording(),
   onTapUp: (_) => store.stopRecording(),
   onTapCancel: () => store.stopRecording(),
  

onTapCanncel будет обрабатывать ситуацию, когда пользователь перетаскивает палец и отпускает.

Комментарии:

1. кто-то использует Mac, lol

2. Но таким образом store.stopRecording() сценарий вызывается, даже если пользователь просто проводит пальцем по кнопке, например, даже небольшое движение пальца вызовет это. Вы когда-нибудь сталкивались с этой проблемой или, может быть, нашли лучшее решение?