Life Cycle
, Flutter 가 Stateful widget을 build할 때, 처음으로 위젯의 constructor(생성자)
fuction을 실행한다. 그리고나서, createState()
method를 호출한다. Stateful widget에서는 constructor fuction이 처음으로 실행되는 것을 볼 수 있다. 반면에, Stateful widget의 state
object에서는 state의 생명 주기가 createState()
method가 호출될 때, 시작하는것을 볼 수 있다.
constructor function은 실행될 때, widget속성이 비어있는 상태이기 때문에 생명주기의 한 부분을 차지하지는 않는다.
StatefulWidget
내에서 필요하다class MyHomePage extends StatefulWidget {
_MyHomePageState createState() => _MyHomePageState();
}
이 단계는 생명 주기의 실제 단계로 표시되지않지만, background에서 진행 중인 작업을 아는 것이 중요하다.
initState()에는 BuildContext를 사용할 수 없다.
Tip: initState()를 HTTP request를 관리하고, 위젯의 데이터를 변경할 수 있는 stream 구독, 알림변경 또는 기타 다른 object(객체)를 핸들링하는데 사용하자.
Subscription은 Subscriber와 Publisher 간의 연결이다. 기본적으로 Publisher는 Subscription을 시도할 모든 Subscriber에 대해 Subscription을 만들고 이 Subscription은 Subscriber의 요청을 처리한다. Publisher는 데이터 저장소 역할을 하고 구독은 데이터를 가져옵니다.
void initState() {
super.initState();
// TODO: implement initState
}
didChangeDependencies()
프레임워크는 initState()
다음으로 didChangeDependencies()를 호출한다.
didChangeDependencies()는 위젯이 변화에 의존하는 object일 때도 호출된다. build method는 항상 didCHangeDependencies()다음에 호출된다. 그래서, didChangeDependencies()는 거의 필요하지 않다. 하지만. didChangeDependencies()는 BuildContext.inheritFromWidgetOfExactType
을 호출할 수 있는 첫 번째 method다.
build()
build() method는 필수적이고, 생명 주기 동안 여러 번 호출되지만, 처음 호출되는 것은 didChageDependencies()
method가 호출된 다음이다. 따라서 state에 속한 위젯이 업데이트 될 때마다 프레임워크는 항상 build() method를 실행한다.(didUpdateWIdtet() 또는 setState() method가 호출될 때마다)
didUpdateWidget()
didUpdateWidget() method는 부모 위젯이 구성을 변경하고, 위젯을 다시 build해야하는 경우에 호출된다. 프레임워크는 이전 위젯을 새 위젯과 비교하는데 사용할 수 있는 argument를 준다. Flutter는 didupdateWIdget()이후에 build() method를 호출한다.
새 위젯을 이전 위젯과 비교해야 하는 경우에 didUpdateWidget()을 사용하자.
void didUpdateWidget(covariant MyHomePage oldWidget) {
super.didUpdateWidget(oldWidget);
// TODO: implement didUpdateWidget
}
setState()
setState() method는 자주 Flutter 프레임워크 자체와 개발자로부터 호출된다.
setState()
method는 현재 object내부 상태가 "dirty"라는 것을 프레임워크에 알려준다. 즉, UI에 영향을 줄 수도 있는 방식으로 변경되었음을 의미한다. 이 알림 후에 프레임워크는 build()
method를 호출해서 위젯을 업데이트하고 다시 build 한다.
```dart
setState(() {
// implement setState
});
setState는 개발자가 호출하는 유일한 메서드이기 때문에 생명주기 method의 단계로 표시하지 않음
void deactivate() {
super.deactivate();
// TODO: implement deactivate
}
data listeners 또는 life connections를 clean up 하는데에 dispose() method를 사용하자.
DataListener는 해당 DataProvider 인스턴스에서 생성된 이벤트 처리를 지원하는 이벤트 리스터 인터페이스이다.
void dispose() {
super.dispose();
// TODO: implement dispose
}
dispose()
method다음에는 State
object가 현재 트리에 없으므로 mounted 속성은 이제 false다. state object는 다시 mount할 수 없고, setState()가 호출되면 에러가 발생한다.
reassemble()
reassemble() 은 hot reload를 실행할 때마다 호출된다. reassemble()이 호출된 이후에 위 그림처럼 생명주기가 차례대로 진행된다.
참조
realryankim