dart - 如何使用 flutter 在移动应用程序中禁用多点触控

标签 dart flutter multi-touch

本题纯基于GestureDetectorflutter。

例如:在应用程序中,实现了 GestureDetector 类,因此这里默认情况下它支持多点触控,现在需要禁用此多点触控,这样可能是最好的解决方案。

GestureDetector 引用链接:https://docs.flutter.io/flutter/widgets/GestureDetector-class.html

最佳答案

创建 OnlyOnePointerRecognizerWidget 小部件的实例并将任何 Widget 作为子级传递给它。 OnlyOnePointerRecognizerWidget 只会识别一个指针。

import 'package:flutter/material.dart' show
  StatelessWidget, Widget, BuildContext, RawGestureDetector,
  GestureRecognizerFactory, GestureRecognizerFactoryWithHandlers
;
import 'package:flutter/gestures.dart' show
  OneSequenceGestureRecognizer, PointerDownEvent, GestureDisposition,
  PointerEvent
;
    
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
    );
  }
}

实现示例:

OnlyOnePointerRecognizerWidget(
  child: Text('test')
)

关于dart - 如何使用 flutter 在移动应用程序中禁用多点触控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51712287/

相关文章:

flutter - 我想在我的flutter应用程序中通过onPressed方法生成卡。谁能给我看一个路线图…?

dart - 如何在文本中有一个小部件?

android - Flutter:使用 EventChannel 的 PlatformException

dart - 如何在Dart中链接多个ImageElement加载事件

dart - Dart 中的函数字段返回类型

flutter - 继承的小部件和导航器

Android MotionEvent 只检测 ACTION_MOVE

javascript - 什么是跨平台免费/开源框架,可使用 HTML/CSS/JS 创建基于 Touch 的 Web 应用程序/网站?

html - IE11 触摸设备上单指滚动与两指滚动的区别

android - 如何在 Flutter 中让 alertDialog 在几秒钟后自动消失?