我想知道在创建数据时,将数据传递给有状态小部件的最佳/最佳性能是什么.
我见过的两种风格是:
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访问它们.
您应该只使用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); } }