Want to disable multi-touch in mobile application using flutter? Create instance of OnlyOnePointerRecognizerWidget widget and pass any Widget as child to it. OnlyOnePointerRecognizerWidget will recognize only one pointer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import 'package:flutter/material.dart'; import 'package:flutter/gestures.dart'; class OnlyOnePointerRecognizer extends OneSequenceGestureRecognizer { int _p = 0; @override void addPointer(PointerDownEvent event) { startTrackingPointer(event.pointer); if (_p == 0) { resolve(GestureDisposition.rejected); _p = event.pointer; } else { resolve(GestureDisposition.accepted); } } @override String get debugDescription => 'only one pointer recognizer'; @override void didStopTrackingLastPointer(int pointer) {} @override void handleEvent(PointerEvent event) { if (!event.down && event.pointer == _p) { _p = 0; } } } class OnlyOnePointerRecognizerWidget extends StatelessWidget { final Widget child; OnlyOnePointerRecognizerWidget({this.child}); @override Widget build(BuildContext context) { return RawGestureDetector( gestures: <Type, GestureRecognizerFactory>{ OnlyOnePointerRecognizer: GestureRecognizerFactoryWithHandlers<OnlyOnePointerRecognizer>( () => OnlyOnePointerRecognizer(), (OnlyOnePointerRecognizer instance) {}, ), }, child: child, ); } } |
If you like this question & answer and want to contribute, then write your question & answer and email to freewebmentor[@]gmail.com. Your question and answer will appear on FreeWebMentor.com and help other developers.