我想知道在创建数据时将数据传递到有状态的小部件的推荐方法是什么。
我见过的两种样式是:
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") ); } }