Widget은 플러터에서 가장 중요한 개념으로, Flutter는 위젯(Widget)으로 구성되어 있음
레이아웃 : Row, Column, Scaffold, Stack
구조 : Button, Toast, MenuDrawer
스타일 : TextStyle, Color, Padding
애니메이션 : FadeInPhoto, Transform
위치 & 정렬 : Center, Padding
💡 플러터 위젯의 특징
1. Widget들은 tree 구조로 정리될 수 있음
2. 한 Widget내에 얼마든지 다른 widget들이 포함될 수 있음
3. Widget은 부모 위젯과 자식 위젯으로 구성
4. Parent widget을 widget container라고 부르기도 함

import 'package:flutter/material.dart';
//1. 해당 패키지를 임포트 해야만, flutter sdk에서 제공하는 모든 기본 위젯과 material design 테마요소들을 사용할 수 있음
void main() { //2. 앱의 시작점
runApp(const MyApp()); //runApp함수는 반드시 Widget을 argument로 받아야함
}
//3.MyApp 위젯은 최초로 앱의 Layout을 빌드하는 역할,
즉 뼈대를 만드는 역할을 하므로 StatelessWidget 상속
class MyApp extends StatelessWidget {
const MyApp({super.key});
//4. 모든 custom 위젯은 또다른 Widget을 return하는 build 함수를 가지고 있음
Widget build(BuildContext context) {
//5. MaterialApp은 기능을 가진 위젯, Flutter가 제공하는 기본 위젯을 여기서 사용 가능, 실질적으로 모든 위젯을 감싸고 있음
return MaterialApp(
title: 'Flutter Demo', //5-1.앱의 이름 지정
theme: ThemeData( //5-2. 앱의 기본적인 테마를 지정하는 곳
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
//ThemeData
home: const MyHomePage(title: 'Flutter Demo Home Page'),
// 5-3. home은 앱이 정상적으로 실행되었을 때 제일 먼저 보여주는 경로
);//MaterialApp
}
}
//MyHomePage custom 위젯
class MyHomePage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold( //빈 위젯 제공
appBar: AppBar( //argument를 통해 AppBar 위젯 불러옴
title: Text('first app'), //AppBar에 나타날 text
),
body: Center( //모든 요소를 화면 정중앙에 위치하기 위함
child: Column( //위젯 내 모든 요소를 세로로 배치
children: <Widget>[ //괄호 안에 세로로 정렬할 위젯들을 나열
const Text(
'Hello',
),
Text(
'Hello',
),
],
),
),
);
}
}
💡 클래스 명과 함수 명
- 함수 : main(), runApp()과 같은 소문자로 시작
- 클래스 : MyApp()과 같이 대문자로 시작