What is the Flutter BoxDecoration
In Flutter, the BoxDecoration
of a Container
widget specifies the visual appearance of the container. It allows you to decorate the background of the container with a colour, gradient, image, or a combination of these. You can use BoxDecoration
to create a variety of visual effects, such as adding a border, changing the background colour of the container, or applying a gradient to the background.
In simple words, it adds decoration to the Container. It is a Container visual enhancement. In this post, I will try to show what you can do with BoxDecoration.
How to use Flutter BoxDecoration
To use BoxDecoration
in Flutter, you will need to use the decoration
property of the Container
widget. The decoration
property takes a BoxDecoration
object as its value.
Here is an example of how you can use BoxDecoration
to change the background colour of a Container
widget:
Container(
height: 100,
width: 100,
decoration: BoxDecoration(
color: Colors.red,
),
)
This will create a Container
widget with a red background.
You can also use BoxDecoration
to apply a gradient to the background of a Container
widget:
Container(
height: 100,
width: 100,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [Colors.red, Colors.yellow],
),
),
)
This will create a Container
widget with a gradient that goes from red to yellow, starting from the top left corner and ending at the bottom right corner.
You can also use the border
property of BoxDecoration
to add a border to the container:
Container(
height: 100,
width: 100,
decoration: BoxDecoration(
border: Border.all(
color: Colors.black,
width: 3,
),
),
)
This will create a Container
widget with a black border that is 3 pixels wide.
In this example, I used an Icon as a child of the container.
You can read more about Icons in This post: Flutter Basics – How to use Icons in Flutter
Container(
margin: const EdgeInsets.all(20.0),
alignment: Alignment(-0.7, -0.8),
child: Icon(Icons.favorite, size: 100, color: Colors.red,),
decoration: BoxDecoration(
color: Colors.black45
),
)
What is the border-radius in Flutter
In Flutter, the borderRadius
property of the BoxDecoration
class is used to specify the radius of the rounded corners of a container. The borderRadius
property takes a BorderRadius
object as its value.
The BorderRadius
class allows you to specify different radii for each corner of the container, or use the same radius for all corners. For example, you can use the BorderRadius.all
method to set the same radius for all corners:
borderRadius: BorderRadius.all(Radius.circular(10)),
This will set the radius of all corners to 10 pixels.
You can also use the BorderRadius.only
method to specify different radii for each corner:
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(20),
bottomLeft: Radius.circular(30),
bottomRight: Radius.circular(40),
),
This will set the radius of the top left corner to 10 pixels, the top right corner to 20 pixels, the bottom left corner to 30 pixels, and the bottom right corner to 40 pixels.
You can use the borderRadius
property in combination with the color
and gradient
properties of BoxDecoration
to create a variety of visual effects. For example, you can use a gradient and rounded corners to create a button with a glossy effect:
Container(
height: 50,
width: 150,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.red, Colors.orange],
),
borderRadius: BorderRadius.all(Radius.circular(10)),
),
child: Center(
child: Text(
"flutterassets.com",
style: TextStyle(color: Colors.white),
),
),
)
How to add border-radius to the container in Flutter
To add a border radius to a Container
widget in Flutter, you can use the borderRadius
property of the BoxDecoration
class. The borderRadius
property takes a BorderRadius
object that specifies the radius of the corners of the Container
.
Container(
margin: const EdgeInsets.all(20.0),
alignment: Alignment(-0.7, -0.8),
child: Icon(Icons.favorite, size: 100, color: Colors.red,),
decoration: BoxDecoration(
color: Colors.black45,
borderRadius: BorderRadius.all(Radius.circular(40)),
),
),
In this example, the Container
has a border radius of 40 pixels on all corners. The BorderRadius
class has a variety of methods for specifying border-radius, such as only
and vertical
.
You can also specify different radii for each corner of the container using the BorderRadius
class:
Container(
height: 100,
width: 100,
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
bottomLeft: Radius.circular(10),
bottomRight: Radius.circular(80),
),
),
)
This will create a Container
widget with red background and rounded corners with different radii for each corner.
It’s worth mentioning that the BoxDecoration
class is used to specify the visual properties of a Container
, and the borderRadius
property is just one of many properties that can be set.
You can use BorderRadius.only to specify the radius for each corner.
Container(
margin: const EdgeInsets.all(20.0),
alignment: Alignment(-0.7, -0.8),
child: Icon(Icons.favorite, size: 100, color: Colors.red,),
decoration: BoxDecoration(
color: Colors.black45,
borderRadius: BorderRadius.only(
topRight: Radius.circular(10.0),
bottomRight: Radius.circular(120.0),
topLeft: Radius.circular(120.0),
bottomLeft: Radius.circular(10.0)),
),
),
How to do an oval shape in Flutter
To create an oval shape in Flutter, you can use the ClipOval
widget. The ClipOval
widget clips its child widget to an oval shape.
Here is an example of how you can use the ClipOval
widget to create an oval shape:
ClipOval(
child: Container(
width: 200.0,
height: 100.0,
color: Colors.red,
),
)
In this example, the Container
is clipped to an oval shape by the ClipOval
widget. The Container
has a width and height of 100 pixels, so it will be clipped to a circle. If the width and height are different, the oval will be elongated in one direction.
Make an oval shape using Radius.elliptical in Flutter
To create an oval shape using the Radius.elliptical
property in the BoxDecoration
class in Flutter, you can set the borderRadius
property of the BoxDecoration
to a BorderRadius.elliptical
object.
Here is an example of how you can use the Radius.elliptical
property to create an oval shape in a BoxDecoration
:
Container(
margin: const EdgeInsets.all(20.0),
alignment: Alignment(-0.7, -0.8),
child: Icon(Icons.favorite, size: 100, color: Colors.red,),
decoration: BoxDecoration(
color: Colors.blue.shade100,
border: Border.all(
color: Colors.red,
),
borderRadius: new BorderRadius.all(Radius.elliptical(200, 300)),
),
),
In this example, the Container
has an oval border-radius with a horizontal radius of 200 pixels and a vertical radius of 300 pixels. The oval will be elongated in the vertical direction.
Here is another example of how you can create an oval-shaped Container
widget:
Container(
height: 100,
width: 200,
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.all(Radius.elliptical(100, 50)),
),
)
This will create a Container
widget that is 100 pixels tall and 200 pixels wide, with a red background and rounded corners that form an oval shape. The Radius.elliptical
method takes two arguments: the horizontal radius and the vertical radius. In this case, the horizontal radius is set to 100 pixels and the vertical radius is set to 50 pixels, which creates an oval shape.
How to add a border to the container in Flutter
To add a border to a Container
widget in Flutter, you can use the border
property of the BoxDecoration
class. The border
property takes a Border
object that specifies the colour, width, and style of the border.
Here is an example of how you can use the border
property to add a border to a Container
:
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
border: Border.all(color: Colors.red, width: 4.0),
),
child: Text('Hello World'),
),
)
In this example, the Container
has a red border with a width of 4 pixels. The Border
class has a variety of methods for specifying border properties, such as only
and symmetric
.
This example draws the red border with a width = 5.
Container(
margin: const EdgeInsets.all(20.0),
alignment: Alignment(0.7, -0.8),
child: Icon(Icons.favorite, size: 150, color: Colors.red,),
decoration: BoxDecoration(
color: Colors.blue.shade200,
border: Border.all(
color: Colors.red,
width: 5,
),
borderRadius: BorderRadius.only(
topRight: Radius.circular(10.0),
bottomRight: Radius.circular(120.0),
topLeft: Radius.circular(120.0),
bottomLeft: Radius.circular(10.0)),
),
),
What is a box shadow in box decoration in Flutter?
In Flutter, a box shadow is a visual effect that adds a shadow to the background of a box (a widget that has a rectangular area). You can use the boxShadow
property of the BoxDecoration
class to add a box shadow to the background of a widget.
The boxShadow
property takes a list of BoxShadow
objects as its value. Each BoxShadow
object specifies the properties of a single shadow, such as its color, offset, and blur radius.
Here is an example of how you can use boxShadow
to add a shadow to the background of a Container
widget:
Container(
height: 100,
width: 100,
decoration: BoxDecoration(
color: Colors.red,
boxShadow: [
BoxShadow(
color: Colors.black,
offset: Offset(5, 5),
blurRadius: 10,
),
],
),
)
This will create a Container
widget with a red background and a black shadow with an offset of 5 pixels to the right and 5 pixels down, and a blur radius of 10 pixels.
You can add multiple shadows to the same widget by including multiple BoxShadow
objects in the boxShadow
list. In BoxShadow you can control:
- color
- spreadRadius
- blurRadius
- offset
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.7),
spreadRadius: 8,
blurRadius: 10,
offset: Offset(30, 30), // changes position of shadow
),
BoxShadow(
color: Colors.grey.withOpacity(0.7),
spreadRadius: 4,
blurRadius: 5,
offset: Offset(-20, -5), // changes position of shadow
),
],
Container(
height: 100,
width: 100,
decoration: BoxDecoration(
color: Colors.red,
boxShadow: [
BoxShadow(
color: Colors.black,
offset: Offset(5, 5),
blurRadius: 10,
),
BoxShadow(
color: Colors.blue,
offset: Offset(-5, -5),
blurRadius: 10,
),
],
),
)
This will create a Container
widget with a red background and two shadows: a black shadow with an offset of 5 pixels to the right and 5 pixels down, and a blue shadow with an offset of 5 pixels to the left and 5 pixels up.
How to add shadow to the container in Flutter
To add a shadow to a Container
widget using the BoxDecoration
class in Flutter, you can use the boxShadow
property of the BoxDecoration
class. The boxShadow
property takes a list of BoxShadow
objects that specify the colour, blur radius and offset of the shadow.
Here is an example of how you can use the boxShadow
property to add a shadow to a Container
:
Container(
padding: EdgeInsets.all(10),
height: 50,
width: 100,
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.grey,
blurRadius: 4.0,
offset: Offset(4.0, 4.0),
),
],
),
child: Text('Hello World'),
)
In this example, the Container
has a grey box shadow with a blur radius of 4 pixels and an offset of 4 pixels in both the horizontal and vertical directions. The BoxShadow
class has a variety of methods for specifying shadow properties, such as spreadRadius
and color
.
Container(
color: Colors.grey.shade300,
child: Center(
child: Container(
width: 200,
height: 300,
margin: const EdgeInsets.all(20.0),
decoration: BoxDecoration(
color: Colors.grey.shade400,
border: Border.all(
color: Colors.red,
width: 1,
),
borderRadius: BorderRadius.only(
topRight: Radius.circular(10.0),
bottomRight: Radius.circular(80.0),
topLeft: Radius.circular(80.0),
bottomLeft: Radius.circular(10.0)
),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.7),
spreadRadius: 5,
blurRadius: 5,
offset: Offset(25, 15), // changes position of shadow
),
],
),
),
),
),
How to add two / multiple shadows to the container in Flutter
To add multiple shadows to a Container
widget in Flutter, you can use the boxShadow
property of the BoxDecoration
class. The boxShadow
property takes a list of BoxShadow
objects that specify the colour, blur radius and offset of each shadow.
Here is an example of how you can use the boxShadow
property to add two shadows to a Container
:
Container(
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Colors.grey,
blurRadius: 4.0,
offset: Offset(4.0, 4.0),
),
BoxShadow(
color: Colors.black,
blurRadius: 8.0,
offset: Offset(-4.0, -4.0),
),
],
),
child: Text('Hello World'),
)
In this example, the Container
has two shadows: a grey shadow with a blur radius of 4 pixels and an offset of 4 pixels in both the horizontal and vertical directions, and a black shadow with a blur radius of 8 pixels and an offset of -4 pixels in both the horizontal and vertical directions.
Another example
Container(
color: Colors.grey.shade300,
child: Center(
child: Container(
width: 200,
height: 300,
decoration: BoxDecoration(
color: Colors.grey.shade300,
borderRadius: BorderRadius.only(
topRight: Radius.circular(10.0),
bottomRight: Radius.circular(80.0),
topLeft: Radius.circular(80.0),
bottomLeft: Radius.circular(10.0)
),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.7),
spreadRadius: 8,
blurRadius: 10,
offset: Offset(10, 10), // changes position of shadow
),
BoxShadow(
color: Colors.white.withOpacity(0.7),
spreadRadius: 8,
blurRadius: 10,
offset: Offset(-10, -10), // changes position of shadow
),
],
),
),
),
),
How to add an image to the container in Flutter
To add an image to a container in Flutter, you can use the Container
widget’s decoration
property and pass it an BoxDecoration
widget that has an image
property. Here’s an example:
Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
height: 200,
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage('https://picsum.photos/250?image=9'),
fit: BoxFit.cover,
),
),
)
)
Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
height: 200,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/image.png'),
fit: BoxFit.cover,
),
),
)
)
How to add a radius border to the image in Flutter
To add a rounded border to an image in Flutter, you can use the Container
widget’s decoration
property and pass it an BoxDecoration
widget that has a borderRadius
property. Here’s an example:
Container(
color: Colors.grey.shade300,
child: Center(
child: Container(
width: 200,
height: 300,
decoration: BoxDecoration(
color: Colors.grey.shade400,
borderRadius: BorderRadius.all(Radius.circular(30.0),
),
image: DecorationImage(
image: AssetImage(
'assets/FlutterAssets_logo_BG.jpg'),
fit: BoxFit.cover,
)
),
),
),
),
This will display the image with a circular border radius. You can also use the BorderRadius.all
constructor to specify different border radii for each corner of the container. For example:
How to add a border to the Image in Flutter
To add a border to an image in Flutter, you can use the Container
widget’s decoration
property and pass it an BoxDecoration
widget that has a border
property. Here’s an example:
Also, you can read more about images in Flutter in this post: Flutter Basics – How to use an image in Flutter
Container(
color: Colors.grey.shade300,
child: Center(
child: Container(
width: 200,
height: 300,
decoration: BoxDecoration(
color: Colors.grey.shade400,
borderRadius: BorderRadius.all(Radius.circular(30.0),
),
image: DecorationImage(
image: AssetImage(
'assets/FlutterAssets_logo_BG.jpg'),
fit: BoxFit.cover,
),
border: Border.all(
color: Colors.black,
width: 2,
),
),
),
),
),
How to add a shadow to the image in Flutter
To add a shadow to an image in Flutter, you can use the Container
widget’s decoration
property and pass it an BoxDecoration
widget that has a boxShadow
property. Here’s an example:
Container(
color: Colors.grey.shade300,
child: Center(
child: Container(
width: 200,
height: 300,
decoration: BoxDecoration(
color: Colors.grey.shade400,
borderRadius: BorderRadius.all(Radius.circular(30.0),
),
image: DecorationImage(
image: AssetImage(
'assets/FlutterAssets_logo_BG.jpg'),
fit: BoxFit.cover,
),
border: Border.all(
color: Colors.black,
width: 2,
),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 8,
blurRadius: 10,
offset: Offset(30, 30), // changes position of shadow
),
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 4,
blurRadius: 5,
offset: Offset(-20, -5), // changes position of shadow
),
],
),
),
),
),