debounce function

void Function() debounce(
  1. Function func, {
  2. int delay = 500,
  3. bool immediate = true,
})

防抖,1000内再次触发不执行 @param immediate 是否立即执行

Implementation

void Function() debounce(
  Function func, {
  int delay = 500,
  bool immediate = true,
}) {
  Timer? timer;
  bool enable = true;
  return () {
    if (timer?.isActive ?? false) {
      timer?.cancel();
    }
    if (enable) {
      enable = false;
      if (immediate) {
        func.call();
      }
    }
    if (immediate) {
      timer = Timer(Duration(milliseconds: delay), () {
        enable = true;
      });
    } else {
      timer = Timer(Duration(milliseconds: delay), () {
        func.call();
        enable = true;
      });
    }
  };
}