12345678910111213141516171819202122232425262728293031 |
- // 防抖函数上次触发的时间
- Map<String, DateTime> _funcDebounceLastCall = {};
- /// 函数防抖
- /// 用于搜索框之类的频繁触发的方法,防止频繁触发,连续触发部分可能被忽略
- /// [func]: 要执行的方法
- /// [funcTag]: 方法标识符
- /// [milliseconds]: 要迟延的毫秒时间
- Function debounce(Function func, String funcTag, [int milliseconds = 2000]) {
- target() {
- String key = funcTag.toString();
- // 判断是否是第一次调用
- if (_funcDebounceLastCall[key] == null) {
- func.call();
- _funcDebounceLastCall[key] = DateTime.now();
- } else {
- // 判断是否超过了延迟时间
- if (DateTime.now()
- .difference(_funcDebounceLastCall[key]!)
- .inMilliseconds >
- milliseconds) {
- _funcDebounceLastCall[key] = DateTime.now();
- func.call();
- }
- }
- }
- target();
- return target;
- }
|