[Flutter] Stateful 위젯 생명주기 메서드
2020. 12. 31. 22:31ㆍFlutter
Stateless위젯
Stateless위젯에서는 변경하고 싶을 때마다 그 위젯을 파괴!하고 새로운 위젯으로 만들어야 합니다.
stateless위젯에서 생명주기는 간단합니다.
class Screen1 extends StatelessWidget{
@override
Widget build( BuildContext context ){
return null;
}
}
보여주기만 하는 build()에서 화면에 표시할 모양이나 위젯을 생성하는 것입니다. 사실 상태는 있지만 불변성(immuteable)을 가지는 위젯이라 변경할 수 없습니다!
Stateful위젯
Stateful한 위젯에서는 본격적으로 다양한 생명주기 메서드가 등장합니다.
void initState(){
}
Widget build(BuildContext context) {
return null;
}
void deactivate(){
}
stateful한 위젯에서는 state값이 변경될 수 있으며, state값이 변경되면 앱을 업데이트 시킵니다.
이에 따라 다양한 생명주기 메서드를 정리합니다.
1. initState()
state가 처음 초기화 될 때 트리거되는 init상태가 있는데 initState()에서 초기화 해줍니다.
2. build()
위젯이 실제로 빌드 될 때 트리거되는 build() 메서드 입니다. - 실제 화면에 렌더링 되어 표시되어지는 부분
3. deactivate()
stateful 위젯이 파괴될 때 호출하는 메서드입니다.
import 'package:flutter/material.dart';
import 'screen1.dart';
class Screen2 extends StatefulWidget {
@override
_Screen2State createState() => _Screen2State();
}
class _Screen2State extends State<Screen2> {
@override
void initState() {
// TODO: implement initState
super.initState();
print('상태 저장 위젯이 생성되고 위젯트리에 추가되는 순간에 어떤 처리를 해줄 거라면 initState()에서 처리.')
print('initState called!!');
}
@override
void deactivate() {
// TODO: implement deactivate
super.deactivate();
print(' 마지막으로 stateful위젯이 파괴될 때 어떤 일이 일어나길 원하면 deactivate메서드 내부에 코드 작성.')
print('deactivate called!!');
}
@override
Widget build(BuildContext context) {
print('매번 stateful 위젯이 다시 빌드될 때 처리할 일은 build()에서 처리.');
print('build called - 위젯 렌더링');
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.blue,
title: Text('Screen 2'),
),
body: Center(
child: RaisedButton(
color: Colors.blue,
child: Text('Go Back To Screen 1'),
onPressed: () {
// context는 Screen2 위젯의 현재 빌드 컨텍스트가 될 것.
Navigator.pop(
context,
MaterialPageRoute(
builder: (context) => Screen1(),
),
);
},
),
),
);
}
}
'Flutter' 카테고리의 다른 글
[Flutter] Flutter bloc 클린 아키텍쳐 (1) (0) | 2022.06.20 |
---|---|
[Flutter] Dart 문법 Null인식연산자 (0) | 2021.01.01 |
[Flutter] Routes 와 Navigation (feat. 멀티스크린) (0) | 2020.12.26 |
[Flutter] Flutter에서 Dart 문법(2) - Functions as First Order Objects (2) | 2020.12.19 |
[Flutter] Flutter에서 Dart 문법 (enum 타입 , 삼항 연산자, Map 타입) (0) | 2020.12.13 |