달달한 스토리

728x90
반응형

저번 주에 과음을 많이 해서 그런가 항문 옆에 조그마한 혹이 났는데,

 

그냥 괜찮겠지 하다가 어제 병원을 가보니 치루라고 한다...

 

오늘 바로 아침 9시에 수술을 받고 현재

 

병실에서 코딩 공부 중이다.

 

... 앞으로 항문 관리를 잘하자...

 

더티한 얘기는 그만하고, 오늘 배워본 생명주기에 대해서 정리해보려고 한다.

 


StatelessWidget

Stateless는 단순히 build 된 것을 단순히 return 해주기만 해서

 

생명주기가 제공되지 않는다.

 

오호 그렇다면 바로 StatefulWidget으로 넘어가 보자.

 

StatefulWidget

StatefulWidget.createState() 상태를 생성, 이 메서드를 제외하고 나머지는 모두 State 클래스에 있다.
mounted == true mounted 변수가 true 상태이다. 화면에 위젯이 부착된 상태란 뜻이다.
initState() 상태를 초기화 할 수 있다. 앱이 실행되고, 단 한 번만 실행된다.
didChangeDependencies() 상태 객체의 의존성이 변경되면 호출된다.
build() (필수) 위젯을 화면에 표시하는 메서드이다. 화면에 표시할 위젯을 반환해야 한다.
didUpdateWidget() 위젯의 설정이 변경될 때 호출이 된다.
setState() 위젯의 상태를 갱신하는 메서드, 이 메서드를 실행하면 위젯이 처음부터 다시 만들어지지만, initState는 다시 호출하지 않는다.
deactivate() 상태 객체가 위젯 트리에서 제거 된다. 경우에 따라 위젯트리를 다시 추가할 수 도 있다. 
dispose() 상태 객체가 위젯 트리에서 완전히 제거된다. 이 메서드가 호출되면, 상태 객체는 더 이상 사용될 수 없다.
mounted == false 화면이 최종적으로 화면에서 탈착된다.

이런 식으로 보기 좋게 표로 정리를 해보았다.

 

참고자료는 유동환 님의 처음 배우는 플러터를 참고하였다.

 

책에서 본 예시를 실행해보겠다.

 

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
      title: 'Stateless -> Stateful 위젯 데모',
      home: Scaffold(
          appBar: AppBar(
            title: Text('Stateless -> Stateful 위젯 데모'),
          ),
          body: _FirstStatefulWidget()),
    ));

class _FirstStatefulWidget extends StatefulWidget {
  const _FirstStatefulWidget({Key key}) : super(key: key);

  @override
  __FirstStatefulWidgetState createState() => __FirstStatefulWidgetState();
}

class __FirstStatefulWidgetState extends State<_FirstStatefulWidget> {
  String _buttonState;

  @override
  void initState() {
    print('initState(): 기본값을 설정합니다');
    _buttonState = 'OFF';
  }

  @override
  void didChangeDependencies() {
    print('didChangeDependencies() 호출됨');
  }

  @override
  Widget build(BuildContext context) {
    print('build() 호출됨');
    return Column(
      children: [ElevatedButton(onPressed: _onClick, child: Text('버튼을 누르세여!')),
      Row(
        children: [
          Text('버튼상태: $_buttonState')
        ],
      )],
    );
  }

  @override
  void didUpdateWidget(_FirstStatefulWidget oldWidget) {
    print('didUpdateWidget()');
  }

  @override
  void deactivate() {
    print('deacrivate()');
  }

  @override
  void dispose() {
    print('dispose()');
  }

  void _onClick() {
    print('onClick 호출됨');
    setState(() {
      print('setState 호출됨');
      if (_buttonState == 'OFF') {
        _buttonState = 'ON';
      } else {
        _buttonState = 'OFF';
      }
    });
  }
}

앱이 켜지고, 버튼을 누르는 상황까지를

 

print함수로 생명주기의 경로를 확인할 수 있다.

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading