❮
[Flutter] 3. Flutter UI - Hot Reload, Basic widgets
20190906
hot reload와 위젯들(Container, Row, Column, SafeArea) 간단 정리
코드를 수정했을 때 전체 프로젝트를 다시 빌드하지 않고도 실행중인 Dart VM에 소스코드를 넣어서 위젯 트리를 업데이트 합니다.
Hot Reload와 Hot Restart는 다릅니다. 일반적으로, Hot Reload는 위젯 트리에서 루트 위젯 아래에 있는 build() 메소드 안에 있는 코드에만 변화가 있다고 예상합니다. 즉, Hot Reload는 main() 메소드를 다시 실행해서 위젯트리를 다시 만드는 게 아니라, 만들어진 위젯 트리에서 빌드 메소드만 재실행합니다. main()을 재실행하려면 Hot Restart를 이용해야 합니다.
#
이전 글에서 MaterialApp을 runApp() 메소드에 바로 전달했는데 이렇게 하면 Hot Reload가 안됩니다. build() 메소드를 포함한 StatelessWidget 같은 위젯을 이용해야 합니다.
Layout
가질 수 있는 child의 개수에 따라서 single, multi로 나뉩니다.
Single child
Container
매우 자주 사용하게 될 위젯
width, height 속성
안드로이드의 wrap-content 처럼 따라 height, width를 지정하지 않으면 child의 크기에 맞춰줍니다.
match_parent 처럼 사용하려면 height, width에 double.infinity로 지정하면 됩니다.
padding, margin 속성
EdgeInset 클래스를 사용합니다.
Multi child
child 프로퍼티 대신 children 을 사용합니다.
Column (mainAxis : 세로)
하나의 세로 열을 만들어 줍니다.
Column(W, W, W)로 하면 세로로 3개의 위젯이 만들어짐 (W는 Widget)
Row (mainAxis : 가로)
하나의 가로 행을 만들어줍니다.
Row(W, W, W)로 하면 가로로 3개의 위젯이 만들어짐
mainAxisAlignment, crossAxisAlignment 속성
Column과 Row의 차이는 주 축이 세로인가 가로인가 입니다. 자세한 속성은
이 글 을 참조하세요.
SafeArea 위젯
OS에서 기본으로 제공된 영역에 방해받지 않도록 적절한 패딩을 집어넣습니다.
SafeArea가 적용 안된 모습
SafeArea가 적용된 모습
iOS의 notch 영역만큼 추가 패딩이 들어가 있다.
class myApp extends StatelessWidget {
@override
Widget build (BuildContext context) {
return (MaterialApp (
home: Scaffold (
backgroundColor: Colors.teal ,
body: SafeArea (
child: Container (
child: Text (
'Hello, Container !',
textDirection: TextDirection.ltr ,
),
padding: EdgeInsets.all (20. 0 ),
height: double .infinity ,
),
),
),
));
}
}
참고
https://flutter.dev/docs/development/tools/hot-reload
https://medium.com/flutter-community/flutter-layout-cheat-sheet-5363348d037e