如何在Flutter中将“FlatButton”转换为“TextButton”?

n1bvdmb6  于 2022-12-30  发布在  Flutter
关注(0)|答案(1)|浏览(196)

我得到了以下代码:

FlatButton.icon(
        minWidth: double.infinity,
        padding: EdgeInsets.symmetric(
          vertical: kDefaultPadding,
        ),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(10),
        ),
        color: kPrimaryColor,
        onPressed: () {},
        icon: WebsafeSvg.asset("assets/Icons/Edit.svg", width: 16),
        label: Text(
          "New message",
          style: TextStyle(color: Colors.white),
        ),
      ).addNeumorphism(
        topShadowColor: Colors.white,
        bottomShadowColor: Color(0xFF234395).withOpacity(0.2),
      ),

看起来FlatButtun已经过时了,我必须将其转换为TextButton,但是当我尝试转换时,minWith参数出现错误。当我尝试将其与ConstrainedBox打包时,padding形状出现其他错误,等等。
我不知道如何使这个旧代码的工作如预期之前?

eit6fx6z

eit6fx6z1#

正如我之前所说的,你不能只是把FlatButton.icon“转换”成TextButton.icon,按钮的变化是breaking changes对Flutter所做的:
Flutter增加了一组新的基本材质按钮部件和主题。原来的类已经过时,最终将被删除。总体目标是使按钮更灵活,更容易通过构造函数参数或主题进行配置。
因此,要解决您的问题,您必须编写自己的小部件来接近FlatButton.icon
对于您的示例,可以使用Padding小部件填充,使用SizedBox填充宽度。对于圆角,可以使用style属性。
使用TextButton.icon时,按钮代码可能如下所示:

SizedBox(
      width: double.infinity,
      child: Padding(
        padding: EdgeInsets.symmetric(
          vertical: 10,
        ),
        child: TextButton.icon(
          //rounded corners
          style: ButtonStyle(
            shape: MaterialStateProperty.all<RoundedRectangleBorder>(
              RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(18.0),
              ),
            ),
          ),

          onPressed: () {},
          icon: WebsafeSvg.asset("assets/Icons/Edit.svg", width: 16),
          label: Text(
            "New message",
            style: TextStyle(color: Colors.white),
          ),
        ),
      ),
    )

相关问题