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(...),
);
}
}
请注意,我在StatefulWidget(DataItem)中未使用上述设置定义setState(),但是根据所附的屏幕截图,我要执行的操作如下。按下按钮后,我需要相应地更新标签。
答案 0 :(得分:1)
这是一种导出将改变状态的函数的方法。
这是一个简单的反例,但是您应该可以执行更复杂的状态更改。
答案 1 :(得分:0)
setState
位于类State
内,而不是StatefulWidget
类内,您可以执行以下操作:
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)
),
),
],
),
),
);
}
}
这将使每次点击增加counter
答案 2 :(得分:0)
首先setState
仅在StatefulWidget
的状态类中使用。
第二位,对于通过构造函数接收的值,您无需使用setState
,只需将其传递到小部件即可。
尝试以下代码:
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(...),
)
);
}
}
如果您不打算更改number
属性,则可以使用StatelessWidget
:
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(...),
)
);
}
}