debounce static method
函数防抖
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);
});
}
};
}