我想知道在创建时将数据传递给有状态小部件的推荐方法是什么。
我见过的两种风格是:
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,看起来有点浪费。
ServerInfo
_ServerInfoState
另一种方法是使用widget._server:
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,而是在小部件中。
_ServerInfoSate
对此有最佳做法吗?
不要将参数传递给State使用它的构造函数。您应该只使用 访问参数this.widget.myField。
State
this.widget.myField
不仅编辑构造函数需要大量的手工工作;它不会带来任何东西。没有理由复制Widget.
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") ); } }