Flutter Stateful Life Cycle

개발렬·2025년 2월 23일

Flutter

목록 보기
6/10

State

State는 위젯이 유지해야 하는 변경 가능한 데이터입니다. Flutter에서는 위젯이 상태를 갖는 방식에 따라 두 가지 유형으로 나뉩니다.

  1. StatelessWidget: 상태를 가지지 않는 위젯

  2. StatefulWidget: 상태를 가질 수 있는 위젯

StatelessWidget

내부적으로 변경 가능한 상태가 없는 위젯입니다. 즉, 화면에 고정된 UI를 렌더링할 때 사용합니다.

class MyStatelessWidget extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Text("Hello, Flutter!");
  }
}

StatefulWidget

부 상태가 변경될 수 있는 위젯입니다. 상태를 변경할 때 setState를 호출하여 UI를 다시 그릴 수 있습니다.

class MyStatefulWidget extends StatefulWidget {
  
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('Counter: $_counter'),
        ElevatedButton(
          onPressed: _incrementCounter,
          child: Text("Increment"),
        ),
      ],
    );
  }
}

위 예제에서 _counter 변수를 setState로 업데이트하면서 UI가 변경됩니다.

StatefulWidget 생명주기 단계

1) createState()

State 객체를 생성합니다.

2) initState()

위젯이 생성될 때 한 번만 호출됩니다.

초기 상태를 설정하는 데 사용됩니다.

3) didChangeDependencies()

InheritedWidget과 같은 외부 종속성이 변경될 때 호출됩니다.

예: MediaQuery.of(context) 또는 Theme.of(context) 값이 변경될 경우.

initState에서는 context를 안전하게 사용할 수 없는 경우가 있기 때문에 didChangeDependencies에서 접근하는 것이 일반적입니다.

4) build()

UI를 그리는 함수로, 상태가 변경될 때마다 호출됩니다.

5) didUpdateWidget()

부모 위젯이 이 위젯을 다시 빌드할 때 호출됩니다.

새로운 위젯과 기존 위젯을 비교하여 필요하면 상태를 업데이트할 수 있습니다.

6) deactivate()

위젯이 위젯 트리에서 제거될 때 호출됩니다.

7) dispose()

위젯이 완전히 제거될 때 호출됩니다.

리소스를 정리하는 데 사용됩니다 (예: 컨트롤러 해제, 리스너 제거 등).

profile
Flutter

0개의 댓글