在實際的開發(fā)當中經(jīng)常會遇到按鈕防止瘋狂點擊的需求,這也是測試同學要測試的一個用例,所以就針對性的封裝了一個按鈕Widget在工作中使用,感覺還不錯,特此分享,不喜勿噴.
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
class DelayButton extends StatelessWidget {
/// 按鈕寬度
final double width;
/// 按鈕高度
final double height;
/// 子視圖
final Widget mainWidget;
/// 事件
final VoidCallback onTap;
/// 外形修飾
final BoxDecoration? decoration;
/// 外邊距
final EdgeInsetsGeometry? margin;
/// 內(nèi)邊距
final EdgeInsetsGeometry? padding;
/// 排列方式
final Alignment? alignment;
/// 延時時間 單位秒 默認兩秒
final int? clickSpaceTime;
const DelayButton(
{Key? key,
required this.width,
required this.height,
required this.onTap,
this.decoration,
this.margin,
this.padding,
required this.mainWidget,
this.alignment,
this.clickSpaceTime})
: super(key: key);
@override
Widget build(BuildContext context) {
bool bCanPress = true;
int time = 0;
if (clickSpaceTime == null) {
time = 2000;
} else {
time = (clickSpaceTime ?? 0) * 1000;
}
return InkWell(
highlightColor: Colors.transparent,
splashColor: Colors.transparent,
child: Container(
alignment: alignment,
margin: margin,
padding: padding,
width: width,
height: height,
decoration: decoration,
child: mainWidget,
),
onTap: () {
/// 避免重復響應(yīng)
if (bCanPress) {
bCanPress = false;
onTap();
Future.delayed(Duration(milliseconds: time), () {
bCanPress = true;
});
} else {
if (kDebugMode) {
print('按鈕重復點擊');
}
}
},
);
}
}
代碼已經(jīng)貼上,直接在項目中使用即可.
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者