Flutter에서 StatelessWidget
과 StatefulWidget
은 서로 다른 목적과 사용 방식을 가지고 있습니다.
StatelessWidget
은 상태를 가지지 않는 위젯입니다. 이는 위젯이 생성될 때 주어진 정보에 의존하여 빌드됨을 의미합니다.StatelessWidget
내부에서 정의된 메서드가 위젯 트리의 정보에 접근해야 하는 경우 (예: 테마 데이터, 미디어 쿼리 데이터 등을 읽는 경우), BuildContext
를 매개변수로 전달해야 합니다.BuildContext
가 위젯 트리에서 현재 위젯의 위치와 관련된 정보를 가지고 있기 때문입니다.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
를 매개변수로 전달해야 합니다.StatefulWidget
의 State
내에서 정의된 메서드는 일반적으로 BuildContext
를 별도로 전달할 필요가 없습니다.