import 'dart:async'; class Debouncer { final Duration delay; Timer? _timer; Debouncer({required this.delay}); void call(Function action, List positionalArguments, [Map? namedArguments]) { _timer?.cancel(); _timer = Timer(delay, () => Function.apply(action, positionalArguments, namedArguments)); } } Function debounce(F func,{int milliseconds = 600}) { Timer? timer; return ([List? args, Map? namedArgs]) { if (timer != null) { timer!.cancel(); } timer = Timer(Duration(milliseconds: milliseconds), () { Function.apply(func, args ?? [], namedArgs); }); }; }