2.1 위젯의 개념과 종류
위젯(Widget) : Flutter에서 UI를 구성하는 모든 요소의 가장 기본적인 단위. 각각의 역할을 가진 위젯을 중첩하고 결합하여 원하는 UI를 만들 수 있다.
① StatelessWidget : 상태가 없는 위젯.
로고, 제목 등 정적인 UI를 만들 때 사용한다. 위젯의 속성이 변하지 않는다. 위젯이 생성될 때 build() 메서드가 호출되어 UI를 그리며, 다시 그려지지 않는다.
import 'package:flutter/material.dart';
// StatelessWidget의 예시
class MyStatelessWidget extends StatelessWidget {
final String title; // title은 변하지 않는 값.
const MyStatelessWidget({Key? key, required this.title}) : super(key: key);
@override
Widget build(BuildContext context) {
return Text(
title, // title의 값이 고정되어 있습니다.
style: const TextStyle(fontSize: 24),
);
}
}
② StatefulWidget : 상태가 있는 위젯.
카운터, 체크박스 등 동적인 UI를 만들 때 사용한다. 위젯의 상태가 변경되면 다시 그린다. StatefulWidget은 위젯 자체를 정의하며, State로 위젯의 가변적인 상태를 관리한다. setState() 메서드를 통해 위젯을 다시 빌드한다.
import 'package:flutter/material.dart';
// StatefulWidget의 예시
class MyStatefulWidget extends StatefulWidget {
const MyStatefulWidget({Key? key}) : super(key: key);
@override
State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int count = 0; // count는 변할 수 있는 상태.
void incrementCounter() {
setState(() { // setState()를 호출하여 화면을 다시 그리도록 요청합니다.
count++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('카운트: $count'), // count 값이 변경될 때마다 화면이 업데이트됩니다.
ElevatedButton(
onPressed: incrementCounter,
child: const Text('카운트 증가'),
),
],
);
}
}