flutter - 在 Flutter 中将数据传递给有状态的小部件

我想知道在创建状态小部件时将数据传递给有状态小部件的推荐方法是什么。

我见过的两种风格是:

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 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")
    );
  }
}

https://stackoverflow.com/questions/50818770/

相关文章:

dart - 无状态小部件类中的键是什么?

flutter - 如何关闭屏幕键盘?

flutter - 未配置 Dart SDK

flutter - 如何在 flutter 中更改包名称?

flutter - 如何使按钮宽度与父级匹配?

flutter - 你如何从 Dart 代码中检测宿主平台?

flutter - 如何禁用 Flutter 中的按钮?

flutter - 如何在 Flutter 中制作圆角图像

Flutter - 在溢出时换行,例如插入省略号或淡入淡出

flutter - 如何处理不需要的小部件构建?