参考网上很多版本,结合体验下来不是很好,改造这样效果,可以执行第一次点击,后面点击会被取消拦截;
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((){
}),
网友评论