import 'package:flutter/material.dart';
class UIButton extends StatelessWidget {
final Widget child;
final VoidCallback onPressed;
final Key key;
final VoidCallback onLongPress;
final Clip clipBehavior;
final Color foregroundColor;
final Color backgroundColor;
final Color shadowColor;
final Color overlayColor;
final double elevation;
final EdgeInsetsGeometry padding;
final Size minimumSize;
final BorderSide side;
final bool enableInkEffect;
final BorderRadius borderRadius;
UIButton({
this.key,
@required this.child,
@required this.onPressed,
this.onLongPress,
this.foregroundColor,
this.backgroundColor,
this.clipBehavior,
this.shadowColor,
this.elevation = 0,
this.padding,
this.minimumSize,
this.side,
this.enableInkEffect,
this.overlayColor,
this.borderRadius
});
@override
Widget build(BuildContext context) {
ButtonStyle style = ButtonStyle(
foregroundColor: MaterialStateProperty.all(foregroundColor), //会修改按钮文字颜色,优先级高于textStyle
backgroundColor: MaterialStateProperty.all(backgroundColor),
elevation: MaterialStateProperty.all(elevation), //按钮悬浮效果高度
shadowColor: MaterialStateProperty.all(shadowColor), //按钮悬浮后的阴影颜色,需配合elevation,单独使用无效
padding: MaterialStateProperty.all(padding), //就算不设置也有个默认值, 要想没有边距需要设置为0
// fixedSize: 按钮大小
minimumSize: MaterialStateProperty.all(minimumSize ?? Size(0, 0)), //按钮最小尺寸,设为(0,0)就是child的尺寸
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: borderRadius ?? BorderRadius.circular(8.0),
side: side
),),
// side: MaterialStateProperty.all(side), 使用shape里面的,这个优先级比shape里面的高
// tapTargetSize: MaterialTapTargetSize.padded
enableFeedback: false,
splashFactory: enableInkEffect == false ? NoSplash.splashFactory : null, //禁用按钮水波纹
overlayColor: MaterialStateProperty.all(overlayColor), //触摸后水波纹的颜色,位于child底部,背景色之上
);
return TextButton(
key: key,
onPressed: onPressed,
onLongPress: onLongPress,
clipBehavior: clipBehavior ?? Clip.none,
child: child,
style: style,
);
}
}
|