Introduce
Container is one of the most commonly used widgets when UI code is in the flutter, so I will introduce its properties that we often use.
The widget container contains a child widget and some other widget properties, you can see the doc details at the link below
https://api.flutter.dev/flutter/widgets/Container-class.html
Now let’s go and see what the container has
Container
The first is to initialize a container.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">runApp</span> <span class="token punctuation">(</span> <span class="token function">App</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">class</span> <span class="token class-name">App</span> <span class="token keyword">extends</span> <span class="token class-name">StatelessWidget</span> <span class="token punctuation">{</span> <span class="token metadata symbol">@override</span> Widget <span class="token function">build</span> <span class="token punctuation">(</span> BuildContext context <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">Center</span> <span class="token punctuation">(</span> child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
width & height
Defines the size of the container
1 2 3 4 5 6 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> width <span class="token punctuation">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> height <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
child
If there are no children, the container will be as large as possible. If there are children, the container will follow its child size.
Container without children
1 2 3 4 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> |
Container with children
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">return</span> <span class="token function">Center</span> <span class="token punctuation">(</span> child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">Text</span> <span class="token punctuation">(</span> <span class="token string">'Hello container'</span> <span class="token punctuation">,</span> textDirection <span class="token punctuation">:</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Another example
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">return</span> <span class="token function">Center</span> <span class="token punctuation">(</span> child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">SizedBox</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> height <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
color
Use the Color class or the Colors class to add a background color to the container.
1 2 3 4 5 6 7 8 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">SizedBox</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> height <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
or
1 2 3 4 5 6 7 8 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Color <span class="token punctuation">.</span> <span class="token function">fromARGB</span> <span class="token punctuation">(</span> <span class="token number">255</span> <span class="token punctuation">,</span> <span class="token number">0</span> <span class="token punctuation">,</span> <span class="token number">0</span> <span class="token punctuation">,</span> <span class="token number">255</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">SizedBox</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> height <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
aligment
Use the aligment property to set the location for the child widget of the container
The classes that can be used as the value of an aligment are:
Aligment uses a coordinate system with the origin (0, 0) being the center of the container AlignmentDirectional uses a coordinate system with the origin (0, 0) being the center of the container, but depends on the writing direction, for example ltr then start at left and right end, rtl then start on right and end on left FractionalOffset uses coordinate system with origin (0, 0) as top left of Aligment container You can create new Aligment with x, y values desired or use available constants.
1 2 3 4 5 6 7 8 9 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">Text</span> <span class="token punctuation">(</span> <span class="token string">'Hello container'</span> <span class="token punctuation">,</span> textDirection <span class="token punctuation">:</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> alignment <span class="token punctuation">:</span> <span class="token function">Alignment</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
or
1 2 3 4 5 6 7 8 9 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">Text</span> <span class="token punctuation">(</span> <span class="token string">'Hello container'</span> <span class="token punctuation">,</span> textDirection <span class="token punctuation">:</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> alignment <span class="token punctuation">:</span> Alignment <span class="token punctuation">.</span> centerLeft <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
Details of the value x, y of Aligment you can see the corresponding figure below
AlignmentDirectional
Similar to aligment we also have 2 ways to create new AlignmentDirectional with desired x, y values or use available constants.
1 2 3 4 5 6 7 8 9 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">Text</span> <span class="token punctuation">(</span> <span class="token string">'Hello container'</span> <span class="token punctuation">,</span> textDirection <span class="token punctuation">:</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> alignment <span class="token punctuation">:</span> <span class="token function">AlignmentDirectional</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
or
1 2 3 4 5 6 7 8 9 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">Text</span> <span class="token punctuation">(</span> <span class="token string">'Hello container'</span> <span class="token punctuation">,</span> textDirection <span class="token punctuation">:</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> alignment <span class="token punctuation">:</span> AlignmentDirectional <span class="token punctuation">.</span> centerStart <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
Details of the x, y values of AlignmentDirectional with TextDirection.ltr and TextDirection.ltr you can see respectively as in the image below
FractionalOffset
Similar to aligment we also have 2 ways: create new FractionalOffset with desired x and y values or use available constants.
1 2 3 4 5 6 7 8 9 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">Text</span> <span class="token punctuation">(</span> <span class="token string">'Hello container'</span> <span class="token punctuation">,</span> textDirection <span class="token punctuation">:</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> alignment <span class="token punctuation">:</span> <span class="token function">FractionalOffset</span> <span class="token punctuation">(</span> <span class="token number">0.5</span> <span class="token punctuation">,</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
or
1 2 3 4 5 6 7 8 9 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">Text</span> <span class="token punctuation">(</span> <span class="token string">'Hello container'</span> <span class="token punctuation">,</span> textDirection <span class="token punctuation">:</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> alignment <span class="token punctuation">:</span> FractionalOffset <span class="token punctuation">.</span> bottomCenter <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
Details of the value x, y of FractionalOffset you can see the corresponding image below
constraints
The constraints attribute defines the size constraint of the container. Usually we will use BoxConstraints.
As we said above, when there are no children, the container will have the largest size possible, but when adding the maxHeight and maxWidth properties, it will be limited.
1 2 3 4 5 6 7 8 9 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> alignment <span class="token punctuation">:</span> AlignmentDirectional <span class="token punctuation">.</span> centerStart <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">)</span> <span class="token punctuation">,</span> constraints <span class="token punctuation">:</span> <span class="token function">BoxConstraints</span> <span class="token punctuation">(</span> maxHeight <span class="token punctuation">:</span> <span class="token number">400</span> <span class="token punctuation">,</span> maxWidth <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
Now creating a child widget, the child will not be able to exceed the size of the container and be cut off
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> child <span class="token punctuation">:</span> <span class="token function">Text</span> <span class="token punctuation">(</span> <span class="token string">'Hello container'</span> <span class="token punctuation">,</span> style <span class="token punctuation">:</span> <span class="token function">TextStyle</span> <span class="token punctuation">(</span> fontSize <span class="token punctuation">:</span> <span class="token number">140</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> textDirection <span class="token punctuation">:</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> alignment <span class="token punctuation">:</span> AlignmentDirectional <span class="token punctuation">.</span> centerStart <span class="token punctuation">.</span> <span class="token function">resolve</span> <span class="token punctuation">(</span> TextDirection <span class="token punctuation">.</span> ltr <span class="token punctuation">)</span> <span class="token punctuation">,</span> constraints <span class="token punctuation">:</span> <span class="token function">BoxConstraints</span> <span class="token punctuation">(</span> maxHeight <span class="token punctuation">:</span> <span class="token number">400</span> <span class="token punctuation">,</span> maxWidth <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
margin & padding
Defines the distance between the container’s boundary with parent equal to margin and with child using padding
There are many ways to define margin and padding with EdgeInsets, so I will give examples of some commonly used cases
1 2 3 4 5 6 7 8 | margin <span class="token punctuation">:</span> EdgeInsets <span class="token punctuation">.</span> <span class="token function">symmetric</span> <span class="token punctuation">(</span> <span class="token comment">// margin theo direction</span> vertical <span class="token punctuation">:</span> <span class="token number">20</span> <span class="token punctuation">,</span> horizontal <span class="token punctuation">:</span> <span class="token number">30</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> margin <span class="token punctuation">:</span> EdgeInsets <span class="token punctuation">.</span> <span class="token function">fromLTRB</span> <span class="token punctuation">(</span> left <span class="token punctuation">,</span> top <span class="token punctuation">,</span> right <span class="token punctuation">,</span> bottom <span class="token punctuation">)</span> <span class="token comment">// margin cả 4 biên với giá trị chỉ định</span> padding <span class="token punctuation">:</span> EdgeInsets <span class="token punctuation">.</span> <span class="token function">all</span> <span class="token punctuation">(</span> <span class="token number">20</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token comment">// padding tất cả các biên</span> padding <span class="token punctuation">:</span> EdgeInsets <span class="token punctuation">.</span> <span class="token function">only</span> <span class="token punctuation">(</span> left <span class="token punctuation">:</span> <span class="token number">20</span> <span class="token punctuation">)</span> <span class="token comment">// padding biên chỉ định</span> |
decoration & foregroundDecoration
Assign some UI properties to the container, the precedence of decoration and child as shown below.
Normally, we will use BoxDecoration here, so I will introduce you some of the properties of BoxDecoration that we will often use.
BoxDecoration
color Use to set the color of the box, use the Color class or the Colors class as the container
1 2 3 4 | decoration <span class="token punctuation">:</span> <span class="token function">BoxDecoration</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> blue <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
image
Use image as the background for the box, the image will be above the color
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> height <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> decoration <span class="token punctuation">:</span> <span class="token function">BoxDecoration</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> blue <span class="token punctuation">,</span> image <span class="token punctuation">:</span> <span class="token function">DecorationImage</span> <span class="token punctuation">(</span> fit <span class="token punctuation">:</span> BoxFit <span class="token punctuation">.</span> fitWidth <span class="token punctuation">,</span> image <span class="token punctuation">:</span> <span class="token function">NetworkImage</span> <span class="token punctuation">(</span> <span class="token string">'https://flutter.io/images/catalog-widget-placeholder.png'</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
border
Set border for the box
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> height <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> decoration <span class="token punctuation">:</span> <span class="token function">BoxDecoration</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> blue <span class="token punctuation">,</span> image <span class="token punctuation">:</span> <span class="token function">DecorationImage</span> <span class="token punctuation">(</span> fit <span class="token punctuation">:</span> BoxFit <span class="token punctuation">.</span> fitWidth <span class="token punctuation">,</span> image <span class="token punctuation">:</span> <span class="token function">NetworkImage</span> <span class="token punctuation">(</span> <span class="token string">'https://flutter.io/images/catalog-widget-placeholder.png'</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> border <span class="token punctuation">:</span> Border <span class="token punctuation">.</span> <span class="token function">all</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">10</span> <span class="token punctuation">,</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
borderRadius
Set radius for the border of the box
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> height <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> decoration <span class="token punctuation">:</span> <span class="token function">BoxDecoration</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> blue <span class="token punctuation">,</span> image <span class="token punctuation">:</span> <span class="token function">DecorationImage</span> <span class="token punctuation">(</span> fit <span class="token punctuation">:</span> BoxFit <span class="token punctuation">.</span> fitWidth <span class="token punctuation">,</span> image <span class="token punctuation">:</span> <span class="token function">NetworkImage</span> <span class="token punctuation">(</span> <span class="token string">'https://flutter.io/images/catalog-widget-placeholder.png'</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> border <span class="token punctuation">:</span> Border <span class="token punctuation">.</span> <span class="token function">all</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">10</span> <span class="token punctuation">,</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> green <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> borderRadius <span class="token punctuation">:</span> BorderRadius <span class="token punctuation">.</span> <span class="token function">all</span> <span class="token punctuation">(</span> Radius <span class="token punctuation">.</span> <span class="token function">circular</span> <span class="token punctuation">(</span> <span class="token number">20</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
shape
Set the shape for the box, and get the value BoxShape.rectangle or BoxShape.circle
boxShadow
Set shadow for the box
gradients
Set the gradient background for the box
backgroundBlendMode
Background dynamic mode affects the decoration, foregroundDecoration, child of that Container
transform
Use this property to transform the container, pass the Matrux class
1 2 3 4 5 6 7 8 9 | child <span class="token punctuation">:</span> <span class="token function">Container</span> <span class="token punctuation">(</span> width <span class="token punctuation">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> height <span class="token punctuation">:</span> <span class="token number">300</span> <span class="token punctuation">,</span> decoration <span class="token punctuation">:</span> <span class="token function">BoxDecoration</span> <span class="token punctuation">(</span> color <span class="token punctuation">:</span> Colors <span class="token punctuation">.</span> blue <span class="token punctuation">,</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> transform <span class="token punctuation">:</span> Matrix4 <span class="token punctuation">.</span> <span class="token function">rotationX</span> <span class="token punctuation">(</span> pi <span class="token operator">/</span> <span class="token number">4</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">)</span> |
Source https://medium.com/flutter-community/flutter-layout-cheat-sheet-5363348d037e
https://medium.com/jlouage/container-de5b0d3ad184
https://viziondary.com/flutter/ui/widgets/layout/multi-child/lam-quen-voi-container/