dart flutter

dart - Pasando datos a un widget de estado



flutter (2)

Me pregunto cuál es la forma recomendada de pasar datos a un widget con estado, mientras lo crea,.

Los dos estilos que he visto son:

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

Este método mantiene un valor tanto en ServerInfo como en _ServerInfoState , lo que parece un poco inútil.

El otro método es usar 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; } }

Esto parece un poco hacia atrás ya que el estado ya no se almacena en _ServerInfoSate sino en el widget.

¿Hay una mejor práctica para esto?


No pase parámetros al State usando su constructor. Solo debes acceder a estos usando this.widget.myField .

No solo editar el constructor requiere mucho trabajo manual; no trae nada No hay razón para duplicar todos los campos de Widget .

EDITAR:

Aquí un ejemplo

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


Otra respuesta, basándose en la respuesta de @RémiRousselet y en la pregunta de @ user6638204, si desea pasar valores iniciales y aún así poder actualizarlos en el estado más adelante:

class MyStateful extends StatefulWidget { final String foo; const MyStateful({Key key, this.foo}): super(key: key); @override _MyStatefulState createState() => _MyStatefulState(foo: this.foo); } class _MyStatefulState extends State<MyStateful> { String foo; _MyStatefulState({this.foo}); @override Widget build(BuildContext context) { return Text(foo); } }