Flutter Lifecycle ( 라이프 사이클 )

    애플리케이션 수명 주기가 어떻게 생성, 렌더링, 업데이트 및 종료되는지를 아는 것은 앱 개발의 기본으로 앱 수명 주기를 기반으로 코드를 이해하는 데 도움이 되므로 꼭 알고 있어야 합니다. 
    Flutter도 앱 내에 라이프 사이클을 가집니다. 

    Flutter는 크게 2개의 타입의 위젯으로 나뉩니다. 
    - Stateless Widgets
    - Stateful Widgets

    위 두 위젯은 하기 링크에 설명되어 있습니다. 

    2022.01.04 - [Flutter(플러터)/UI] - Flutter Stateless & Stateful Widget

     

    Flutter Stateless & Stateful Widget

    Flutter는 크게 2개의 타입의 위젯으로 나뉩니다. Stateless Widgets Stateful Widgets Stateless Widgets Stateless 위젯은 런타임에 강력하게 변경되지 않으므로 상태를 처리할 필요가 없는 위젯입니다. 변수,..

    byounghonglim.tistory.com


    우리는 상태가 변하는 Stateful Widget을 기준으로 Life Cycle을 살펴 봅니다. 
    앱은 아래와 같은 상태의 Life Cycle을 가집니다. 

    createState()
    initState()
    didChangeDependencies()
    build()
    didUpdateWidget()
    setState()
    deactivate()
    dispose()

    1. createState()
    이 메소드는 의무적으로 만들어야 하는 다른 Stateful Widget을 만들 때 호출됩니다.  

    class HomeScreen extends StatefulWidget {
    
      HomeScreen({Key key}) : super(key: key);
      
      @override
      HomeScreenState<StatefulWidget> createState() => HomeScreen();
    }

    2. initState()
    이것은 상태 객체별로 정확하게 한 번씩 호출됩니다.
    initState() 메소드에서 일부 코드를 특성화하거나 추가할 경우 이 코드는 위젯을 빌드하기도 전에 먼저 실행됩니다. 
    일반적으로 초기화 코드를 작성합니다. 

    @override
    void initState(){
      super.initState();
    }

    3. didChangeDependencies() 
    이 메소드는 위젯이 처음 구성될 때마다 initState() 메소드를 따라 호출됩니다. 

    @override
    void didChangeDependencies() {
    
    }

    4. build()
    이 상태는 모든 위젯의 렌더링이 의존하는 기본 방법입니다. 화면에 UI 위젯을 렌더링해야 할 때마다 호출됩니다. UI를 업데이트해야 할 때 또는 화면 갱신를 클릭할 때 build()를 수정합니다 변환된 정보가 있는 경우 UI를 명시적으로 수정해야 한다고 가정하면 폼 메서드를 다시 실행하기 위해 프레임워크를 가르치는 setState()를 사용할 수 있습니다!

    @override
    Widget build(BuildContext context) {
      return Scaffold()
    }

    5. didUpdateWidget()
    상위 위젯에 의해 구성이 일부 조정된 경우에 사용됩니다. 기본적으로 위젯의 업데이트된 내용을 조사하기 위해 응용 프로그램을 재로드할 때마다 호출됩니다. 상위 위젯이 속성 또는 설계를 변경하고 상위 위젯이 유사한 런타임 유형을 사용하여 하위 위젯을 수정해야 하는 경우, 이때 didUpdateWidget이 트리거됩니다. 

    @protected
    void didUpdateWidget(Home oldWidget) {
      super.didUpdateWidget(oldWidget);
    }

    6. setState()
    setState() 방법은 객체의 이 상태에 대한 빌드로 만드는 UI에 영향을 미칠 수 있는 방식으로 내부 상태가 변경되었다는 프레임워크를 나타냅니다. 시스템에서 display()를 호출한 후 이 메서드를 호출하는 것은 오류입니다. 이러한 내부 상태는 사용자에게 명백한 UI에 영향을 미칠 수 있으며, 따라서 UI를 재구축하는 것이 중요해집니다.

    void function(){
      setState(() {});
    }

    7. deactivate()
    상태가가 위젯 트리에서 제거될 때 고려되지만, 이 상태은 다른 부분의 트리에 추가로 포함될 수 있습니다. 현재 위젯이 위젯 트리에 없지만 이후 단계에서 위젯이 다시 쉽게 추가될 수 있는 경우에 해당됩니다. 예로 네비게이터를 하여 다음 화면으로 이동하고 클라이언트가 이전 화면으로 돌아갔을 때, 위젯이 트리에 다시 추가되기 때문에 비활성화가 호출됩니다.

    @override
    void deactivate(){
      super.deactivate();
    }

    8. dispose()
    개체와 해당 상태를 위젯 트리에서 영원히 삭제합니다. 여기서 스트림 구독 취소, 타이머 취소, 애니메이션 컨트롤러 삭제, 문서 닫기 등을 수행할 수 있습니다. 

    @override
    void dispose(){
      super.dispose();
    }

     

    댓글