简体   繁体   中英

How to convert a "FlatButton" to "TextButton" in Flutter?

I got following code:

      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),
      ),

It seems the FlatButtun is now deprecated and I must convert it to TextButton but when I try that, it gives me errors for minWith parameter. When I try to wrap it with ConstrainedBox I get other errors for padding shape, etc.

I don't know how make this old code work as expected before?

As I've commented, you can't just "convert" a FlatButton.icon to a TextButton.icon . The changes in the buttons are breaking changes made to Flutter:

A new set of basic material button widgets and themes have been added to Flutter. The original classes have been deprecated and will eventually be removed. The overall goal is to make buttons more flexible, and easier to configure via constructor parameters or themes.

So, to solve your problem, you'll have to compose your own widgets to get close to FlatButton.icon .

For your example, you can use the Padding widget for padding, and SizedBox for the width. for rounded corners, you can use the style property.

Your button code can look something like this using TextButton.icon :

SizedBox(
        width: double.infinity,
        child: Padding(
          padding: EdgeInsets.symmetric(
            vertical: kDefaultPadding,
            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),
              ),
            ),
          ),
        ))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM