Container
This page has not been translated into English yet. The Russian original is below.
Универсальная коробка: размер, внутренний и внешний отступ, заливка или оформление, выравнивание ребёнка и ограничения — в одном элементе. Когда нужно что-то одно (только отступ, только размер), проще взять специализированный элемент: Padding , SizedBox , ColoredBox , DecoratedBox .
Тип:
single-child
Container color:#4f46e5 width:200 height:100
Center
Text "Привет"
Параметры
| Параметр | Тип | Default | Описание |
|---|---|---|---|
width
|
длина | — |
Ширина: число (пиксели) или строка с единицей —
"50%"
,
"100svh"
|
height
|
длина | — | Высота, те же единицы |
color
|
color | — |
Заливка.
Игнорируется, если задан
#decoration
— цвет тогда пишется внутрь декорации
|
alignment
|
string | — |
Куда поставить ребёнка внутри коробки:
center
,
topLeft
,
bottomRight
и т. д.
|
clipBehavior
|
string | none |
Обрезка ребёнка по границам:
none
,
hardEdge
,
antiAlias
,
antiAliasWithSaveLayer
|
Длины: голое число и
px
— пиксели;
vh
/
svh
/
lvh
/
dvh
,
vw
/
svw
/
lvw
/
dvw
,
vmin
/
vmax
— доля окна;
%
— доля места, которое даёт родитель (если родитель по этой оси не ограничен, процента нет). Другие единицы (
rem
,
em
) не поддерживаются.
Вложенные структуры
#padding
и
#margin
Отступ внутри коробки и снаружи неё. Формат тот же, что у
Padding
:
all
,
symmetric
,
only
,
fromLTRB
(значения
fromLTRB
—
позиционные
:
#padding fromLTRB 10 15 20 25
).
#decoration
Оформление: цвет, скругление, рамка, градиент, тень, фоновое изображение. Устроено так же, как у DecoratedBox .
#constraints
Нижние и верхние границы размера:
minWidth
,
maxWidth
,
minHeight
,
maxHeight
(числа или строки с единицей).
Container
#constraints minHeight:120 maxWidth:480
Text "Не уже ширины текста, но не шире 480"
Примеры
Карточка с отступом и скруглением
Container
#padding all 16
#margin symmetric horizontal:24 vertical:8
#decoration color:#1e1b4b
#borderRadius circular 12
Column spacing:4
Text "Заголовок"
Text "Описание карточки"
Ребёнок в углу
Container width:200 height:120 alignment:bottomRight color:#36345E
Text "Внизу справа"
Обрезка по скруглению
Чтобы содержимое не выходило за скруглённые углы, включите обрезку:
Container width:160 height:160 clipBehavior:antiAlias
#decoration color:#585593
#borderRadius circular 24
Image src:"https://example.com/poster.jpg" fit:cover
Различия между приложением и сайтом
-
Пустой
Containerбез размеров. В приложении коробка без ребёнка и безwidth/heightзанимает всё доступное место. На сайте это пустой блок без высоты — его заливки не видно. Всегда задавайте размер или ребёнка. -
clipBehaviorна сайте различает только «обрезать» и «не обрезать»: любое значение, кромеnone, даёт одинаковую обрезку. -
Именованные режимы
#constraints(expand,tight,loose) на сайте не читаются — работает только форма сminWidth/maxWidth/minHeight/maxHeight.
Bad practices
color
вместе с
#decoration
// BAD — color молча отбрасывается: когда есть #decoration, фон берётся только из неё
Container color:#FF0000
#decoration
#borderRadius circular 8
Text "Красный?"
// GOOD — цвет живёт в декорации
Container
#decoration color:#FF0000
#borderRadius circular 8
Text "Красный"
Best practices
-
Берите узкий элемент, когда он покрывает задачу
: только отступ —
Padding, только размер —SizedBox.Containerоправдан, когда нужно сразу несколько свойств. -
Не ставьте
width/heightна тот жеContainer, которому нужно растягиваться вColumn/Row— оберните его в Expanded .
See also
- Padding — только отступы
- SizedBox — только размер
- DecoratedBox — только оформление
- ConstrainedBox — только ограничения размера
- Align — только выравнивание