Flutter Container
Flutter Container
The container in Flutter is a parent widget that can contain multiple child
widgets and manage them efficiently through width, height, padding, background
color, etc. It is a widget that combines common painting, positioning, and sizing of the
child widgets. It is also a class to store one or more widgets and position them on the
screen according to our needs. Generally, it is similar to a box for storing contents. It
allows many attributes to the user for decorating its child widgets, such as
using margin, which separates the container with other contents.
A container widget is same as <div> tag in html. If this widget does not contain any
child widget, it will fill the whole area on the screen automatically. Otherwise, it will
wrap the child widget according to the specified height & width. It is to note that this
widget cannot render directly without any parent widget. We can use Scaffold widget,
Center widget, Padding widget, Row widget, or Column widget as its parent widget.
A basic container has a margin, border, and padding properties surrounding its child
widget, as shown in the below image:
Constructors of the container class
The following are the syntax of container class constructor:
1. Container({Key key,
2. AlignmentGeometry alignment,
3. EdgeInsetsGeometry padding,
4. Color color,
5. double width,
6. double height,
7. Decoration decoration,
8. Decoration foregroundDecoration,
9. BoxConstraints constraints,
10. Widget child,
11. Clip clipBehavior: Clip.none
12. });
1. child: This property is used to store the child widget of the container. Suppose we
have taken a Text widget as its child widget that can be shown in the below example:
1. Container(
2. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
3. )
2. color: This property is used to set the background color of the text. It also changes
the background color of the entire container. See the below example:
1. Container(
2. color: Colors.green,
3. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
4. )
3. height and width: This property is used to set the container's height and width
according to our needs. By default, the container always takes the space based on its
child widget. See the below code:
1. Container(
2. width: 200.0,
3. height: 100.0,
4. color: Colors.green,
5. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
6. )
4. margin: This property is used to surround the empty space around the container.
We can observe this by seeing white space around the container. Suppose we have
used the EdgeInsets.all(25) that set the equal margin in all four directions, as shown
in the below example:
1. Container(
2. width: 200.0,
3. height: 100.0,
4. color: Colors.green,
5. margin: EdgeInsets.all(20),
6. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
7. )
5. padding: This property is used to set the distance between the border of the
container (all four directions) and its child widget. We can observe this by seeing the
space between the container and the child widget. Here, we have used an
EdgeInsets.all(35) that set the space between text and all four container directions:
1. Container(
2. width: 200.0,
3. height: 100.0,
4. color: Colors.green,
5. padding: EdgeInsets.all(35),
6. margin: EdgeInsets.all(20),
7. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
8. )
6. alignment: This property is used to set the position of the child within the
container. Flutter allows the user to align its element in various ways such as center,
bottom, bottom center, topLeft, centerRight, left, right, and many more. In the below
example, we are going to align its child into the bottom right position.
1. Container(
2. width: 200.0,
3. height: 100.0,
4. color: Colors.green,
5. padding: EdgeInsets.all(35),
6. margin: EdgeInsets.all(20),
7. alignment: Alignment.bottomRight,
8. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
9. )
7. decoration: This property allows the developer to add decoration on the widget.
It decorates or paint the widget behind the child. If we want to decorate or paint in
front of a child, we need to use the forgroundDecoration parameter. The below
image explains the difference between them where the foregroundDecoration covers
the child and decoration paint behind the child.
1. import 'package:flutter/material.dart';
2.
3. void main() => runApp(MyApp());
4.
5. /// This Widget is the main application widget.
6. class MyApp extends StatelessWidget {
7.
8. @override
9. Widget build(BuildContext context) {
10. return MaterialApp(
11. home: Scaffold(
12. appBar: AppBar(
13. title: Text("Flutter Container Example"),
14. ),
15. body: Container(
16. padding: EdgeInsets.all(35),
17. margin: EdgeInsets.all(20),
18. decoration: BoxDecoration(
19. border: Border.all(color: Colors.black, width: 4),
20. borderRadius: BorderRadius.circular(8),
21. boxShadow: [
22. new BoxShadow(color: Colors.green, offset: new Offset(6.0, 6.0),),
23. ],
24. ),
25. child: Text("Hello! I am in the container widget decoration box!!",
26. style: TextStyle(fontSize: 30)),
27. ),
28. ),
29. );
30. }
31. }
1. Container(
2. width: 200.0,
3. height: 100.0,
4. color: Colors.green,
5. padding: EdgeInsets.all(35),
6. margin: EdgeInsets.all(20),
7. alignment: Alignment.bottomRight,
8. transform: Matrix4.rotationZ(0.1),
9. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
10. )
9. constraints: This property is used when we want to add additional constraints to
the child. It contains various constructors, such as tight, loose, expand, etc. Let's see
how to use these constructors in our app:
tight: If we use size property in this, it will give fixed value to the child.
ADVERTISEMENT
1. Container(
2. color: Colors.green,
3. constraints: BoxConstraints.tight(Size size)
4. : minWidth = size.width, maxWidth = size.width,
5. minHeight = size.height, maxHeight = size.height;
6. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
7. )
expand: Here, we can choose the height, width, or both values to the child.
1. Container(
2. color: Colors.green,
3. constraints: BoxConstraints.expand(height: 60.0),
4. child: Text("Hello! I am in the container widget", style: TextStyle(fontSize: 25)),
5. )
Let us understand it with an example where we will try to cover most of the container
properties. Open the main.dart file and replace it with the below code:
1. import 'package:flutter/material.dart';
2.
3. void main() => runApp(MyApp());
4.
5. /// This Widget is the main application widget.
6. class MyApp extends StatelessWidget {
7.
8. @override
9. Widget build(BuildContext context) {
10. return MaterialApp(
11. home: MyContainerWidget(),
12. );
13. }
14. }
15.
16. class MyContainerWidget extends StatelessWidget {
17. @override
18. Widget build(BuildContext context) {
19. return MaterialApp(
20. home: Scaffold(
21. appBar: AppBar(
22. title: Text("Flutter Container Example"),
23. ),
24. body: Container(
25. width: double.infinity,
26. height: 150.0,
27. color: Colors.green,
28. margin: EdgeInsets.all(25),
29. padding: EdgeInsets.all(35),
30. alignment: Alignment.center,
31. transform: Matrix4.rotationZ(0.1),
32. child: Text("Hello! I am in the container widget!!",
33. style: TextStyle(fontSize: 25)),
34. ),
35. ),
36. );
37. }
38. }
Output