flutter中GestureDetector防止连点

1,337 阅读1分钟

widget实现

import 'package:flutter/cupertino.dart';

typedef TapAction = void Function();

// ignore: must_be_immutable
class SingleGestureDetector extends StatelessWidget {
  final Widget child; //子widget
  final TapAction tapAction; //有效点击回调
  final TapAction againAction; //无效点击回调
  final int tapDuration; //防连点时间间隔
  DateTime? lastTapTime; //上次点击时间

  SingleGestureDetector(
      {Key? key,
        required this.child,
        required this.tapAction,
        required this.tapDuration, required this.againAction});

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        if (lastTapTime == null || DateTime.now().difference(lastTapTime!) > Duration(seconds: tapDuration)) {
          lastTapTime = DateTime.now();
          tapAction();
        } else {
          againAction();
        }
      },
      child: child,
    );
  }
}

使用方法

SingleGestureDetector(
  tapAction: () {
    //有效点击事件
  },
  againAction: () {
    //无效点击事件
  },
  tapDuration: 2, //传入的防连点时间间隔
  child: Container(), //传入的子widget
)