이번 시간에는 Expanded 위젯을 살펴보겠습니다.
Expanded 위젯은 Row 또는 Column 내부에서 사용되며, **남은 공간을 자동으로 채우는 기능**을 합니다.
이 위젯을 활용하면, UI의 크기를 **동적으로 조정**하면서도 원하는 비율로 배분할 수 있습니다.
1. 기본적인 Expanded 사용
다음 예제는 **Row** 내부에서 Expanded 위젯을 사용하여 화면의 가로 공간을 자동으로 분배하는 방식입니다.
Row(
children: [
Expanded(
child: Container(height: 50, color: Colors.red),
),
Expanded(
child: Container(height: 50, color: Colors.green),
),
Expanded(
child: Container(height: 50, color: Colors.blue),
),
],
)
➡️ **위 코드를 실행하면 세 개의 박스가 같은 크기로 가로 공간을 나눠 가지게 됩니다.**
2. Expanded의 Flex 속성
Flex 속성을 사용하면 각 위젯이 **얼마나 많은 공간을 차지할지 조정할 수 있습니다.**
Row(
children: [
Expanded(
flex: 1,
child: Container(height: 50, color: Colors.red),
),
Expanded(
flex: 2,
child: Container(height: 50, color: Colors.green),
),
Expanded(
flex: 3,
child: Container(height: 50, color: Colors.blue),
),
],
)
➡️ **flex 값의 비율대로 공간이 분배됩니다.**
- 빨간색 박스: 전체의 1/6 차지
- 초록색 박스: 전체의 2/6 차지
- 파란색 박스: 전체의 3/6 차지
3. Column에서 Expanded 사용
Column 내부에서도 동일하게 사용 가능합니다.
Column(
children: [
Expanded(
flex: 1,
child: Container(width: 100, color: Colors.red),
),
Expanded(
flex: 3,
child: Container(width: 100, color: Colors.green),
),
Expanded(
flex: 2,
child: Container(width: 100, color: Colors.blue),
),
],
)
➡️ **위 코드를 실행하면 세 개의 박스가 세로 방향으로 배분됩니다.**
- 빨간색 박스: 1/6
- 초록색 박스: 3/6
- 파란색 박스: 2/6
4. Expanded를 사용할 때 주의할 점
- Expanded는 **Row 또는 Column 내부에서만 사용 가능**합니다.
- Expanded는 **남은 공간을 자동으로 차지**합니다. 특정 크기를 강제할 경우 에러가 발생할 수 있습니다.
- Expanded와 SizedBox를 조합하면 일부 영역만 고정하고 나머지를 자동으로 조정할 수도 있습니다.
Row(
children: [
SizedBox(
width: 100,
child: Container(color: Colors.black),
),
Expanded(
child: Container(color: Colors.blue),
),
],
)
➡️ **왼쪽 컨테이너는 100px 고정, 오른쪽 컨테이너는 나머지 공간을 차지합니다.**
5. 결론
- Expanded를 사용하면 **남은 공간을 자동으로 분배**할 수 있습니다.
- flex 속성을 활용하면 **비율을 조정하여 균형 잡힌 UI**를 만들 수 있습니다.
- Row와 Column에서 **유동적인 레이아웃을 만들 때 필수적인 위젯**입니다.
➡️ **다음 강의에서는 Flexible 위젯을 살펴보겠습니다.**
'스파르타 코딩 클럽 내일배움캠프 6기 > [Flutter 트랙] 앱개발 종합반' 카테고리의 다른 글
[Flutter 트랙] 앱개발 종합반 2-12 - 기능성 위젯 (0) | 2025.03.05 |
---|---|
[Flutter 트랙] 앱개발 종합반 2-11 - Stack & Positioned (0) | 2025.03.05 |
[Flutter 트랙] 앱개발 종합반 2-9 - Row Column (0) | 2025.03.05 |
[Flutter 트랙] 앱개발 종합반 2-8 - Sized Box (0) | 2025.03.04 |
[Flutter 트랙] 앱개발 종합반 2-7 - Container (0) | 2025.03.04 |