如何实现类似行为的“ onContinuousPress”?

时间:2019-05-20 11:27:56

标签: button flutter gesture

假设我在Flutter应用中的某个位置有此按钮:

FloatingActionButton(
 backgroundColor: Theme.of(context).primaryColor,
 child: Icon(Icons.arrow_upward),
 onPressed: _someAction,
);

我希望只要手指在按钮上点击即可执行_someAction()(即如果我连续T秒钟点击_someAction() 应该执行 N次

其中N=(int)(60/T + 1))

我调查了GestureDetector 但在那里找不到我需要的东西。 例如,我需要此值以增加/减少一些int值...

2 个答案:

答案 0 :(得分:0)

使用onTapDownonTapUp中的GestureDetectorTimer来实现您的目标。

GestureDetector

onTapDown: (_) => setState(() {
    _timerStart = true;
    _restartTimer();
}),
onTapUp: (_) => setState(() => _timerStart = false),

某些操作

void _restartTimer() {
  _timer?.cancel();
  _timer = Timer(Duration(milliseconds: 100), () {
    // _someAction()
    if (_timerStart) {
        _restartTimer();
    }
  });
}

答案 1 :(得分:0)

int _value = 0;
Timer _timer;

Widget build(BuildContext context) {
  return GestureDetector(
    onTapDown: (details) => _startTimer(true),
    onTapUp: (details) => _startTimer(false),
    child: FlutterLogo(size: 200),
  );
}

void _startTimer(bool start) {
  if (!start) {
    _timer.cancel();
    return;
  }
  // you can adjust the timings here
  _timer = Timer.periodic(Duration(milliseconds: 1), (_) => _myMethod());
}

// this method will be getting called as long as you hold
void _myMethod() => print("value = ${++_value}");