How do I add a border to a flutter button?
Hi Kathleen and welcome!
You can achieve what you want by diving a little deeper into the widgets that make up MaterialButton
.
First you need the Ink widget. This offers more flexible styling using a BoxDecoration.
Ink
can then contain an InkWell widget which recognises onTap
and draws the splash effect. By default, the splash continues to the edges of the containing box, but you can make it circular by giving InkWell
a really big borderRadius
.
Here's an example of the button you're after:
Material(
type: MaterialType.transparency, //Makes it usable on any background color, thanks @IanSmith
child: Ink(
decoration: BoxDecoration(
border: Border.all(color: Colors.indigoAccent, width: 4.0),
color: Colors.indigo[900],
shape: BoxShape.circle,
),
child: InkWell(
//This keeps the splash effect within the circle
borderRadius: BorderRadius.circular(1000.0), //Something large to ensure a circle
onTap: _messages,
child: Padding(
padding:EdgeInsets.all(20.0),
child: Icon(
Icons.message,
size: 30.0,
color: Colors.white,
),
),
),
)
),
And here's the result:
Can Using FloatingActionButton with Border :
FloatingActionButton(
mini: false,
backgroundColor: Colors.blue.shade900,
splashColor: Colors.black,
onPressed: () {
logOutDialog(context);
},
hoverElevation: 1.5,
shape: StadiumBorder(
side: BorderSide(
color: Colors.blue, width: 4)),
elevation: 1.5,
child: Icon(
Icons.logout,
color: _foregroundColor,
),
)
Just wrap an IconButton
into a Container
and set its decoration
as following:
Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.blue, width: 4),
color: Colors.yellow,
shape: BoxShape.circle,
),
child: IconButton(
iconSize: 56,
icon: Icon(Icons.check),
onPressed: () {},
),
),