29 lines
695 B
Dart
29 lines
695 B
Dart
|
|
import 'dart:async';
|
||
|
|
import 'dart:ui';
|
||
|
|
|
||
|
|
// 防抖:只执行最后一次
|
||
|
|
extension DebounceExtension on VoidCallback {
|
||
|
|
VoidCallback debounce([Duration? duration]) {
|
||
|
|
Timer? timer;
|
||
|
|
return () {
|
||
|
|
timer?.cancel();
|
||
|
|
timer = Timer(duration ?? const Duration(milliseconds: 200), this);
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 节流:固定时间只执行一次
|
||
|
|
extension ThrottleExtension on VoidCallback {
|
||
|
|
VoidCallback throttle([Duration? duration]) {
|
||
|
|
bool isThrottled = false;
|
||
|
|
return () {
|
||
|
|
if (isThrottled) return;
|
||
|
|
this(); // 执行原函数
|
||
|
|
isThrottled = true;
|
||
|
|
Timer(duration ?? const Duration(seconds: 1000), () {
|
||
|
|
isThrottled = false;
|
||
|
|
});
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|