debounce static method

Function debounce(
  1. Function fn, {
  2. int delay = 300,
  3. bool immediate = false,
})

函数防抖

fn 需要防抖的函数 delay 防抖延迟时间(毫秒) immediate 是否立即执行

防抖函数原理:在事件被触发 delay 毫秒后再执行回调,如果在这 delay 毫秒内又被触发,则重新计时 适用场景: 输入框搜索、窗口调整 resize 等高频触发事件

Implementation

static Function debounce(Function fn, {int delay = 300, bool immediate = false}) {
  Timer? timer;
  return ([List<dynamic> args = const []]) {
    if (timer?.isActive ?? false) timer?.cancel();
    if (immediate) {
      bool callNow = timer == null;
      timer = Timer(Duration(milliseconds: delay), () {
        timer = null;
      });
      if (callNow) Function.apply(fn, args);
    } else {
      timer = Timer(Duration(milliseconds: delay), () {
        Function.apply(fn, args);
      });
    }
  };
}