플렉스 위젯 (Row & Column)
Row와 Column은 자식 위젯들을 수평 또는 수직으로 배열하는 플렉스 위젯입니다. 이들은 Flitter에서 레이아웃을 만드는 데 기본이 되는 위젯입니다.
속성
Row와 Column에서 공통으로 사용되는 속성들:
children
: Widget[] - 자식 위젯들의 목록mainAxisAlignment
: MainAxisAlignment - 주축을 따라 자식들을 배치하는 방법- “start” (기본값)
- “end”
- “center”
- “spaceBetween”
- “spaceAround”
- “spaceEvenly”
crossAxisAlignment
: CrossAxisAlignment - 교차축을 따라 자식들을 배치하는 방법- “start”
- “end”
- “center” (기본값)
- “stretch”
mainAxisSize
: MainAxisSize - 주축에서 차지할 공간의 크기- “min”
- “max” (기본값)
verticalDirection
: VerticalDirection - 자식들이 배치되는 방향- “up”
- “down” (기본값)
clipped
: boolean - 자식들을 컨테이너 경계로 잘라낼지 여부 (기본값: false)
일반적인 사용 사례
-
기본 Row 레이아웃:
Row({ children: [ Container({ width: 50, height: 50, color: "red", }), Container({ width: 50, height: 50, color: "blue", }), ], });
-
중앙 정렬된 Column:
Column({ mainAxisAlignment: "center", crossAxisAlignment: "center", children: [Text({ text: "제목" }), Text({ text: "부제목" })], });
-
간격이 있는 아이템들:
Row({ mainAxisAlignment: "spaceBetween", crossAxisAlignment: "center", children: [Text({ text: "왼쪽" }), Text({ text: "오른쪽" })], });
모범 사례
-
레이아웃 가이드라인:
- 적절한 축 정렬 선택하기
- 교차축 동작 고려하기
- 일관된 간격 사용하기
- 오버플로우가 가능한 경우 clipped를 true로 설정하기
-
성능:
- 깊이 중첩된 플렉스 위젯 피하기
- 유연한 크기 조정을 위해 Expanded 사용 고려하기
- 플렉스 레이아웃의 리빌드 최소화하기
-
반응형 디자인:
- 오버플로우를 적절히 처리하기
- 화면 크기 변화 고려하기
- 적절한 제약 조건 사용하기
일반적인 패턴
-
내비게이션 바:
Row({ mainAxisAlignment: "spaceBetween", crossAxisAlignment: "center", children: [ IconButton({ icon: "menu" }), Text({ text: "제목" }), IconButton({ icon: "settings" }), ], });
-
폼 레이아웃:
Column({ crossAxisAlignment: "stretch", mainAxisSize: "min", children: [ TextField({ label: "사용자 이름" }), TextField({ label: "비밀번호" }), Button({ text: "제출" }), ], });
-
카드 콘텐츠:
Column({ crossAxisAlignment: "start", mainAxisSize: "min", children: [ Image({ src: "image.jpg" }), Text({ text: "제목" }), Text({ text: "설명" }), ], });
팁과 트릭
-
레이아웃 디버깅:
- 임시로 배경색 추가하기
- 정렬 경계 확인하기
- 플렉스 동작 모니터링하기
- 오버플로우 식별을 위해 clipped 속성 사용하기
-
간격 기법:
- 간격을 위해 Container 사용하기
- 간격을 위해 mainAxisAlignment 고려하기
- 일관된 간격 유지하기
-
최적화:
- 가능한 경우 플렉스 위젯 캐싱하기
- const 생성자 사용하기
- 레이아웃 제약 조건 고려하기
- 적절한 mainAxisSize 설정하기