我想知道在创建数据时,将数据传递给有状态小部件的最佳/最佳性能是什么.
我见过的两种风格是:
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) 我试图熟悉颤动,并且遇到了一些奇怪的情况。我想建立一个动态ListView的+按钮可以添加元素的地方。我编写了以下状态代码:
class MyWidgetListState extends State<MyWidgetList> {
List<Widget> _objectList = <Widget>[
new Text('test'),
new Text('test')
];
void _addOne() {
setState(() {
_objectList.add(new Text('test'));
});
}
void _removeOne() {
setState(() {
_objectList.removeLast();
});
}
@override
Widget build(BuildContext context) {
return new Column(
children: <Widget>[
new ListView(
shrinkWrap: true,
children: _objectList
),
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new IconButton(
icon: new Icon(Icons.remove_circle),
iconSize: 36.0,
tooltip: 'Remove',
onPressed: _objectList.length > 2 ? _removeOne : null,
),
new IconButton(
icon: …Run Code Online (Sandbox Code Playgroud) 我想从 a 列表中删除一个项目ListView.builder,但它说它是只读的。
List<Map> entries = [{'date': '2019-08-10', 'data': 85.0}, {'date': '2019-08-14', 'data': 84.0}];
onPressed: () {
removeItem(index);
}
void removeItem(index) {
entries.removeAt(index);
}
Run Code Online (Sandbox Code Playgroud)
Another exception was thrown: Unsupported operation: read-only
这也不起作用:
onPressed: () {
removeItem(date);
}
void removeItem(date) {
entries.removeWhere((item) => item['date'] == date);
}
Run Code Online (Sandbox Code Playgroud)