플러터 Expanded Widget, Flexible Widget
Expanded Widget
주어진 공간을 자식에게 강제로 채우게 만들어요. 즉, 사용 가능한 모든 공간을 차지하도록 확장합니다.
`Flexible` 위젯의 `fit` 속성이 `FlexFit.tight`로 설정된 것과 동일한 역할을 합니다
여러 개의 Expanded 위젯이 있을 경우, flex 값을 기반으로 비율을 조정할 수 있어요.
flex 기본값은 1이며, 비율을 조절할 수 있습니다.
Row(
children: [
Expanded(
child: Container(
color: Colors.lightBlue,
height: 50,
width: 50,
),
),
Container(
color: Colors.pinkAccent,
height: 50,
width: 50,
),
Container(
color: Colors.amber,
height: 50,
width: 50,
),
Container(
color: Colors.green,
height: 50,
width: 50,
),
],
),
Flexible Widget
자식 위젯이 가용 공간을 차지하되, 필요할 경우 줄어들 수 있도록 허용합니다.
`fit` 속성을 이용하여 `FlexFit.tight` 또는 `FlexFit.loose`를 설정할 수 있습니다.
- FlexFit.tight → Expanded와 동일 (최대한 확장)
- FlexFit.loose → 가용 공간을 차지할 수 있지만, 반드시 확장되지 않음
Expanded와 달리, 남은 공간을 모두 차지하지 않을 수도 있음.
fit: FlexFit.loose 설정 시, 자식 위젯이 크기를 조정할 수 있도록 허용.
flex 속성으로 비율 조절 가능 (flex: 1 기본값).
Row(
children: [
Flexible(
// fit: FlexFit.tight,
// fit: FlexFit.loose,
child: Container(
color: Colors.blueAccent,
height: 50,
width: 50,
),
),
Container(
color: Colors.pinkAccent,
height: 50,
width: 50,
),
Container(
color: Colors.amber,
height: 50,
width: 50,
),
Container(
color: Colors.green,
height: 50,
width: 50,
),
],
),
각 결과
Expanded vs Flexible
Expanded | Flexible | |
부모 위젯 | Row, Column, Flex | Row, Column, Flex |
기본 fit 값 | FlexFit.tight | FlexFit.loose |
공간 차지 방식 | 가능한 최대 공간 차지 | 필요에 따라 공간 차지 가능 |
flex 적용 | ✅ 지원 | ✅ 지원 |
정리
- Expanded → 최대한의 공간을 차지 (남은 공간을 전부 사용)
- Flexible → 필요한 만큼만 공간 차지 (줄어들 수도 있음)
- Flexible(fit: FlexFit.tight) = Expanded와 동일
- flex 속성을 사용하면 여러 위젯의 크기 비율을 조정 가능
✅ 언제 사용할까?
남은 공간을 모두 차지해야 할 때 | Expanded |
남은 공간을 유연하게 조절하고 싶을 때 | Flexible |