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
- 생명주기
- classList
- 230503
- ActionBar
- Flutter
- intent
- C++
- querySelector
- DOMContentLoaded
- putextra
- serializable
- 함수 인자
- string
- html
- 안드로이드
- 데이터 타입
- 230510
- textContent
- 부가데이터
- parcelable
- ViewPager
- fragment
- DFS
- 프래그먼트
- Adapter
- null-safety
- javascript
- 인텐트
- 230508
- Class
Archives
- Today
- Total
나만의 개발노트
[Flutter] Widget LifeCycle - initState(), build(), dispose() 본문
[Flutter]/[Flutter]
[Flutter] Widget LifeCycle - initState(), build(), dispose()
노트포미 2024. 7. 22. 22:21- 모든 widgetd은 lifecycle(생명주기)가 존재한다.
- statefulWidget에는 생명주기와 관련된 3가지 메소드가 존재한다.
- initState() : 속성 초기화하는 메소드
- build() :위젯의 UI를 만드는 메소드
- dispose() : 위젯이 스크린에서 제거될 때 호출되는 메소드
[ initState() ]
: 속성을 초기화하는 메소드
- 보통 클래스 상단에서 할 수 있기 때문에 필요하지 않다 (아래 코드)
class MyLargeTitle extends StatefulWidget{
int counter = 0;
...
}
-> 부모 요소에 의존하는 데이터를 초기화 해야할 때 사용
ex) API 업데이트 구독 등
- 단 한번만 호출된다
- build보다 먼저 호출된다
[ dispose() ]
: 위젯이 스크린에서 제거될 때 호출되는 메소드
-> 위젯이 위젯 트리에서 제거되기 전에 무언가 취소하고 싶을 때 사용
ex) 이벤트 리스너 같은 것들 구독 취소
[문제]
: 다음 영상과 동일하게 작동하도록 코드를 작성하시오
- toggle 버튼을 누르면, text가 변경됨
- Text('My Large Title')은 분리된 MyLargeTitle 위젯에 작성됨
- MyLargeTitle의 build(), initState(), dispose()가 호출될 때 로그 출력될 수 있게
[정답]
import 'package:flutter/material.dart';
void main() {
runApp(const App());
}
//widget
class App extends StatefulWidget {
const App({super.key});
@override
State<App> createState() => _AppState();
}
//데이터를 저장하고, state를 확인해서 UI를 변형하는 클래스
class _AppState extends State<App> {
bool showtitle = true;
//toggleTitle메소드
void toggleTitle() {
setState(() {
showtitle = !showtitle;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
textTheme: const TextTheme(
headlineLarge: TextStyle(
color: Colors.blue,
),
),
),
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
showtitle ? const MyLargeTitle() : const Text('nothing'),
IconButton(
onPressed: toggleTitle,
icon: const Icon(
Icons.toggle_off_outlined,
size: 40,
),
),
],
),
),
));
}
}
class MyLargeTitle extends StatefulWidget {
const MyLargeTitle({
super.key,
});
@override
State<MyLargeTitle> createState() => _MyLargeTitleState();
}
class _MyLargeTitleState extends State<MyLargeTitle> {
@override
Widget build(BuildContext context) {
print('build');
return Column(
children: [
Text(
'My Large Title',
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.bold,
color: Theme.of(context).textTheme.headlineLarge?.color,
),
),
],
);
}
@override
void initState() {
super.initState();
print('initState');
}
@override
void dispose() {
super.dispose();
print('dispose');
}
}
'[Flutter] > [Flutter]' 카테고리의 다른 글
[Flutter] API, HTTP, Future, async/await (1) | 2024.07.25 |
---|---|
[Flutter] flexible, alignment, expanded, Timer, Duration (1) | 2024.07.24 |
[Flutter] BuildContext와 Theme - 스타일시트 저장하기 (0) | 2024.07.22 |
[Flutter] flutter로 UI 구성해보기 (0) | 2024.07.19 |
[Flutter] 첫걸음, Hello world! (0) | 2024.07.18 |