본문 바로가기
Flutter/Flutter FAQ

Flutter 플러터에서 왜 stateful 위젯은 두 개의 클래스로 정의되는 건가요?, Why are stateful widgets defined as two classes in flutter?

by 베타코드 2023. 12. 18.
반응형

질문


나는 플러터/다트에 새로 왔으므로 앱을 만들려고 노력하는 동안 왜 일부 사항들이 특정한지 이해하려고 노력합니다. 플러터 문서에는 다음과 같이 상태를 가지는 위젯의 예제 코드가 있습니다:

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

  @override
  _YellowBirdState createState() => new _YellowBirdState();
}

class _YellowBirdState extends State<YellowBird> {
  @override
  Widget build(BuildContext context) {
    return new Container(color: const Color(0xFFFFE306));
  }
}

질문:

  1. 왜 한 개가 아닌 두 개의 클래스로 정의되어 있는 건가요? State 클래스가 다른 곳에서 사용될 수 있으므로 분리하는 것이 더 좋았기 때문이라고 생각합니다.

  2. createState() 함수는 State 타입의 객체를 반환한다고 이해하고 있으므로, _YellowBirdState extends State가 의미가 있습니다. 그러나 왜 YellowBirdState의 제네릭 클래스에 전달되는 건가요? 제 추측으로는 YellowbirdStatefulWidget 클래스를 확장하고 있지만 정확히는 모르겠습니다.


답변


다음은 다양한 이유가 있습니다 :

  • 위젯은 불변입니다. StatefulWidgetWidget을 확장하므로 불변해야합니다. 선언을 두 개의 클래스로 분할하면 StatefulWidget이 불변하고 State가 가변적이 될 수 있습니다.

  • 위젯은 new MyWidget() 구문을 사용하여 인스턴스화됩니다. 두 개의 클래스를 하나로 병합하면 new MyWidget()은 부모가 업데이트 될 때마다 상태의 모든 속성을 재설정합니다.

class _MyStatefulState extends State<MyStateful>에 대한 설명은 다음과 같습니다.

그것은 State 클래스가 this.widget 필드를 사용하여 Stateful 부분에 액세스 할 수 있기 때문입니다. 제네릭은 그 필드를 MyStateful 유형으로 만들기 위해 사용됩니다. MyStateful 속성에 액세스하려는 경우에는 StatefulWidget만 사용하는 것보다 MyStateful 유형으로 만들기 위해 사용됩니다.

반응형

댓글