1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class DoubleClickFilter { static int lastClickTime = 0; static int lastKey = 0;
static Function() debounce(Function fn, [int key = 0, int interval = 500]) { return () { if (key != lastKey) { lastClickTime = 0; lastKey = key; } int currTime = DateTime.now().millisecondsSinceEpoch; if (currTime - lastClickTime > interval) { lastClickTime = currTime; fn(); } }; } }
extension FunctionExtension on Function { Function() debounce([int key = 0, int interval = 500]) { return DoubleClickFilter.debounce(this, key, interval); } }
|