stateful widget은 두 가지 부분으로 구성된다.
1.위젯 그 자체
2.위젯의 상태
stateful widget은 위젯 생성시 정의하거나, 혹은 code Action을 통해서 stateless에서 stateful로 전환할 수 있다.
void main() {
runApp(App());
}
class App extends StatefulWidget {
const App({super.key});
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
int counter = 0;
// 아이콘이 클릭되었을 때 실행할 함수 - 반환값 없음 (void)
void onClicked() {
counter = counter + 1;
}
//build 입력 후 엔터를 치면 build 메서드가 자동완성 된다.
// 부모 class에 이미 있는 메소드를 override 한다
Widget build(BuildContext context) {
//Buildcontext는 일단 무시하기
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.teal[800],
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center, // 텍스트를 화면 가운데 정렬
children: [
Text(
'Click Counter',
style: TextStyle(
fontSize: 40,
color: Colors.white,
fontWeight: FontWeight.w500,
),
),
Text(
'$counter',
style: TextStyle(
fontSize: 50,
color: Colors.red[400],
fontWeight: FontWeight.w500,
),
),
IconButton(
onPressed: onClicked,
icon: Icon(
Icons.add_box_rounded,
color: Colors.white,
size: 60,
),
)
],
),
),
),
);
}
}
강의를 가이드로 삼아, statless 위젯 사용법도 익힐 겸 내 입맛대로 카운터 화면을 만들어 보았다.

그런데 이 상태로는 아무리 + 아이콘을 클릭해도 counter 횟수가 올라가지 않는다. 무엇이 문제일까?
void onClicked() {
setState(() {
counter = counter + 1;
});
}
void onClicked() {
counter = counter + 1;
setState(() {});
}

두 경우 모두 + 아이콘을 클릭했을 때 counter 숫자가 정상적으로 증가함을 확인하였다.
IconButton - Flutter 가 제공한다.
onPressed에는 아이콘이 클릭될 때마다 실행될 함수를 할당하고,
icon에는 아이콘을 할당한다.
플러터에서는 Icon 키워드를 통해 기본 제공하는 아이콘에 접근하고, 사용할 수 있다. (리액트 할 때 벡터나 svg 이미지 웹에서 다운로드받아서 사용했던 거 생각하면 진짜 편한 기능인듯. 개발자 친화적이라는 말이 뭔지 알겠다.)