Flutter: How to disable onTap for a while in gesture detector?
Create a bool
flag and define a method:
bool _enabled = true;
void _onTap () {
// Disable GestureDetector's 'onTap' property.
setState(() => _enabled = false);
// Enable it after 1s.
Timer(Duration(seconds: 1), () => setState(() => _enabled = true));
// Rest of your code...
}
Usage:
GestureDetector(
onTap: _enabled ? _onTap: null,
child: Icon(Icons.content_copy),
)
Wrap it in an AbsorbPointer
var shouldAbsorb = true;
AbsorbPointer(
absorbing: shouldAbsorb,
child: GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: Container(
color: Colors.red,
),
),
)
Personally I use two others methods from GestureDetector
:
onTapDown
: When user is pressing your widget.
onTapUp
: When user leave the widget.
onTap
: Is when tap down and tap up follows. If user slide his finger too much Flutter take this like a cancel tap.
onTapCancel
: When user cancel.
bool pressing = false;
GestureDetector(
// when user is pressing
onTapDown: (details) {
setState(() {
pressing = true;
});
},
// when user leaved
onTapUp: (details) {
setState(() {
pressing = false;
});
},
// when user leaved
onTapCancel: () {
setState(() {
pressing = false;
});
}
// the action to do when user tap
onTap: () {
// code...
}
);
Here is the documentation: Flutter GestureDetector Documentation