首页 > 解决方案 > 如何使文本适合带有图标的圆形按钮

问题描述

我正在尝试创建一个带有图标(左侧)和右侧文字的简单圆形按钮。

我关注了https://stackoverflow.com/a/63124491/13684332,它建议我们可以将Text内部 a 设置为FittedBoxwith fit:BoxFit.cover。我也试过fit:BoxFit.scaleDownfit:BoxFit.fitWidth。所有这些都会导致一些像素溢出文本小部件。

class RoundedButtonWithIcon extends StatelessWidget {
  RoundedButtonWithIcon(
      {@required this.text,
      @required this.onPress,
      this.icon,
      this.color,
      this.image});
  final String text;
  final Function onPress;
  Icon icon;
  Image image;
  Color color;

  @override
  Widget build(BuildContext context) {
    return SizedBox(
        width: double.infinity,
        child: FlatButton(
          child: Row(children: [
            Container(
                margin: const EdgeInsets.only(right: 3),
                child: image != null ? image : (icon != null ? icon : null)),
            FittedBox(
                fit:BoxFit.cover,
                child:
            Text(
              text,
              style: TextStyle(
                  //fontSize: 13,
                  fontWeight: FontWeight.w400,
                  fontFamily: 'Roboto',
                  color: color != null ? color : Colors.white),
            )
            )]),
          onPressed: () {
            onPress();
          },
          textColor: Colors.white,
          color: Colors.gray,
          shape: RoundedRectangleBorder(
              side: BorderSide(
                  color: Colors.red, width: 1.3),
              borderRadius: BorderRadius.circular(5)),
        ));
  }
}

标签: flutterdart

解决方案


在此处输入图像描述

在此处输入图像描述

class RoundedButtonWithIcon extends StatelessWidget {
  RoundedButtonWithIcon(
      {@required this.text,
      @required this.onPress,
      this.icon,
      this.color,
      this.image});
  final String text;
  final Function onPress;
  final Icon icon;
  final Image image;
  final Color color;

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      child: Row(children: [
        Expanded(
          child: Row(
            children: [
              Container(
                  margin: const EdgeInsets.only(right: 3),
                  child: image != null ? image : (icon != null ? icon : null)),
              Flexible(
                child: FittedBox(
                    alignment: Alignment.centerLeft,
                    fit: BoxFit.scaleDown,
                    child: Text(
                      text,
                      style: TextStyle(
                          fontWeight: FontWeight.w400,
                          fontFamily: 'Roboto',
                          color: color != null ? color : Colors.white),
                    )),
              )
            ],
          ),
        ),
      ]),
      onPressed: () {
        onPress();
      },
      textColor: Colors.white,
      color: Colors.grey,
      shape: RoundedRectangleBorder(
          side: BorderSide(color: Colors.red, width: 1.3),
          borderRadius: BorderRadius.circular(5)),
    );
  }
}

推荐阅读