ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Flutter] App Lifecycle (라이프사이클)
    📖 개발 공부/flutter 2023. 7. 23. 11:58

    이전 포스팅에서 Flutter의 Stateless Widget과 Stateful Widget을 알아보았다.

     

    [Flutter] Stateless Widget / Stateful Widget

    앱 생명 주기의 생성, 렌더링, 업데이트 및 종료 방식을 알아야지 앱 생명 주기를 기반으로 코드를 이해하는 데 도움이 된다. Flutter의 모든 것이 Widget으로 이루어져 있어 생명 주기에 앞서 Flutter

    ayoung0073.tistory.com

     

    이번엔 상태가 변하는 Stateful Widget을 기준으로 LifeCycle을 살펴보도록 하자!

     

    앱 생명주기(라이프사이클) 단계

    앱은 다음과 같은 상태의 LifeCycle을 가진다.

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

    각 단계에 대해 자세히 살펴보자.

    createState()

    • createState() 메서드는 새로운 Stateful Widget이 생성될 때 호출되는 메서드이다.
    • 해당 StatefulWidget과 연결된 State 객체를 생성하여 반환한다.
    • 이 메서드는 반드시 오버라이드해야한다.
    class HomeScreen extends StatefulWidget {
    
      HomeScreen({Key key}) : super(key: key);
      
      @override
      HomeScreenState<StatefulWidget> createState() => HomeScreen();
    }
    

    initState()

    • initState() 메서드는 위젯이 처음으로 생성될 때 호출되는 메서드이다.
    • State 객체의 초기화를 위해 사용된다. 변수 초기화, 스트림 생성, 애니메이션 컨트롤러 설정 등을 할 수 있다.
    • 이 메서드는 생성 시 한 번만 호출되며, super.initState()를 호출하여 부모 위젯(StatefulWidget)의 초기화도 수행한다.
    • → 상태가 변경되더라도 다시 호출하지 않는다.
    @override
    void initState(){
      super.initState();
    }
    

    didChangeDependencies()

    • didChangeDependencies() 메서드는 initState() 메서드 호출 이후에 호출되는 메서드이다.
    • 위젯이 처음으로 생성될 때 한 번 호출되고, 이후 부모 위젯이나 의존성이 변경될 때마다 호출된다.
    • 주로, 부모 위젯에 의해 제공되는 데이터에 기반하여 API 호출이나 변수 초기화 등을 수행할 수 있다.
    • 공식문서 또한 상속한 위젯이 업데이트 될 때, 네트워크 호출(또는 다른 비용이 큰 액션)이 필요한 경우 유용하다고 한다.
    @override
    void didChangeDependencies() {
    
    }
    

    build()

    • build() 모든 위젯의 렌더링을 담당하는 가장 중요한 메서드이다.
    • 위젯의 UI를 구성하는데 사용되며, 화면에 렌더링되어야 하는 위젯을 반환한다.
    • UI를 갱신하거나, hot-reload를 실행할 때마다 이 메서드가 다시 호출된다.
    • 데이터가 변경되어 UI를 갱신해야 할 경우, setState() 메서드를 호출하여 해당 위젯의 build()를 다시 호출하도록 알릴 수 있다.
    @override
    Widget build(BuildContext context) {
      return Scaffold()
    }
    

    didUpdateWidget()

    • didUpdateWidget() 메서드는 부모 위젯이 변경되어 해당 위젯이 다시 빌드될 때 호출된다.
    • 부모 위젯이 같은 유형의 새로운 위젯으로 교체될 때 이 메서드가 호출되며, 이전 위젯에서 새로운 위젯으로 변경될 때 활용할 수 있다.
    @protected
    void didUpdateWidget(Home oldWidget) {
      super.didUpdateWidget(oldWidget);
    }
    

    setState()

    • setState() 메서드는 해당 위젯의 상태(State)가 변경되었음을 프레임워크에 알리는 역할을 한다.
    • 상태가 변경되면 build() 메서드를 다시 호출하여 UI를 갱신한다.
    • 이를 통해 미세한 업데이트를 수행하여 성능을 향상시킨다.
    void function(){
      setState(() {});
    }
    

    deactivate()

    • deactivate() 메서드는 위젯이 현재 위젯 트리에서 제거되었지만, 나중에 다른 위치에 다시 추가될 수 있는 상태일 때 호출된다.
    • 주로 Navigator를 사용하여 새로운 화면으로 이동할 때 호출된다.
    @override
    void deactivate(){
      super.deactivate();
    }
    

    dispose()

    • dispose() 메서드는 위젯이 영구적으로 위젯 트리에서 제거될 때 호출된다.
    • 위젯과 관련된 자원 해제, 스트림 구독 해제, 애니메이션 컨트롤러 해제 등을 수행한다.
    • 위젯이 다시 추가될 때는 위젯의 전체 라이프사이클이 재실행된다.
    @override
    void dispose(){
      super.dispose();
    }
    

     

    📎 참고 링크

     

    App Lifecycle In Flutter

    Knowing the basics of Flutter is the most significant and commendable speculation you can do while learning Flutter. You ought to…

    medium.flutterdevs.com

     

    728x90
    반응형

    댓글

Designed by Tistory.