반응형
질문
저는 상태가 있는 위젯을 생성하면서 데이터를 전달하는 권장 방법이 궁금합니다.
제가 본 두 가지 방법은 다음과 같습니다:
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"; // 서버 값으로 무언가를 수행합니다
return null;
}
}
이 방법은 상태가 더 이상 _ServerInfoState
에 저장되지 않고 위젯에 저장되므로 약간 역방향으로 보입니다.
이에 대한 최선의 방법은 있을까요?
답변
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")
);
}
}
반응형
댓글