BuildContext

샤워실의 바보·2023년 12월 1일
0
post-thumbnail

Flutter에서 StatelessWidgetStatefulWidget은 서로 다른 목적과 사용 방식을 가지고 있습니다.

StatelessWidget

  • StatelessWidget은 상태를 가지지 않는 위젯입니다. 이는 위젯이 생성될 때 주어진 정보에 의존하여 빌드됨을 의미합니다.
  • StatelessWidget 내부에서 정의된 메서드가 위젯 트리의 정보에 접근해야 하는 경우 (예: 테마 데이터, 미디어 쿼리 데이터 등을 읽는 경우), BuildContext를 매개변수로 전달해야 합니다.
  • 이는 BuildContext가 위젯 트리에서 현재 위젯의 위치와 관련된 정보를 가지고 있기 때문입니다.

StatefulWidget

  • StatefulWidget은 변경 가능한 상태를 가질 수 있는 위젯입니다.
  • StatefulWidget의 상태 (State 객체) 내에서 메서드를 정의할 때, 일반적으로 BuildContext를 매개변수로 넣을 필요는 없습니다.
  • 이는 State 객체가 이미 context라는 프로퍼티를 가지고 있어, 이를 통해 현재 위젯의 BuildContext에 접근할 수 있기 때문입니다.

예시

StatelessWidget에서의 메서드 사용

class MyStatelessWidget extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed: () => _showDialog(context), // 여기서 BuildContext 전달
    );
  }

  void _showDialog(BuildContext context) {
    // BuildContext 사용
  }
}

StatefulWidget에서의 메서드 사용

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

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  
  Widget build(BuildContext context) {
    return RaisedButton(
      onPressed: _showDialog, // BuildContext 전달할 필요 없음
    );
  }

  void _showDialog() {
    // 'context'를 직접 사용할 수 있음
  }
}

결론

  • StatelessWidget에서 위젯 트리에 관한 정보가 필요한 메서드를 사용할 때는 BuildContext를 매개변수로 전달해야 합니다.
  • StatefulWidgetState 내에서 정의된 메서드는 일반적으로 BuildContext를 별도로 전달할 필요가 없습니다.
profile
공부하는 개발자

0개의 댓글