1. Container
- Flutter에서 가장 많이 사용하는 위젯 중 하나
- 대부분 사이즈와 간격 조절을 위한 layoutWidget으로 많이 사용
- width : Container의 너비를 지정
- 픽셀 단위로 지정하거나 부모 위젯에 대한 상대적인 비율을 나타내는데 사용
- height : Container의 높이를 지정
- 너비와 마찬가지로 픽셀 단위 또는 상대적인 비율로 지정
- margin : Container 주위의 여백을 지정
- Container를 다른 위젯으로부터 얼마나 떨어뜨릴지를 결정
- padding : Container 내부의 여백을 지정
- Container의 내부 콘텐츠와 Container의 테두리 사이의 공간 결정
- constraints : Container의 크기를 제약하는 데 사용
- 최소/최대 너비와 높이 지정 → Container가 어떻게 확장 또는 축소될 수 있는지 제어
2. child과 children
- 위젯의 구성 요소를 나타내는 속성
- child
- Container, Text, Image 등 대부분의 단일 자식을 가지는 위젯에 사용
- 해당 위젯의 주요 내용을 정의
- children
- Row, Column, ListView, Stack등 대부분 여러 개의 자식을 가지는 위젯에 사용
- 위젯의 여러 요소, 위젯 리스트로 구성
3. Column
- 자식 위젯들을 세로로 배치시킬 수 있는 LayoutWidget
ㅤ | 인라인 | 블락 | MainAxisAlignment | CrossAxisAlignment |
Colum | 가로 | 세로 | 세로 | 가로 |
4. 기본
-Column의 최상단에 자식 위젯들이 순서대로 그려졌짐
Column( children: [ Container( width: 100, height: 100, color: Colors.red, ), Container( width: 100, height: 100, color: Colors.blue, ), ], );
5. MainAxisAlignment : 세로 정렬
- enum 클래스 - MainAxisAlignment 6개의 타입
Column( // MainAxisAlignment. 입력 mainAxisAlignment: MainAxisAlignment.center, children: [ Container( width: 100, height: 100, color: Colors.red, ), Container( width: 100, height: 100, color: Colors.blue, ), Container( width: 100, height: 100, color: Colors.green, ), ], );
- MainAxisAlignment.start : Column 위젯의 윗부분부터 배치
- MainAxisAlignment.cent : Column 위젯의 가운데에 배치
- MainAxisAlignment.end : Column 위젯의 끝부분에 배치
- MainAxisAlignment.spaceBetween : 자식들의 사이를 일정 간격으로 배치
- MainAxisAlignment.spaceAround
자식들의 사이를 간격의 절반의 사이즈만큼 양쪽 끝 부분에 간격으로 배치
- MainAxisAlignment.spaceEvenly : 양 끝과 자식들의 사이를 일정 간격으로 배치
3. MainAxisSize
- Column의 사이즈를 지정
- min : Column을 자식 위젯들만큼의 사이즈로 최소화
- max : 자식 위젯들과는 상관 없이 가능한한 최대의 사이즈로 변경
- Scroll이 있는 위젯을 사용한다면 에러가 발생
Scroll의 높이 없이 Column의 사이즈를 max로 지정한다면 사이즈가 무한이 되기 때문
@override Widget build(BuildContext context) { return Scaffold( appBar: customAppBar(title: "ColumnScreen"), body: _body(), ); } Widget _body() { return Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisSize: MainAxisSize.min, children: [ Container( width: 100, height: 100, color: Colors.red, ), Container( width: 100, height: 100, color: Colors.blue, ), Container( width: 100, height: 100, color: Colors.green, ), ], ); }
- MainAxisSize.max로 변경한다면 다시 간격이 생긴 형태로 변경
4. CrossAxisAlignment : 가로 축의 위치 설정
SizedBox( width: double.infinity, child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: 100, height: 100, color: Colors.red, ), Container( width: 100, height: 100, color: Colors.blue, ), Container( width: 100, height: 100, color: Colors.green, ), ], ), )
- CrossAxisAlignment.start : 가로 축에서 왼쪽 배치
- CrossAxisAlignment.center : 가로 축에서 가운데 배치
- CrossAxisAlignment.end : 가로 축에서 오른쪽에 위치 배치
- CrossAxisAlignment.strech : 가로 영역을 최대로 확장 배치
5. VerticalDirection
- 위젯의 세로방향 순서를 설정
- VerticalDirection.down : 자식 위젯들을 위에서 아래로 순서대로
- VerticalDirection.up : 자식 위젯들을 아래에서 위로 순서대로
SizedBox( width: double.infinity, child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisSize: MainAxisSize.max, /// textDirection과 textBaseline 특성은 Row 위젯에서만 적용이 가능합니다. /// Row위젯에 대한 포스팅에서 다루겠습니다. // textDirection: , // textBaseline: , /// VerticalDirection.up은 순서를 바꿔서 출력해줍니다. /// 다시 말해서 자식 위젯들을 아래에서 위로 올라가는 순서로 그려준다는 의미입니다. /// 빨간 Container부터 아래에서 위로 그리기 때문에 제일 아래 위치했습니다. /// VerticalDirection.down은 위에서 아래로 그려줍니다. /// 빨간 Container가 제일 위에 위치했습니다. crossAxisAlignment:CrossAxisAlignment.end , verticalDirection: VerticalDirection.down, children: [ Container( width: 100, height: 100, color: Colors.red, ), Container( width: 100, height: 100, color: Colors.blue, ), Container( width: 100, height: 100, color: Colors.green, ), ], ), );
- VerticalDirection.up : 아래에서 위로 순서대로 배치
- VerticalDirection.down : 위에서 아래 순서대로 배치
6. Expanded
- 자식 위젯을 Expanded로 감싸면 감싼 위젯을 최대 영역으로 확장
SizedBox( width: double.infinity, child: Column( children: [ Container( width: 100, height: 100, color: Colors.red, ), Expanded( child: Container( width: 100, height: 100, color: Colors.blue, ), ), Container( width: 100, height: 100, color: Colors.green, ), ], ), )
빨간 박스와 파란박스를 둘다 Expanded로 감싸주면 두개의 위젯 크기가 동
SizedBox( width: double.infinity, child: Column( children: [ Expanded( child: Container( width: 100, height: 100, color: Colors.red, ), ), Expanded( child: Container( width: 100, height: 100, color: Colors.blue, ), ), Container( width: 100, height: 100, color: Colors.green, ), ], ), );
Share article