Flutter でステートフルウィジェットにデータを渡す 質問する

Flutter でステートフルウィジェットにデータを渡す 質問する

ステートフル ウィジェットを作成するときに、データを渡すための推奨される方法は何でしょうか。

私が見た 2 つのスタイルは次のとおりです。

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ではなくウィジェットに保存されるので、これは少し逆のように思えます。

これに関するベストプラクティスはありますか?

ベストアンサー1

コンストラクターを使用して にパラメータを渡さないでください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")
    );
  }
}

おすすめ記事