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

本题纯基于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')
)

https://stackoverflow.com/questions/51712287/

相关文章:

flutter - 具有水平、未填充子项的 PageView

dart - 回复 : create a dropdown button in flutter

dart - 在小部件树中使用 const 会提高性能吗?

dart - Flutter 删除目录文件

dart - Flutter:将盒子阴影添加到透明容器

firebase - 无法为 flutter 构建发布 APK

dart - Flutter Http错误SocketException : OS Error: C

android - 如何从 Flutter App 连接 Ms SQL?

dart - 底部带有滚动页脚的 ListView

android - 如何使用 Flutter 将图像上传到 Firebase