import 'package:flutter/material.dart'; import 'package:widgets/ext/ex_widget.dart'; import 'utils/dark_theme_util.dart'; import 'package:shared/utils/ext_dart.dart'; // ignore: slash_for_doc_comments /** MyButton( fontSize: 16, textColor: Colors.black, text: "My Button的封装按钮", backgroundColor: ColorConstants.gray, onPressed: () { SmartDialog.compatible.showToast("MyButton的封装按钮"); }, radius: 15, side: BorderSide(color: Colors.black,width: 1.0), ), */ class MyButton extends StatelessWidget { const MyButton({ Key? key, required this.onPressed, //必选,点击回调 this.text = '', this.fontSize = 16, this.textColor, this.disabledTextColor, this.backgroundColor, this.disabledBackgroundColor, this.minHeight = 43.0, //最高高度,默认43 this.minWidth = double.infinity, //最小宽度,默认充满控件 this.padding = const EdgeInsets.symmetric(horizontal: 16.0), //内间距,默认是横向内间距 this.radius = 5.0, //圆角 this.enableOverlay = true, //是否支持水波纹效果,不过这个效果对比InkWell比较克制,推荐开启 this.elevation = 0.0, //是否支持阴影,设置Z轴高度 this.shadowColor = Colors.black, //阴影的颜色 this.side = BorderSide.none, //边框的设置 this.fontWeight, this.type = ClickType.none, this.milliseconds = 500, }) : super(key: key); final String text; final double fontSize; final Color? textColor; final Color? disabledTextColor; final Color? backgroundColor; final Color? disabledBackgroundColor; final double? minHeight; final double? minWidth; final VoidCallback? onPressed; final EdgeInsetsGeometry padding; final double radius; final BorderSide side; final bool enableOverlay; final double elevation; final Color? shadowColor; final FontWeight? fontWeight; final ClickType type; //默认没有点击类型 final int milliseconds; //点击类型的时间戳(毫秒) @override Widget build(BuildContext context) { return TextButton( onPressed: type == ClickType.debounce ? onPressed?.debounce(milliseconds) : type == ClickType.throttle ? onPressed?.throttle(milliseconds) : onPressed, style: ButtonStyle( // 文字颜色 // MaterialStateProperty.all //各种状态都是这个颜色 foregroundColor: MaterialStateProperty.resolveWith( //根据不同的状态展示不同的颜色 (states) { if (states.contains(MaterialState.disabled)) { return DarkThemeUtil.multiColors(disabledTextColor ?? Colors.grey, darkColor: Colors.grey); } return DarkThemeUtil.multiColors(textColor ?? Colors.white, darkColor: Colors.white); }, ), // 背景颜色 backgroundColor: MaterialStateProperty.resolveWith((states) { if (states.contains(MaterialState.disabled)) { return disabledBackgroundColor; } return backgroundColor; }), // 水波纹 overlayColor: MaterialStateProperty.resolveWith((states) { return enableOverlay ? DarkThemeUtil.multiColors(textColor ?? Colors.white)?.withOpacity(0.12) : Colors.transparent; }), // 按钮最小大小 minimumSize: (minWidth == null || minHeight == null) ? null : MaterialStateProperty.all(Size(minWidth!, minHeight!)), padding: MaterialStateProperty.all(padding), shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(radius), ), ), side: MaterialStateProperty.all(side), elevation: MaterialStateProperty.all(elevation), shadowColor: MaterialStateProperty.all(DarkThemeUtil.multiColors(shadowColor ?? Colors.black, darkColor: Colors.white)!), ), child: Text( text, style: TextStyle(fontSize: fontSize, fontWeight: fontWeight ?? FontWeight.w400), )); } }