在一些計算較為復雜澎媒、操作較為耗時或者發(fā)送請求的操作中,如果事件持續(xù)觸發(fā)扶欣,除了帶來性能上的負擔,還會導致糟糕的用戶體驗
為了按鈕重復點擊后觸發(fā)事件千扶,在調(diào)用事件方法后料祠,給一個延時時間,在該時間范圍內(nèi)如果再次點擊按鈕髓绽,不觸發(fā)事件,延時結(jié)束后妆绞,點擊才可再次響應(yīng)
按鈕封裝
class MyButtons {
static int clickSpaceTime = 2000;//延時2s
static Widget textButton({
Widget child,
VoidCallback onPressed,
Color backgroundColor,
double radius,
//邊界顏色
Color sideColor,
}) {
bool bCanPress = true;
return TextButton(
onPressed: () {
///避免重復響應(yīng)
if(onPressed != null && bCanPress) {
bCanPress = false;
onPressed();
Future.delayed(Duration(milliseconds: clickSpaceTime), (){
bCanPress = true;
});
}
if(!bCanPress) {
print("$child按鈕被重復點擊");
}
},
child: child,
style: ButtonStyle(
padding: MaterialStateProperty.all(EdgeInsets.zero),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(radius ?? 0))),
overlayColor: MaterialStateProperty.all(
(backgroundColor == null || backgroundColor == Colors.white)
? Colors.Black.withOpacity(0.1)
: Colors.white.withOpacity(0.2)),
backgroundColor: MaterialStateProperty.all(
backgroundColor ?? Colors.transparent),
side: sideColor != null
? MaterialStateProperty.all(
BorderSide(color: sideColor, width: 1))
: null));
}
}