본문 바로가기
Flutter/Flutter FAQ

flutter 플러터에서 상태를 가지는 위젯에 데이터 전달하기, Passing Data to a Stateful Widget in Flutter

by 베타코드 2023. 5. 9.
반응형

질문


저는 상태가 있는 위젯을 생성하면서 데이터를 전달하는 권장 방법이 궁금합니다.

제가 본 두 가지 방법은 다음과 같습니다:

class ServerInfo extends StatefulWidget {

  Server _server;

  ServerInfo(Server server) {
    this._server = server;
  }

  @override
    State<StatefulWidget> createState() => new _ServerInfoState(_server);
}

class _ServerInfoState extends State<ServerInfo> {
  Server _server;

  _ServerInfoState(Server server) {
    this._server = server;
  }
}

이 방법은 ServerInfo_ServerInfoState 모두에 값을 유지하므로 약간 낭비되는 것 같습니다.

다른 방법은 widget._server를 사용하는 것입니다:

class ServerInfo extends StatefulWidget {

  Server _server;

  ServerInfo(Server server) {
    this._server = server;
  }

  @override
    State<StatefulWidget> createState() => new _ServerInfoState();
}

class _ServerInfoState extends State<ServerInfo> {
  @override
    Widget build(BuildContext context) {
      widget._server = "10"; // 서버 값으로 무언가를 수행합니다
      return null;
    }
}

이 방법은 상태가 더 이상 _ServerInfoState에 저장되지 않고 위젯에 저장되므로 약간 역방향으로 보입니다.

이에 대한 최선의 방법은 있을까요?


답변


State의 생성자에 매개 변수를 전달하지 마십시오. this.widget.myField를 사용하여 매개 변수에만 액세스해야합니다.

생성자를 편집하는 것만으로 수동 작업이 많이 필요하며 아무것도 가져오지 않습니다. Widget의 모든 필드를 복제할 이유가 없습니다.

편집 :

다음은 예입니다:

class ServerIpText extends StatefulWidget {
  final String serverIP;

  const ServerIpText ({ Key? key, this.serverIP }): super(key: key);

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

class _ServerIpTextState extends State<ServerIpText> {
  @override
  Widget build(BuildContext context) {
    return Text(widget.serverIP);
  }
}

class AnotherClass extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: ServerIpText(serverIP: "127.0.0.1")
    );
  }
}
반응형

댓글