development

상태 저장 위젯에 데이터 전달

big-blog 2020. 12. 7. 20:10
반응형

상태 저장 위젯에 데이터 전달


데이터를 생성하는 동안 상태 저장 위젯에 데이터를 전달하는 권장 방법이 무엇인지 궁금합니다.

내가 본 두 가지 스타일은 다음과 같습니다.

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"; // Do something we the server value
      return null;
    }
}

상태가 더 이상 저장 _ServerInfoSate되지 않고 대신 위젯에 저장되므로 약간 거꾸로 보입니다 .

이에 대한 모범 사례가 있습니까?


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

생성자를 편집 할뿐만 아니라 많은 수작업이 필요합니다. 아무것도 가져 오지 않습니다. 의 모든 필드를 복제 할 이유가 없습니다 Widget.

편집하다 :

여기에 예가 있습니다.

class MyStateful extends StatefulWidget {
  final String foo;

  const MyStateful({Key key, this.foo}): super(key: key);

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

class _MyStatefulState extends State<MyStateful> {
  @override
  Widget build(BuildContext context) {
    return Text(widget.foo);
  }
}

Another answer, building on @RémiRousselet's anwser and for @user6638204's question, if you want to pass initial values and still be able to update them in the state later:

class MyStateful extends StatefulWidget {
  final String foo;

  const MyStateful({Key key, this.foo}): super(key: key);

  @override
  _MyStatefulState createState() => _MyStatefulState(foo: this.foo);
}

class _MyStatefulState extends State<MyStateful> {
  String foo;

  _MyStatefulState({this.foo});

  @override
  Widget build(BuildContext context) {
    return Text(foo);
  }
}

참고URL : https://stackoverflow.com/questions/50818770/passing-data-to-a-stateful-widget

반응형