starwork_flutter/lib/extension/function_extension.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;
});
};
}
}