throttle function

dynamic throttle(
  1. VoidCallback fn, {
  2. Duration time = const Duration(milliseconds: 500),
  3. VoidCallback? onLocked,
  4. VoidCallback? onUnlocked,
  5. VoidCallback? onIgnored,
})

节流,先触发 fn 方法然后计时,time时间 内,不再触发 fn 方法

Implementation

throttle(
  VoidCallback fn, {
  Duration time = const Duration(milliseconds: 500),
  VoidCallback? onLocked,
  VoidCallback? onUnlocked,
  VoidCallback? onIgnored,
}) {
  if (_timer?.isActive ?? false) {
    onIgnored?.call();
    return;
  } else {
    fn();

    onLocked?.call();
    _timer = Timer(time, () {
      _timer!.cancel();
      _timer = null;
      onUnlocked?.call();
    });
  }
}