Flutter--TextButton封装以及属性说明

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,
    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 ?? 0), //按钮悬浮效果高度
      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 ?? BorderSide.none,
      ),),
      // 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,
    );
  }


}

Guess you like

Origin blog.csdn.net/weixin_41735943/article/details/120720740