Flutter setState()在statefulWidget类中无法识别
请注意,我正在获取的setState未在StatefulWidget DataItem中使用上述设置进行定义,但我希望根据所附的屏幕截图执行以下操作。按下按钮后,我需要相应地更新标签。setState在类状态中,而不是在StatefulWidget类中,您可以执行以下操作:Flutter setState()在statefulWidget类中无法识别,flutter,Flutter,请注意,我正在获取的setState未在StatefulWidget DataItem中使用上述设置进行定义,但我希望根据所附的屏幕截图执行以下操作。按下按钮后,我需要相应地更新标签。setState在类状态中,而不是在StatefulWidget类中,您可以执行以下操作: class DataItem extends StatefulWidget { @override String number; void setNumber(String nu){ setState(
class DataItem extends StatefulWidget {
@override
String number;
void setNumber(String nu){
setState(() {
this.number=nu;
});
}
_DataItemState createState() => new _DataItemState(this.number);
}
class _DataItemState extends State<DataItem> {
@override
String number;
_DataItemState(this.number);
Widget build(BuildContext context) {
return new Container(
child: Text(
number,
style: TextStyle(...),
);
}
}
这将在每次单击时递增计数器。下面是一种导出函数的方法,该函数将更改状态 这是一个简单的反例,但您应该能够使用它执行更复杂的状态更改 首先,setState仅用于StatefulWidget的state类 第二,对于通过构造函数接收的值,不需要使用setState,只需将其传递给小部件即可 请尝试以下代码:
class _MyHomePageState extends State<MyHomePage> {
int counter = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
counter.toString(),
),
RaisedButton(
onPressed: (){
setState(() {
counter++;
});
},
child: Text(
'Button',
style: TextStyle(fontSize: 20)
),
),
],
),
),
);
}
}
谢谢你的回复。但是我需要的是一个按钮来更新所有的TextWidget,而不是每个TextWidget。
class DataItem extends StatefulWidget {
final String number;
const DataItem(this.number) : assert(number != null);
_DataItemState createState() => _DataItemState();
}
class _DataItemState extends State<DataItem> {
Widget build(BuildContext context) {
return Container(
child: Text(
widget.number,
style: TextStyle(...),
)
);
}
}
class DataItem extends StatelessWIdget {
final String number;
const DataItem(this.number) : assert(number != null);
Widget build(BuildContext context) {
return Container(
child: Text(
number,
style: TextStyle(...),
)
);
}
}