当前位置: 首页 > 工具软件 > FlatButton > 使用案例 >

FlatButton替换成TextButton

阎阎宝
2023-12-01

原来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?;
    }
  }
}

这里有几个需要非常注意到地方

  • padding, 默认垂直边距是8,导致汉字显示不全,我们必须将其设置为0,EdgeInsets.symmetric(vertical: 0, horizontal: 10)
  • 水波纹颜色, 我开始设置成Color(0x80FFFFFF)死活不生效,改成相近的Color(0xFFa5a5a5)或者Colors.grey就生效了,难道是透明度?这里我没弄清楚,哪位知道的也麻烦告诉我一下
 类似资料: