플러터를 공부중 입니다. Stateful의 라이프 사이클에 대해 공부하고 정리하려는데 글쓰는게 어렵네요. 이보다 더 잘 정리할 자신이 없어서 잘 정리된 글을 퍼 옵니다. 글을 잘 써서 출간하는 것도 좋지만 부족한 기억을 보조하는 역할도 해야 하니까요. 추가적으로 링크된 원문을 번역하는 것으로 정리 해 보았습니다.
Stateful Widget이 실행될때 첫번째로 생성자가 실행됩니다.. 생성자 실행은 라이프사이큰 단계에 포함되지 않습니다. 이 시점에는 위젯 속성의 상태가 비어 있습니다.
라이프사이클의 첫번째는 createState() 입니다. mutable한 상태를 유지하는 State 오브젝트를 생성합니다. State객체가 생성되면 mount라는 속설을 true로 설정하고 State 오브젝트를 BuildContext와 연결합니다.
두번째는 initState() 입니다. 이 메소드는 State 오브젝트가 생성될때 한번만 호출됩니다. 이 메서드에서 BuildContext를 사용할 수 없습니다.
세번째는 didChangeDependencies() 입니다. initState() 다음에 호출되고 또한 위젯이 변경 될 때도 호출됩니다. 이 메서드 다은에 항상 build() 메서드가 호출되므로 이 메서드는 거의 필요하지 않습니다.
네번째는 build() 입니다. 처음은 didChangeDependencies() 다음에 호출되지만 위젝의 상태가 변경될 때 마다 실행됩니다.(didUpdateWidget() 또는 setState() 메서드가 호출 될 때마다)
다섯번째는 didUpdateWidget() 입니다. 상위 위젯이 구성을 변경하고 위젯을 다시 빌드 해야하는 경우 호출됩니다. 인수로 이전 위젯을 제공합니다. 이후 build() 메서드를 호출합니다.
라이프사이클에 영향을 줄 수 있는 setState() 메서드는 현재 오브젝트의 상태가 "dirty"라고 프레임워크에 통지합니다. 이는 UI에 영향을 줄 수 있는 방식으로 변경되었음을 의미합니다. 그러면 프레임워크는 build() 메서드를 호출해서 위젯을 업데이트 합니다. setState 메서드는 개발자가 호출하는 유일한 메서드이기 때문에 수명주기 메서드에 포함하지 않습니다.
여섯번째는 deactivate() 입니다. 이 메서드는 위젯이 위젯트리에서 제거될 때 호출되지만 현재 프레임 변경이 완료되기 전에 다시 삽입될 수 있습니다.
마지막 일곱번째는 dispose() 입니다. 이 메서드는 위젝트리에서 영구적으로 제거될 때 호출됩니다. 데이터 리스너 또는 connections을 정리하는데 사용 할 수 있습니다. dispose() 메서드 이후에 mounted 속성은 false가 됩니다. 이 상태의 오브젝트는 결코 remount 될 수 업습니다.