민프

[Flutter] StatefulWidget의 생명주기(lifecycle)를 알아보자 본문

[Flutter]

[Flutter] StatefulWidget의 생명주기(lifecycle)를 알아보자

민프야 2023. 8. 8. 17:31

StatefulWidget의 생명주기를 알아보자

StatefulWidget위젯은 정보가 업데이트 됨에 따라 UI도 변경되게 되는데 생명주기가 어떻게 될까?

 

근데 원초적인 질문부터 해보자면

생명주기를 왜 알아야할까? 인데

 

여러 프레임워크, 라이브러리를 사용할 때 생명주기를 모른다면

어느 부분에서 최적화를 해야만 서비스가 나아지는지 모른다는 것이다.

 

쉽게 말해

어느 타이밍에 무언가를 불러와야하고, 업데이트 해야 하는지를 알아야 하는데

그 타이밍이 바로 생명주기라는 것이다.

 

그럼 본론으로 Flutter - StatefulWidget의 생명주기는 무엇일까?

 

StatefulWidget - lifecycle

 

공식 홈페이지에서 심플하게 나타낸게 있는데 아래와 같다.

  • createState() : Flutter에서 빌드 시 StatefulWidget을 호출하게 되고, createState()를 최초 호출하게 된다.
  • mounted == true : createState()가 생성되고 나서 mounted == true일 경우 BuildContext가 할당된다.
  • initState() : 위젯이 생성될 때 호출되는 첫 번째 메서드 이고, 단 한번만 호출이 된다. 
    이 메서드에서 @override를 사용해서 API에서 온 데이터를 업데이트 해주거나 하기에 좋은 단계이다.

    코드 순서에서 initState 메서드가 항상 build 메서드보다 먼저 호출되어야한다. 
  • didChangeDependencies() : initState위젯이 처음 빌드된 직후 호출된다.
    만약 의존하는 위젯 or 개체가 호출될 때마다 호출이 된다. 
    이건 상속 위젯이 업데이트될 때 같이 업데이트가 되어야하는 경우에 유용하다
  • build()
  • didUpdateWidget()
  • setState() : 프레임워크에 "데이터가 변경됨, build context를 다시 빌드해야함"을 알리는데 사용된다.
  • deactivate() : 거의 사용되지는 않고, deactive() 상태는 트리가 제거될 때 호출이 된다.
  • dispose() : 개체가 제거될 때 호출되고, 모든 애니메이션이나 스트림 등을 구독 취소하고 싶을때 여기에서 사용된다.
  • mounted == false

위 내용을 아래 다이어그램으로 표현해봤는데 이해에 도움이 되셨으면 좋겠네요

 

 


참고링크

https://flutterbyexample.com/lesson/stateful-widget-lifecycle

 

StatefulWidget lifecycle

When a Flutter builds a [`StatefulWidget`](https://docs.flutter.io/flutter/widgets/StatefulWidget-class.html), it creates a [`State`](https://docs.flutter.io/flutter/widgets/State-class.html) object. This object is where all the **[mutable](https://en.wiki

flutterbyexample.com

 

Comments