728x90
반응형
StatelessWidget과 StatefulWidget 의 생명주기는 각각 다르기 때문에 적절히 사용하면 성능 향상에 도움이 된다.
StatelessWidget Lifecycle
StatefulWidget Lifecycle
1. Constructor()
- 생성자
2. createState()
- Stateful Widget 객체를 생성하면 생성자가 호출되고 이 메서드가 호출된다. Stateful Widget 에서 필수적으로 오버라이드 해야 하는 메서드이다.
- 이 메서드의 역할은 State 객체를 생성하는 일.
3. initState()
- State 객체가 생성되면 State 객체의 생성자가 호출된다.
- 처음 한 번만 호출되는 함수이다. 여기서 데이터나 속성값을 초기화 할 수 있다.
- context를 사용 할 수 없다.
- Constructor와 비슷한데 StatefulWidget에서는 Constructor보다 initState에서 더 사용
4. didChangeDependencies()
- initState() 다음에 바로 실행되는 메서드.
- 위젯이 의존하는 데이터의 객체가 호출되거나 변경되었을 때 다시 실행됨.(여러번 호출 가능)
- 참조(Dependency)아는 위젯이나 Inherited Widget, Provider가 변경되면 호출된다.
- build()는 항상 이 함수 다음에 호출 된다.
- context를 사용 할 수 있다.
*5. dirty - state class의 상태를 말하는 것으로 build()가 실행되어야 하는 상태를 말함 (실제로 사용되거나 하진 않음)
6. build()
- build()를 통해서 위젯이 그려진다. State 클래스에서 반드시 오버라이딩 되어야 하는 메서드이다. 예를 들어 버튼을 클릭 할 때나 어떠한 액션을 취할 때 계속 실행되는 함수이다.
- UI를 구현하는 부분.
- 반드시 존재해야하는 부분으로 @override 재정의 대상이고 Widget을 반환해야한다.
*7. clean - state class의 상태를 말하는 것으로 build()가 실행된 다음의 상태를 말함 (실제로 사용되거나 하진 않음)
*8 setState()
- State 객체의 상태가 변경되었다는 것을 프레임워크에 알리는 용도이다. 따라서 State 객체의 상태가 변경될 때마다 setState() 함수를 통해서 알려야 한다. 그래야만 프레임워크가 build() 함수가 호출할 준비를 한다.
- build함수를 다시 실행시키는 것으로 state class를 dirty 상태로 만드는 역할
*9 didUpdateWiget()
- 부모 위젯이 재 빌드되어 위젯이 갱신될 때 호출된다. didUpdateWiget()이 호출된 후에는 항상 build()를 호출한다. 따라서 만약 didUpdateWiget() 내에서 setState() 를 호출하면 build() 중복 호출이 된다.
- 부모 위젯이 재 빌드 되어 Constructor가 실행되는데 createState는 실행되지 않고 기존에 있던 위젯을 가져와서 사용. -> 기존에 생성했던 변수들을 사용가능함
10. deactivate()
- 트리에서 State 객체가 제거될 때마다 호출된다.
- 어떤 경우에는 프레임워크가 제거된 State 객체를 트리의 다른 부분에 다시 삽입하기도 한다. 이 경우에는 State 객체가 트리의 새로운 위치에 적응할 수 있는 기회를 주기 위해 build()를 호출한다.
- 거의 사용하지 않고 dispose를 많이 사용함
11. dispose()
- 해당 위젯이 위젯트리에서 제거됐을 때 실행된다. 더이상 빌드되지 않는다는 의미.
reassemble()
- hot reload 를 실행하면 reassemble()이 호출된다. reassemble() 이 호출되면 build()도 호출이 된다.
728x90
반응형
'Flutter > 개발 정보' 카테고리의 다른 글
Flutter에서 font 추가 및 사용하기 (0) | 2025.01.22 |
---|---|
Flutter Timer와 PageView, PageController를 통해 사진 넘기기 (0) | 2025.01.21 |
StatefulWidget 과 StatelessWidget 의 차이 (0) | 2025.01.14 |
안드로이드 스튜디오 Dart SDK 설정하기 (1) | 2025.01.14 |
Flutter Semantic Versioning 및 패키지 버전 자동 업데이트 (0) | 2024.08.26 |