我怎样才能实现 "onContinuousPress" 之类的行为?
How can I achieve "onContinuousPress" like behaviour?
假设我的 Flutter 应用中某处有这个按钮:
FloatingActionButton(
backgroundColor: Theme.of(context).primaryColor,
child: Icon(Icons.arrow_upward),
onPressed: _someAction,
);
我希望只要我的手指点击按钮(即如果我连续点击 T 秒 _someAction()
就会执行 _someAction()
应该执行 N 次,
其中 N=(int)(60/T + 1))
我调查了 GestureDetector
但在那里找不到我需要的东西。
我需要这个例如为了 increase/decrease 一些 int
值...
使用 GestureDetector
和 Timer
中的 onTapDown
和 onTapUp
来实现您的目标。
手势检测器
onTapDown: (_) => setState(() {
_timerStart = true;
_restartTimer();
}),
onTapUp: (_) => setState(() => _timerStart = false),
一些动作
void _restartTimer() {
_timer?.cancel();
_timer = Timer(Duration(milliseconds: 100), () {
// _someAction()
if (_timerStart) {
_restartTimer();
}
});
}
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}");
假设我的 Flutter 应用中某处有这个按钮:
FloatingActionButton(
backgroundColor: Theme.of(context).primaryColor,
child: Icon(Icons.arrow_upward),
onPressed: _someAction,
);
我希望只要我的手指点击按钮(即如果我连续点击 T 秒 _someAction()
就会执行 _someAction()
应该执行 N 次,
其中 N=(int)(60/T + 1))
我调查了 GestureDetector
但在那里找不到我需要的东西。
我需要这个例如为了 increase/decrease 一些 int
值...
使用 GestureDetector
和 Timer
中的 onTapDown
和 onTapUp
来实现您的目标。
手势检测器
onTapDown: (_) => setState(() {
_timerStart = true;
_restartTimer();
}),
onTapUp: (_) => setState(() => _timerStart = false),
一些动作
void _restartTimer() {
_timer?.cancel();
_timer = Timer(Duration(milliseconds: 100), () {
// _someAction()
if (_timerStart) {
_restartTimer();
}
});
}
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}");