250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- dart
- Widget
- ToDoRim
- Extentsion
- protocol
- pubspec.yaml
- UIAccessibility
- GIT
- flutter
- keyWindow
- OSLog
- designPattern
- pubspec
- tip
- Leetcode
- it
- Equatable
- basic
- algorithm
- github
- COMMIT
- listview
- SwiftGen
- toyproject
- reetcode
- enumerations
- IOS
- swiftlint
- xcode
- Swift
Archives
- Today
- Total
수니의 개발새발
[Flutter] StatelessWidget vs StatefulWidget 본문
728x90
반응형
📌 이번 글은
Flutter Widget을 만들 때 상속받는 StatelessWidget과 StatefulWidget의 차이점 정리입니다.
먼저 두 위젯은 Scaffold를 이용해 동일한 방식으로 화면을 구성합니다.
StatelessWidget (SLW)
- 단 한번만 build 하여, 화면을 한 번만 그린다.
- 정적 화면 구현시에 사용하면 성능상 좋다.
👩🏻💻 예제
class SLWPage extends StatelessWidget {
int _count = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text('StatefulWidget Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"$_count",
style: const TextStyle(fontSize: 30),
),
ElevatedButton(
onPressed: () {
_count++;
print('onPressed : $_count');
},
child: const Text('+'),
),
],
),
),
),
);
}
}
'+' 버튼을 눌러도 Text 위젯은 반응이 없습니다.
그러나 콘솔에서는 _count 값이 계속 증가합니다.
이렇게 동적으로 변하는 위젯이 포함된다면 SFW를 사용하면 됩니다!
StatefulWidget (SFW)
- state를 포함.
- setState가 발생할 때마다 build 한다.
- 동적 화면 구현에 용이.
👩🏻💻 예제
class SFWPage extends StatefulWidget {
@override
_SFWPageState createState() => _SFWPageState();
}
class _SFWPageState extends State<SFWPage> {
int _count = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text('StatefulWidget Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"$_count",
style: const TextStyle(fontSize: 30),
),
ElevatedButton(
onPressed: () {
setState(() {
_count++;
print('onPressed : $_count');
});
},
child: const Text('+'),
),
],
),
),
),
);
}
}
'+' 버튼 -> onPressed() -> setState()를 이용하여 위젯을 build 시켰습니다.
_count의 증가에 따라 Text 위젯이 build 되면서 변화합니다!
🐱 Github 전체소스 데모 프로젝트 바로가기 🐱
🙋🏻♀️ 참고
[Flutter] StatelessWidget & StatefulWidget 차이점 정리
728x90
반응형
'Flutter' 카테고리의 다른 글
[Flutter] ListView (2) ListView.Builder (0) | 2022.03.25 |
---|---|
[Flutter] ListView (1) 기본형 (with. LIst<Widget>) (0) | 2022.03.25 |
[Flutter] pubspec.yaml (2) 속성 정리 (0) | 2022.03.18 |
[Flutter] Linter (with. flutter_lints) (0) | 2022.03.16 |
[Flutter/Widget] Icon (0) | 2022.02.24 |
Comments