颤动检测三次点击

BGH*_*BGH 10 flutter

我希望能够在 Flutter 小部件中检测到三次点击(甚至更多),尽管 GestureDetector 仅内置了双击检测。

对我来说检测小部件上的三次点击最简单的方法是什么?

(我想不断点击屏幕的一部分来解锁一些开发者选项)

BGH*_*BGH 13

有点偷懒,实际上这并不难

// init
int lastTap = DateTime.now().millisecondsSinceEpoch;
int consecutiveTaps = 0;

GestureDetector(
        onTap: () {
          int now = DateTime.now().millisecondsSinceEpoch;
          if (now - lastTap < 1000) {
            print("Consecutive tap");
            consecutiveTaps ++;
            print("taps = " + consecutiveTaps.toString());
            if (consecutiveTaps > 4){
              // Do something
            }
          } else {
            consecutiveTaps = 0;
          }
          lastTap = now;
        },
        child: ...
)
Run Code Online (Sandbox Code Playgroud)


小智 6

我尝试了这里提到的方法,但它对我不起作用。无论点击次数如何,GestureDetector onTap 仅调用一次。flutter 中可能发生了一些变化(我在 beta 频道)。但是,我深入研究了flutter的源代码并找到了解决方案(https://api.flutter.dev/flutter/gestures/SerialTapGestureRecognizer-class.html):

import "package:flutter/gestures.dart";
import 'package:flutter/material.dart';

RawGestureDetector(
  gestures: {
    SerialTapGestureRecognizer:
        GestureRecognizerFactoryWithHandlers<SerialTapGestureRecognizer>(
            SerialTapGestureRecognizer.new,
            (SerialTapGestureRecognizer instance) {
      instance.onSerialTapDown = (SerialTapDownDetails details) {
         if (details.count == 3) print('Consecutive tap 3');
      };
    })
  },

  //  child: // your widget,
);

Run Code Online (Sandbox Code Playgroud)