How to disable multi-touch in mobile application using flutter

后端 未结 3 1113
没有蜡笔的小新
没有蜡笔的小新 2020-12-06 18:41

This question is purely based on GestureDetector flutter.

For Example: In Application, GestureDetector class is implemented so here by-defa

3条回答
  •  孤街浪徒
    2020-12-06 19:07

    Create instance of OnlyOnePointerRecognizerWidget widget and pass any Widget as child to it. OnlyOnePointerRecognizerWidget will recognize only one pointer.

    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: {
            OnlyOnePointerRecognizer: GestureRecognizerFactoryWithHandlers(
              () => OnlyOnePointerRecognizer(),
              (OnlyOnePointerRecognizer instance) {},
            ),
          },
          child: child,
        );
      }
    }
    

提交回复
热议问题