1 minute read

1. Flutter의 생명주기

아래 Flutter의 생명주기 개요도를 보고 각 메서드들이 어떤 역할을 하는지 알아보자.



1.1 createState()

statefulWidget을 구축하자마자 호출되며, 위젯트리에 상태를 만들기 위해 호출된다. 연결된 State의 인스턴스를 반환한다.

1
2
3
4
class Home extends StatefulWidget {
  @override
  HomeState<StatefulWidget> createState() => Home();
}


1.2 initState()

위젯이 생성될때 처음으로 호출되는 메서드로 initState는 오직 한번 만 호출 되며 위젯트리를 초기화한다. 또한 반드시 super.initState()를 호출해야 한다.

initState에서 실행되면 좋은 것들

  • 생성된 위젯 인스턴스의 BuildContext에 의존적인 것들의 데이터 초기화
  • 동일 위젯트리내에 부모위젯에 의존하는 속성 초기화
  • Stream 구독, 알림변경, 또는 위젯의 데이터를 변경할 수 있는 다른 객체 핸들링.
1
2
3
4
@override
void initState(){
  super.initState();
}


1.3 didChangeDependencies()

위젯이 최초 생성될때 initState 다음에 바로 호출 된다. 또한 위젯이 의존하는 데이터의 객체가 호출될 때(State의 종속성이 변경될 때)마다 호출된다.

1
2
3
4
@override
void didChangeDependencies() { 
 
}


1.4 build()

위젯으로 만든 UI를 구축하고 반드시 Widget을 리턴해야 한다. 화면에 모든 UI 위젯이 랜더링 할 때 마다 호출하고 변경된 부분 트리를 감지하고 대체한다.

1
2
3
4
@override
Widget build(BuildContext context) {
 //add your widgets
}


1.5 didUpdateWidget(Widget oldWidget)

위젯의 구성이 변경될 때마다 호출된다. 부모 위젯이 변경되고 다시 그려져야할 때 build 함수 호출 직전에 호출된다. 부모 위젯의 변경에 따라 상태 값을 초기화 할 필요가 있다면 이 함수에서 setState를 통해 상태값을 초기화 한다.

1
2
3
4
@protected
void didUpdateWidget(Home oldWidget) {
  super.didUpdateWidget(oldWidget);
}


1.6 setState()

상태가 변경되었을 때 프레임워크에 상태가 변경됐음을 알린다.setState()는 비동기적이 않은 callback을 사용한다.

1
2
3
setState(() {
 
});


1.7 deactivate()

트리에서 State가 제거 될때 호출 된다. 그러나 현재 프레임 변경이 완료되기 전에 다시 삽입 될 수 있다. 이 메서드는 State객체가 트리의 한 지점에서 다른 지점으로 이동 할 수 있기 때문에 기본적으로 존재한다.필요에 따라 자주 호출 할 수 있는 이유는 다시 그리는데 소용되는 비용이 저렴하기 때문이다.


1.8 dispose()

dispost()는 State객체가 영구히 제거 된다. 상태 객체도 함께 제거되므로 deactivate()가 먼저 호출되어 상태 객체가 제거됨을 알리고, dispose()가 호출되어 위젯 객체가 삭제됨을 알린다.

1
2
3
4
@override
void dispose(){
   super.dispose();
}