Flutter 防止按钮重复点击

9 min read

使用时间差方案,实现防重复点击

class ThrottleUtil {
  static const Duration _KDelay = Duration(milliseconds: 500);
  var enable = true;

  ///防止重复点击
  ///func 要执行的方法
  Function throttle(
    Function func, {
    Duration delay = _KDelay,
  }) {
    return () {
      if (enable) {
        func();
        enable = false;
        Future.delayed(delay, () {
          enable = true;
        });
      }
    };
  }
}

使用方式:

//声明局部变量
ThrottleUtil throttleUtil = ThrottleUtil();

//点击事件
onPressed: throttleUtil.throttle(() {
          setState(() {
            _counter++;
          });
}

缺点:每个防重复点击的事件都需要持有各自的 throttleUtil 对象,throttleUtil 使用时间差进行判断重复点击,暂不支持混用。