-
플러터 라이프 사이클flutter 2021. 4. 21. 01:59
StatefulWidget LifeCycle
createState : 프레임워크가 Stateful을 만들 때 createState 호출
mounted is true : createState가 state class를 만든 후 buildContext가 할당된다 할당된 경우 true 아닐경우 false
여기서 setState를 콜하면 widget이 시작되지않고 오류가 발생
initState : 객체가 위젯트리에 할당되었을 때 호출build 전에 데이터를 가져와야되는 경우 controller등을 설정하는 경우에 사용
didChangeDependencies : State의 의존성이 변경되었을 때 호출InheritedWidget, Provider등을 통해 데이터 변경 후 상태를 변경
build : 위젯을 return하는 함수, 주로 UI부분을 처리
didUpdateWidget : 부모 위젯이 rebuild되거나 위젯트리의 변경이 일어날 때 호출
setState : 데이터 변경 후 프레임워크에 데이터가 변경된것을 알리기 위해 사용되는 메소드
데이터 변경을 UI에 표시되는 값을 변경할 때 사용하지만 너무 많이 호출 혹은 복잡한 위젯을 재호출 하는경우 성능상 저하가 우려
deactive : 위젯트리에서 객체가 제거되었을 때 호출
dispose : State 객체가 영구적으로 제거되었을 때 호출주로 controller를 dispose하기위해 사용
출처: https://devmemory.tistory.com/8?category=935233 [Never give up]
initState()
initState() 메소드는 State객체가 생성될 때 처음에 한 번 호출 되는 메소드입니다.
이 메소드는 추가적인 초기화를 실행할 필요가 있을 때 (에니메이션이나 컨트롤러등을 사용할 때 등등) 오버라이드하면 됩니다.
이 메소드를 오버라이드한다면 super.initState()를 가장먼저 실행해야합니다.
initState 메소드가 완료되면 State 객체는 초기화 되었고 Context를 사용할 수있습니다.
이메소드는 이 State 객체가 살아있는 동안 더이상 호출되지 않습니다.
didChangeDependencies()
didChangeDependencies()는 두번째로 호출되는 메소드 입니다.
이단계에서 context는 사용가능해서 사용해도됩니다.
이 메소드는 일반적으로 위젯이 InheritedWidget에 링크되어 있거나
BuildContext를 기반의 일부 리스너를 초기화해야하는 경우에 오버라이드 됩니다.
위젯이 InheritedWidget에 링크되어 있는 경우, 이 메소드는 위젯이 재빌드 될 때마다 호출 됩니다.
이 메소드를 오버라드 할 때 super.didChangeDependencies()를 먼저 호출 하세요.
build()
build(BuildContext context) 메소드는 didChangeDependencies (그리고 didUpdateWidget) 이후에 호출 됩니다.
여기는 위젯을 만드는 곳입니다.
이 메소드는 State 객체가 변경될 때마다 (또는 InheritedWidget이 등록된 위젯에게 통지할 때마다) 호출됩니다.
리빌드를 해야한다면 setState({...}) 메소드를 호출 하세요.
dispose()
dispose() 메소드는 위젯이 폐기될 때 호출 됩니다.
리스너나 컨트롤러등 과 같은 것들을 정리할 필요가 있을 때 호출합니다.
super.dispose()를 먼저호출해 주세요.
출처: https://paulaner80.tistory.com/entry/Widget-State-BuildContext-그리고-InheritedWidget [paulaner80]
'flutter' 카테고리의 다른 글
flutter bloc 패턴, rxdart.. (0) 2021.07.03 TabBarView PageView에서 위젯 리빌드 방지 (0) 2021.05.03 null safety (0) 2021.05.02 runtransaction 트랜잭션 처리 (0) 2021.04.21 setState() called after dispose() 오류 (0) 2021.04.21