본문 바로가기
플러터

flutter StatefulWidget 생명주기

by 이아킹 2022. 5. 15.
  •  StatefulWidget 생명주기

1.  상태 클래스 생성자가 호출된다. 위젯은 아직 트리에 추가되지 않은 상태이므로 대부분의 상태 초기화도 진행되지 않은 상태다.

2. 상태  객체가 BuildConxt나 트리의 특정 위치와 연결된다. 위젯은 마운트된 상태다. Widget.mounted 메서드로 위젯의 마운트 상태를 확인할 수 있다. 

3. State.initState 메서드가 호출된다. 이 메서드는 한 번만 호출된다. 이 메서드를 이용해 State 객체의 프로퍼티(연결된 상태를 포함하는 위젯이나 빌드 콘텍스트에 의존하는)를 초기화할 수있다. 

4. State.didChangeDependencies 메서드가 호출된다. 이 메서드는 initState 메서드 다음으로 한 번만 호출되지만 생명주기에 따라 다시 호출될 수 있다는 점이 독특하다. 이 메서드에서 InheritedWidget과 관련된 초기화를 수행한다.

5.이제 State 객체가 '더러운(dirty)' 상태이므로 플러터는 이를 다시 빌드해야 한다. 상태 객체를 다시 빌드해야 하는 상황에서는 자신을 '더러운' 상태로 설정한다. 

6. 상태 객체 초기화를 마쳤으며 State.build 메서드가 호출된다. 

7. 새로 상태를 빌드하면 '깨끗한(clean)' 상태로 바뀐다. 상태가 깨끗하면 아무 일도 일어나지 않는다. 의도한 대로 상태 객체가 표시되며 프레임 워크가 다른 지시를 내릴 때까지 기다린다. 이제 다음과 같은 일이 벌어진다. 

  •  a. 코드에서 State.setState를 호출하므로 더러운 상태로 설정한다. 
  •  b. 부모 위젯은 트리에서 이 위치를 다시 빌드 하도록 요청한다. 해당 위치의 위젯이 같은 형식과 같은 키로 다시 빌드되면 프레임 워크는 이전 위젯을 인수로 didUpdateWidget 메서드를 호출한다. 이 시점에서 위젯을 다시 빌드한다. 
  •  c. 위젯이 InheritedWidget에 의존하고 있는데 이 위젯이 바뀌면 프레임워크는 didChangeDependencies를 호출한다. 이 시점에서 위젯을 다시 빌드한다. 
  •  d. 마지막으로 한가지 액션이 항상 발생한다. 트리에서 상태 객체를 제거할때 State.disposed가 호출된다. 이 메서드에서는 위젯이 사용한 모든 자원 (활성 매니메이션 종료, 스트림 닫기 등)을 정리한다. disposed가 호출된 다음에는 위젯을 다시 빌드할 수 없다. 이후로 setState를 호출하면 오류가 발생한다.  

'플러터' 카테고리의 다른 글

플러터 리스트  (0) 2021.03.01