반응형
Row와 Column 위젯 마스터하기를 시작합니다.
- 플러터(Flutter) 시작을 위한 다트(Dart) 강좌는 19강 단위 테스트 강좌를 끝으로 종료가 되었습니다.
- 플러터(Flutter) 프로젝트 시작 전 디자인을 위한 레이아웃 강좌를 지속적으로 연재 중입니다.
Flutter의 Row와 Column 위젯 완벽 가이드
- Flutter 앱 개발에서 레이아웃은 매우 중요한 요소입니다.
- 사용자 인터페이스를 구성하는 데 있어 핵심적인 역할을 하는 두 가지 위젯이 바로 Row와 Column입니다.
- 이번 포스팅에서는 Row와 Column 위젯의 특성과 사용법, 그리고 실제 개발 시 유용한 팁들을 살펴 보도록 하겠습니다.
Row와 Column 위젯의 기본 개념
- Row와 Column 위젯은 Flutter에서 가장 기본적이면서도 강력한 레이아웃 위젯입니다. 이 둘의 주요 차이점은 자식 위젯들을 배치하는 방향에 있습니다.
- Row: 자식 위젯들을 수평 방향으로 배치합니다.
- Column: 자식 위젯들을 수직 방향으로 배치합니다.
- 이 두 위젯은 Linear 레이아웃을 구성하는 데 사용되며, 복잡한 UI를 만드는 데 필수적인 요소입니다.
Row 위젯 깊이 파헤치기
- Row 위젯은 자식 위젯들을 왼쪽에서 오른쪽으로 배치합니다. 기본적인 사용법은 다음과 같습니다:
Row(
children: <Widget>[
Text('첫 번째 항목'),
Text('두 번째 항목'),
Text('세 번째 항목'),
],
)
Row의 주요 속성
- mainAxisAlignment: 주축(가로축)을 따라 자식 위젯들을 어떻게 배치할지 결정합니다.
MainAxisAlignment.start
: 시작 부분에 정렬 (기본값)MainAxisAlignment.center
: 중앙 정렬MainAxisAlignment.end
: 끝 부분에 정렬MainAxisAlignment.spaceBetween
: 첫 번째와 마지막 자식은 양 끝에, 나머지는 균등 분배MainAxisAlignment.spaceAround
: 모든 자식 주변에 균등한 여백 배치MainAxisAlignment.spaceEvenly
: 모든 자식 사이에 균등한 간격 배치
- crossAxisAlignment: 교차축(세로축)을 따라 자식 위젯들을 어떻게 배치할지 결정합니다.
CrossAxisAlignment.start
: 시작 부분에 정렬CrossAxisAlignment.center
: 중앙 정렬 (기본값)CrossAxisAlignment.end
: 끝 부분에 정렬CrossAxisAlignment.stretch
: 교차축을 채우도록 늘림
- mainAxisSize: Row의 주축 크기를 결정합니다.
MainAxisSize.max
: 가능한 최대 크기 (기본값)MainAxisSize.min
: 자식들이 필요로 하는 최소 크기
Column 위젯 자세히 알아보기
- Column 위젯은 자식 위젯들을 위에서 아래로 배치합니다. 기본 사용법은 다음과 같습니다:
Column(
children: <Widget>[
Text('첫 번째 항목'),
Text('두 번째 항목'),
Text('세 번째 항목'),
],
)
Column의 주요 속성
- Column 위젯의 속성들은 Row와 매우 유사하지만, 주축과 교차축의 방향이 바뀝니다.
- mainAxisAlignment: 주축(세로축)을 따라 자식 위젯들을 배치합니다.
- crossAxisAlignment: 교차축(가로축)을 따라 자식 위젯들을 배치합니다.
- mainAxisSize: Column의 주축 크기를 결정합니다.
Row와 Column을 활용한 고급 레이아웃 기법
1. 중첩 사용
- Row와 Column을 중첩하여 사용하면 복잡한 레이아웃을 쉽게 구현할 수 있습니다.
Row(
children: <Widget>[
Column(
children: <Widget>[
Icon(Icons.star),
Text('Rating'),
],
),
Column(
children: <Widget>[
Icon(Icons.description),
Text('Description'),
],
),
],
)
2. Expanded 위젯과 함께 사용
- Expanded 위젯을 사용하면 자식 위젯이 사용 가능한 공간을 모두 차지하도록 할 수 있습니다.
Row(
children: <Widget>[
Expanded(
flex: 2,
child: Container(color: Colors.red),
),
Expanded(
flex: 1,
child: Container(color: Colors.blue),
),
],
)
- 여기서
flex
속성은 각 Expanded 위젯이 차지할 공간의 비율을 정합니다.
3. Flexible 위젯 활용
- Flexible 위젯은 Expanded와 유사하지만, 자식 위젯의 원래 크기를 유지하면서 남은 공간을 분배합니다.
Row(
children: <Widget>[
Flexible(
flex: 2,
child: Container(width: 100, color: Colors.red),
),
Flexible(
flex: 1,
child: Container(width: 100, color: Colors.blue),
),
],
)
Row와 Column 사용 시 주의사항
- 오버플로우 방지: 자식 위젯들의 총 크기가 Row나 Column의 크기를 초과하면 오버플로우가 발생합니다. 이를 방지하기 위해
Expanded
,Flexible
, 또는Wrap
위젯을 사용할 수 있습니다. - 성능 최적화: 너무 많은 자식 위젯을 포함하면 성능 저하가 발생할 수 있습니다. 필요한 경우
ListView
나GridView
를 사용하여 최적화할 수 있습니다. - 반응형 디자인: 다양한 화면 크기에 대응하기 위해
LayoutBuilder
나MediaQuery
를 활용하여 동적으로 레이아웃을 조정할 수 있습니다.
실전 예제: 프로필 카드 만들기
- Row와 Column을 조합하여 간단한 프로필 카드를 만들어 보겠습니다.
Card(
child: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
Row(
children: <Widget>[
CircleAvatar(
backgroundImage: NetworkImage('https://example.com/avatar.jpg'),
radius: 30,
),
SizedBox(width: 16),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('홍길동', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
Text('Flutter 개발자', style: TextStyle(color: Colors.grey)),
],
),
],
),
SizedBox(height: 16),
Text('Flutter를 사용하여 다양한 모바일 앱을 개발하고 있습니다. UI/UX 디자인에 관심이 많으며, 사용자 경험을 개선하는 것을 좋아합니다.'),
SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Column(
children: <Widget>[
Icon(Icons.thumb_up),
Text('1.2k'),
],
),
Column(
children: <Widget>[
Icon(Icons.comment),
Text('384'),
],
),
Column(
children: <Widget>[
Icon(Icons.share),
Text('57'),
],
),
],
),
],
),
),
)
- 이 예제에서는 Row와 Column을 조합하여 프로필 이미지, 이름, 직업, 소개글, 그리고 상호작용 버튼들을 포함하는 복잡한 레이아웃을 구현했습니다.
맺음말
- Flutter의 Row와 Column 위젯은 앱 UI 구성의 기본 요소입니다. 이들을 잘 이해하고 활용하면 복잡한 레이아웃도 쉽게 구현할 수 있습니다. 또한, Expanded, Flexible 등의 보조 위젯들과 함께 사용하면 더욱 유연하고 반응형인 UI를 만들 수 있습니다.
- 개발자로서 Row와 Column의 특성을 충분히 이해하고, 다양한 상황에서 적절히 활용하는 능력을 기르는 것이 중요합니다. 실제 프로젝트에서 다양한 레이아웃을 구현해보며 경험을 쌓아가세요. Flutter의 공식 문서와 커뮤니티 자료들을 참고하면 더 많은 고급 기법들을 배울 수 있을 것입니다.
- 다음 포스팅에서는 Expanded와 Flexible 위젯으로 공간 분배하기 강좌로 돌아오도록 하겠습니다.
반응형
'플러터(Flutter) 레이아웃 강좌' 카테고리의 다른 글
ListView와 GridView로 스크롤 가능한 레이아웃 만들기 (0) | 2024.08.27 |
---|---|
Stack과 Positioned 위젯으로 겹침 레이아웃 구현하기 (0) | 2024.08.26 |
Expanded와 Flexible 위젯으로 공간 분배하기 (0) | 2024.08.18 |
Container 위젯 마스터하기 (0) | 2024.08.14 |
레이아웃 기초 및 위젯 트리 이해하기 (0) | 2024.08.14 |