본문 바로가기

그 땐 App했지/그 땐 Flutter했지

[TAVE/Study] Do it! Flutter 3장 플러터 내부 구조 살펴보기②

728x90

210919 일

오늘 usb 잭을 못 가져와서 에뮬레이터로 실습해보려고 했는데

어마무시하게 느린 속도에 놀라서 바로 꺼버렸다..ㅎㅎ 와우

 

스테이트풀 위젯의 생명주기
  1. 위젯의 상태를 생성하는 createState 함수
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => new _MyHomePageState();
    }​
    👉🏻 다른 생명주기 함수들이 포함된 State 클래스를 반환하므로 반드시 처음에 호출한다.
    ✍🏻 상태 변경 감시는 StatefulWidget 클래스 담당, 실제 갱신 등은 State 클래스가 담당한다.

  2. 위젯을 화면에 장착하면 mounted == true
      if (mounted) {
        setState()
      }​
    👉🏻 createState 함수가 호출되어 상태가 생성되면 곧바로 mounted 속성이 true가 된다.
    ✍🏻 mounted == true: 위젯을 제어할 수 있는 buildContext클래스에 접근할 수 있다.


  3. 위젯을 초기화하는 initState() 함수
      @override
      initState() {
        super.initState();
        _getJsonData();
      }​
    👉🏻 위젯을 초기화할 때 한 번만 호출한다.
    ✍🏻 주로 데이터 목록을 만들거나 처음 필요한 데이터를 주고받을 때 호출한다. 네트워크 통신이 안 되거나 데이터가 이상할 때를 대비해 initState() 함수에서 데이터를 준비해둔다.

  4. 의존성이 변경되면 호출하는 didChangedDependencies 함수
    👉🏻 initState 후에 이어서 바로 호출된다. 상속받은 위젯을 사용할 때 피상속자가 변경되면 호출한다.

  5. 화면에 표시하는 build 함수
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.amber,
        ),
        home: MyHomePage(title: 'Flutter Demo Home Page'),
       );
      }​
    👉🏻 Widget을 반환한다. = 위젯을 화면에 렌더링한다.

  6. 위젯을 갱신하는 didUpdateWidget 함수
      @override
      void didUpdateWidget(Widget oldWidget) {
        if (oldWidget.importantProperty != widget.importantProperty){
          _init();
        }
      }​
    👉🏻 부모 위젯이나 데이터가 변경되어 위젯을 갱신해야할 때 호출한다.
    ✍🏻 initState 함수는 한 번만 호출되므로 didUpdateWidget 같은 함수가 필요하다.

  7. 위젯의 상태를 갱신하는 setState 함수
      void updateProfile(String name) {
        setState(() => this.name = name);
      }​
    👉🏻 데이터가 변경됨을 알리고 변경된 데이터를 이용해 화면의 UI를 변경한다.
    ✍🏻 앱의 화면을 구성하므로 제일 많이 사용한다.

  8. 위젯의 상태 관리를 중지하는 deactivate 함수
    👉🏻 State 객체가 플러터의 구성 트리로부터 제거한다. but 메모리가 지워지지는 않는다.

  9. 위젯의 상태 관리를 완전히 끝내는 dispose 함수
    👉🏻 State 객체를 영구적으로 소멸한다. = 해당 위젯을 종료한다.

  10. 위젯을 화면에서 제거하면 mounted ==  false
    👉🏻 State 객체가 소멸하면 mounted 속성이 false가 되면서 생명주기가 끝난다. 이 때 이 State는 재사용할 수 없다.
728x90