반응형
컨테이너 위젯
- 레이아웃의 Single-child layout widgets 일종입니다.
- 컨테이너 위젯은 자식(child)가 없는 경우에는 페이지 내에서 가능한 최대한의 공간을 차지합니다.
컨테이너의 색상을 red로 설정했더니 화면 전체가 red가 됨을 볼 수 있습니다.
import 'package:flutter/material.dart';
main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.blue,
body: Container(
color: Colors.red,
)));
}
}
컨네이터 위젯에서 자식(child)를 불러오면 자식 위젯에 맞춰서 컨테이너 위젯이 변경됨을 볼 수 있습니다.
import 'package:flutter/material.dart';
main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.blue,
body: Container(
color: Colors.red,
child: Text(
"Text",
style: TextStyle(color: Colors.blue),
),
)));
}
}
SafeArea를 이용해서 화면 안으로 보여주게 만들어줄 수 있습니다.
import 'package:flutter/material.dart';
main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.blue,
body: SafeArea(
child: Container(
color: Colors.red,
child: Text(
"Text",
style: TextStyle(color: Colors.blue),
),
),
)));
}
}
컨테이너 위젯 width, height, margin, padding과 flutter inspector를 사용할 수 있습니다.
import 'package:flutter/material.dart';
main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.blue,
body: SafeArea(
child: Container(
color: Colors.red,
child: Text(
"Text",
style: TextStyle(color: Colors.blue),
),
width: 100,
height: 100,
// margin: EdgeInsets.all(20),
margin: EdgeInsets.symmetric(
vertical: 80,
horizontal: 20
),
// padding: EdgeInsets.all(20),
padding: EdgeInsets.all(40),
),
)));
}
}
Column과 Row 위젯
flutter 레이아웃 참고하기 좋은 사이트 https://medium.com/flutter-community/flutter-layout-cheat-sheet-5363348d037e
Column과 row는 반대의 성질을 가지기 때문에 Column으로만 작성합니다.
mainAxisAlignment는 세로 정렬, crossAxisAlignment는 가로 정렬을 합니다.
- Column은 세로로 정렬해주는 역할을 하며 세로 축을 모두 사용하고 세로축은 위젯의 크기로 제한이 되는 children을 가지는 위젯입니다.
- Row는 가로로 정렬해주는 역할을 하며 가로 축을 모두 사용하고 가로축은 위젯의 크기로 제한이 되는 children을 가지는 위젯입니다.
- Center 위젯을 사용하면 오직 가로축으로만 정렬이 되며 mainAxisAlignment: MainAxisAlignment.center로 가로축 정렬을 사용할 수 있고 Center와 mainAxisAlignment: MainAxisAlignment.center를 같이 사용해야 정중앙 정렬이 가능합니다.
mainAxisAlignment 는 가로 축 정렬에만 사용되는게 아니라 주축 정렬이라고 봐야합니다.
- 세로축의 모든 공간을 차지 하지 못하도록 하는 기능으로 mainAxisSize: MainAxisSize.min,을 사용할 수 있고mainAxisAlignment 없이 정중앙 정렬을 할 수 있습니다.
- verticalDirection: VerticalDirection.up, 사용하면 밑에서부터 채워줄 수 있습니다.
- mainAxisAlignment: MainAxisAlignment.spaceEvenly을 사용하면 일정한 간격으로 위젯을 배치할 수 있습니다.
- mainAxisAlignment: MainAxisAlignment.spaceBetween을 사용하면 상 중 하로 위젯을 배치할 수 있습니다.
- crossAxisAlignment: CrossAxisAlignment.end를 사용하여 가로축 정렬을 할 수 있습니다.
- width: double.infinity을 이용하여 hight가 없는 위젯을 생성하면 오른쪽으로 다른 위젯들을 정렬할 수 있습니다.
- crossAxisAlignment: CrossAxisAlignment.stretch 가로로 위젯을 가득채우고 싶은 경우에 사용합니다.
- sizedBox는 위젯간의 간격을 두고 싶은 경우에 사용합니다.
import 'package:flutter/material.dart';
main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: MyPage(),
),
);
}
}
class MyPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.teal,
body: SafeArea(
// child: Center(
child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// mainAxisSize: MainAxisSize.min,
// verticalDirection: VerticalDirection.up,
// verticalDirection: VerticalDirection.down,
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// crossAxisAlignment: CrossAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
// width: 100,
height: 100,
color: Colors.white,
child: Text("Container1"),
),
SizedBox(height: 30.0,),
Container(
// width: 100,
height: 100,
color: Colors.red,
child: Text("Container2"),
),
Container(
// width: 100,
height: 100,
color: Colors.blue,
child: Text("Container3"),
),
// Container(
// width: double.infinity,
// ),
],
),
),
// )
);
}
}
반응형
'개발(합니다) > Flutter&android&ios' 카테고리의 다른 글
[flutter-11] Collection과 Generic (0) | 2021.03.03 |
---|---|
[flutter-10] Navigator : MaterialPageroute, initialRoute (0) | 2021.03.02 |
[flutter-08] SnackBar와 Toast message (0) | 2021.02.28 |
[flutter-07] buildContext와 SnackBar (0) | 2021.02.27 |
[flutter-06] AppBar에 메뉴 아이콘 추가와 Drawer 메뉴 만들기 (2) | 2021.02.21 |