原来flutter项目中到处使用了FlatButton,升级到Flutter 3后,FlatButton就不存在了,需要进行替换,一个个换显然很麻烦,所以自己封装了一个。
import 'package:flutter/material.dart';
class FEButton extends StatelessWidget {
FEButton({
this.shape,
this.color,
this.padding = const EdgeInsets.symmetric(vertical: 0, horizontal: 10),
this.focusColor,
this.highlightColor,
this.splashColor,
this.disabledColor,
required this.child,
required this.onPressed,
});
final ShapeBorder? shape;
final Color? color;
final EdgeInsetsGeometry padding;
final Widget child;
final VoidCallback? onPressed;
final Color? focusColor;
final Color? highlightColor;
final Color? splashColor;
final Color? disabledColor;
@override
Widget build(BuildContext context) {
return ButtonTheme(
minWidth: 0,
height: 0,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
highlightColor: highlightColor,
disabledColor: disabledColor,
child: TextButton(
onPressed: onPressed,
child: child,
style: ButtonStyle(
// 边框样式
shape: MaterialStateProperty.all(_convertShape()),
// 内边距
padding: MaterialStateProperty.all(padding),
// 背景颜色
backgroundColor: MaterialStateProperty.all(color),
// 水波纹颜色
overlayColor: MaterialStateProperty.all(splashColor ?? Colors.transparent),
splashFactory: InkRipple.splashFactory,
),
)
);
}
_convertShape() {
if (shape == null) {
return null;
} else {
return shape as OutlinedBorder?;
}
}
}
这里有几个需要非常注意到地方