내용 보기
작성자
관리자 (IP : 172.17.0.1)
날짜
2021-12-20 12:14
제목
[Flutter] Flexible과 Expanded 위젯
Row 혹은 Column 일 이용하다보면 사용하게될
어떤 위젯이 Column이나 Row안에 포함되어있을때는 그래서 Flexible을 이용할때는 FlexFit.tight을 자주 사용하게 될겁니다. 강제적으로 사용할수 있는 만큼의 공간을 다 차지하게 하는겁니다.
파란색 Container 위젯이 늘어난것을 볼수 있죠
먼저 빨강 색에게 공간을 할당하고
Row는 child의 flex값을 모두 더한뒤에 나눠주는겁니다. 파랑색은 여전히 전과 같이 남겨진 부분의 2/3을 가져간만큼 차지하고 있어요.
로 인해 각 child주변의 공간으로 동등하게 나눠졌습니다. (지금 하얀색으로 비어있는 부분!)
파랑색은 이제 남겨진 부분의 2/4을 가져간만큼 차지하고 있어요 간단하게 말해서 Flexible인데 fit이 FlexFit.tight로 고정된 위젯입니다.| |
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Container(
height: 100,
child: Text('Item 1 - pretty big!'),
color: Colors.red,
),
Container(
height: 100,
child: Text('이번에 여기에 엄청나게 긴 글이 있으면 어떻게될까요?'),
color: Colors.blue,
),
Container(
height: 100,
child: Text('Item 3'),
color: Colors.orange,
),
],
); |
그러면 Text가 너무 길어서 이렇게 에러가 뜨겠죠
이때 파랑과 주황을 Expanded로 감싸주면
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Container(
height: 100,
child: Text('Item 1 - pretty big!'),
color: Colors.red,
),
Expanded(
child: Container(
height: 100,
child: Text('이번에 여기에 엄청나게 긴 글이 있으면 어떻게될까요?'),
color: Colors.blue,
),
),
Expanded(
child: Container(
height: 100,
child: Text('Item 3'),
color: Colors.orange,
),
),
],
); |
그리고
Flexible로 감싸주면
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Container(
height: 100,
child: Text('Item 1 - pretty big!'),
color: Colors.red,
),
Flexible(
child: Container(
height: 100,
child: Text('이번에 여기에 엄청나게 긴 글이 있으면 어떻게될까요?'),
color: Colors.blue,
),
),
Flexible(
child: Container(
height: 100,
child: Text('Item 3'),
color: Colors.orange,
),
),
],
);
} |
ps.
마지막으로 위 상황에서
텍스트를 한줄에 딱 맞게 하고 싶으면
Container위젯을 FittedBox
위젯으로 감싸주면됩니다.
출처1
https://mike123789-dev.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0Flexible%EA%B3%BC-Expanded-%EC%9C%84%EC%A0%AF
출처2