我想知道在创建数据时,将数据传递给有状态小部件的最佳/最佳性能是什么.
我见过的两种风格是:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法保持的值都在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"; …Run Code Online (Sandbox Code Playgroud) 我有一个TextFormField,当我点击它以输入文本时会重新加载当前屏幕。当我点击表单域时,在重新加载整个屏幕并再次呈现所有小部件之前,会短暂显示软件键盘。我正在Android设备上运行该应用程序。
Container(
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextFormField(
validator: (value) {
if (value.isEmpty) {
return 'Your input cannot be empty';
}
},
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: RaisedButton(
onPressed: () {
if (_formKey.currentState.validate()) {
print('validated');
}
},
child: Text('Save'),
),
),
],
),
),
margin: EdgeInsets.only(top:8.0),
),
Run Code Online (Sandbox Code Playgroud) 我设法通过如下构造函数将有状态类变量的值传递给State类:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Demo',
home: MyHomePage('John', 'Morison'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage(this.fname, this.lname);
final String fname;
final String lname;
@override
_MyHomePageState createState() => _MyHomePageState(fname, lname);
}
class _MyHomePageState extends State<MyHomePage> {
_MyHomePageState(this.fname, this.lname);
final String fname;
final String lname;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('Hello $fname $lname'),
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
太奇怪了,因为有两个以上的变量,所以我不得不做很多工作。有没有更好的办法?
我有一个字符串,其中包含从以前的类传递的信息。但是我需要在状态类中使用该变量。
包含信息(字符串文本)的有状态小部件类:
class CreateLevelScreen extends StatefulWidget {
String text;
CreateLevelScreen({Key key, @required this.text}) : super(key: key);
@override
State<StatefulWidget> createState() => _CreateLevelState();
}
Run Code Online (Sandbox Code Playgroud)
状态类小部件也可以检索该信息文本。
class _CreateLevelState extends State<CreateLevelScreen> {
//need to pass text in here to use it too.
}
Run Code Online (Sandbox Code Playgroud) 我有这个 Stateful 类,我想将“数据”从 Stateful 类带到 State 类
这是我的代码:
class PlayMode extends StatefulWidget {
final Data data;
PlayMode({this.data}); // Pass this to State class
@override
State<StatefulWidget> createState() {
return new PlayModeState();
}
}
Run Code Online (Sandbox Code Playgroud)
怎样才能做到呢?