防双击

实现

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 {
/// [key]用于区分不同点击事件
/// [interval]为防双击的时间间隔,单位毫秒
Function() debounce([int key = 0, int interval = 500]) {
return DoubleClickFilter.debounce(this, key, interval);
}
}

使用方法

1
2
3
4
5
6
ElevatedButton(
onPressed: () {
print('500毫秒内点击不会触发第二次');
}.debounce(),
child: const Text('防双击按钮'),
);