flutter - How to make a raised button that has a gradient background?

后端 未结 10 1665
野性不改
野性不改 2021-01-31 14:52

Is there a way to change the raised button background color to a gradient? if not, how can I achieve something like this?

相关标签:
10条回答
  • 2021-01-31 15:48

    All the solution above are not really working without some minor artifacts or issues (e.g. missing ripple effect, unwanted borders, not respecting the theme's minWidth for buttons).

    The solution below has none of the above issues (the critical part is to use the Ink widget to retain the ripple capabilities over the gradient):

    RaisedButton(
      onPressed: () { },
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(80.0)),
      padding: const EdgeInsets.all(0.0),
      child: Ink(
        decoration: const BoxDecoration(
          gradient: myGradient,
          borderRadius: BorderRadius.all(Radius.circular(80.0)),
        ),
        child: Container(
          constraints: const BoxConstraints(minWidth: 88.0, minHeight: 36.0), // min sizes for Material buttons
          alignment: Alignment.center,
          child: const Text(
            'OK',
            textAlign: TextAlign.center,
          ),
        ),
      ),
    )
    

    0 讨论(0)
  • 2021-01-31 15:50

    You can create a custom one yourself

    class RaisedGradientButton extends StatelessWidget {
      final Widget child;
      final Gradient gradient;
      final double width;
      final double height;
      final Function onPressed;
    
      const RaisedGradientButton({
        Key key,
        @required this.child,
        this.gradient,
        this.width = double.infinity,
        this.height = 50.0,
        this.onPressed,
      }) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Container(
          width: width,
          height: 50.0,
          decoration: BoxDecoration(gradient: gradient, boxShadow: [
            BoxShadow(
              color: Colors.grey[500],
              offset: Offset(0.0, 1.5),
              blurRadius: 1.5,
            ),
          ]),
          child: Material(
            color: Colors.transparent,
            child: InkWell(
                onTap: onPressed,
                child: Center(
                  child: child,
                )),
          ),
        );
      }
    }
    

    And use it anywhere as follows:

    RaisedGradientButton(
      child: Text(
        'Button',
        style: TextStyle(color: Colors.white),
      ),
      gradient: LinearGradient(
        colors: <Color>[Colors.green, Colors.black],
      ),
      onPressed: (){
        print('button clicked');
      }
    ),
    

    You can further play around with the shadow and rounded borders by editing the Container's decoration property until it matches your spec.

    0 讨论(0)
  • 2021-01-31 15:56

    Flutter RaisedButton Tutorial

    import 'package:flutter/material.dart';
    void main() {
    runApp(MyApp());
    }
    class MyApp extends StatelessWidget {
     @override
     Widget build(BuildContext context) {
     
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Gradient RaisedButton Example'),
        ),
        body: Center(
          child: RaisedButton(
            textColor: Colors.white,
            padding: EdgeInsets.all(0.0),
            shape: StadiumBorder(),
            child: Container(
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(25.0),
                gradient: LinearGradient(
                  colors: <color>[
                    Color(0xFF00b09b),
                    Color(0xFF96c93d),
                  ],
                ),
              ),
              child: Text(
                'ANDROIDRIDE',
                style: TextStyle(fontSize: 15.0),
              ),
              padding: EdgeInsets.symmetric(horizontal: 70.0, vertical: 15.0),
            ),
            onPressed: () {
              print('Gradient RaisedButton clicked');
            },
          ),
        ),
      ),
    );
      }
    }
    
    0 讨论(0)
  • 2021-01-31 15:59

    Refer Below -

    RaisedButton(
         onPressed: () {},
         textColor: Colors.white,
         padding: const EdgeInsets.all(0.0),
         shape:RoundedRectangleBorder(borderRadius: BorderRadius.circular(80.0)),
         child: Container(
           decoration: const BoxDecoration(
             gradient: LinearGradient(
               colors: <Color>[
                 Color(0xFF0D47A1),
                 Color(0xFF1976D2),
                 Color(0xFF42A5F5),
               ],
             ),
             borderRadius: BorderRadius.all(Radius.circular(80.0))
           ),
           padding: const EdgeInsets.fromLTRB(20, 10, 20, 10),
           child: const Text(
               'Gradient Button',
               style: TextStyle(fontSize: 20)
           ),
         ),
       )
    
    0 讨论(0)
提交回复
热议问题