flutter按钮防止重复点击

参考网上很多版本,结合体验下来不是很好,改造这样效果,可以执行第一次点击,后面点击会被取消拦截;

import 'dart:async';
class CommonUtils{
  static Function debounce(Function fn, [int t = 300]) {
    Timer _debounce;
    return () {
      // 还在时间之内,抛弃上一次
      if (_debounce?.isActive ?? false) {
        _debounce.cancel();
      }else{
        fn();
      }
      _debounce = Timer(Duration(milliseconds: t), () {
        _debounce.cancel();
        _debounce = null;
      });
    };
  }
}

方法使用
各种点击事件

不带参数事件
onTap: CommonUtils.debounce(_showDevices)
带参数事件
onPressed: CommonUtils.debounce((){
         }),

你可能感兴趣的:(flutter按钮防止重复点击)