我有一个按钮,该按钮可将一些数据推送到列表,另一个功能是将数据显示到页面,单击该按钮后,数据将被推送到列表,但除非按R刷新,否则它不会显示在屏幕上它。 因此,我需要一些生命周期方法或任何使其起作用的方法。
final List<TextEditingController> _controllers = [];
void onButtonPress() {
TextEditingController newController = TextEditingController();
_controllers.add(newController);
}
displayTextFields(device) {
var children = <Widget>[];
for (var i = 0; i < _controllers.length; i++) {
children.add(
TextField(
controller: _controllers[i],
),
);
}
return Column(
children: children,
);
}
...
return Stack(
children: <Widget>[
Center(
child: RaisedButton(
child: Text('Click Button '),
onPressed: onButtonPress,
),
),
displayTextFields(device),
],
);
答案 0 :(得分:1)
首先,您必须使用StatefulWidget
。我不知道您使用的是哪种类型的小部件,例如文档here。
在此之后,接下来要做的是:
List<TextEditingController> _controllers = [];
void onButtonPress() {
TextEditingController newController = TextEditingController();
_controllers.add(newController);
setState() {
_controllers = List.from(_controllers)..add(newController);
}
}
displayTextFields(device) {
var children = <Widget>[];
for (var i = 0; i < _controllers.length; i++) {
children.add(
TextField(
controller: _controllers[i],
),
);
}
return Column(
children: children,
);
}
...
return Stack(
children: <Widget>[
Center(
child: RaisedButton(
child: Text('Clicl Button'),
onPressed: onButtonPress,
),
),
displayTextFields(device),
],
);
}
答案 1 :(得分:0)
只需将您的方法更改为
displayTextFields(device) {
var children = <Widget>[];
for (var i = 0; i < _controllers.length; i++) {
children.add(
TextField(
controller: _controllers[i],
),
);
}
return Column(
children: children,
);
setState(() {
});
}
我希望这会有所帮助。