Flutter 로 UI를 작성함에 있어, 지난 글에서 material이라던가 각종 레이아웃을 미리 설정하고 그 규격에 맞게 움직인다는 점에서 ios보다는 안드로이드 진영과 좀더 비슷한 것 같다는 말을 한 적이 있었는데 오늘은 그 말을 조금 정정해야할지도 모르겠다. 내가 사용한 건 swiftUI라서 스토리보드 방식과는 다른 편리함이 있었는데 그것은 거의 모든 UI작성에서 딱 세 종류의 레이아웃(?)을 기본으로 작업하게 된다는 점이었다.
SwiftUI의 Stack들
- VStack (세로로 쌓기)
- HStack (가로로 쌓기)
- ZStack (입체로 쌓기)
전체적으로 '쌓아나가는' UI 작성 기법을 사용함으로 전에없이 간결하고 편리한 기분을 느꼈었는데,
이와 비슷하게 Flutter 에서도 가로로, 세로로, 입체로 쌓아나가는 형식의 레이아웃이 존재했다.
(물론 안드로이드에도 리니어 레이아웃이 존재하지만 편의성 측면에서 swiftui나 flutter가 훨씬 좋은 것 같다)
Flutter의 Stack 방식 레이아웃
- Column (세로로 쌓기)
- Row (가로로 쌓기)
- Stack (입체로 쌓기)
SwiftUI 때와 똑같이 괄호만 열고 사용하면 되는 문법적 간결함이 있긴 하지만 대신 정렬 방식은 반드시 선택해줘야하는데,
이 때문에 정렬에 대한 공부가 반드시 필요했다.
각 정렬 방식에 대한 자세한 내용은 코드팩토리님의 강의를 참고해보자.
Flutter의 정렬
- MainAxisAlignment : 시작 위치와 사이 간격 등을 정한다 (start, end, center, spaceBetween, spaceEvenly, spaceAround)
- CrossAxisAlignment : 반대축 정렬 (현재 소속된 레이아웃과 반대의 축에서 정렬한다. 예를들면 Row일 경우 세로 정렬)
(start, end, center, stretch)
- MainAxisSize : 주축의 크기 (min, max)
- Expanded 위젯과 Flexible 위젯 : Column과 Row에서만 사용 가능
1) Expanded : 남은 사이즈를 모두 차지
2) Flexible : 비율 지정. Expanded 혹은 Flexible 내부의 파라미터 flex 로 조정 가능
* 화면의 전체 사이즈 구하는 방법 : MediaQuesry.of(context).size + .width / .height