我正在尝试在按下按钮时发生一系列事件:
但是似乎onPressed函数仅允许一个setState()更新视图,因为问题在于按钮文本永远不会改变。
这是按钮小部件:
new RaisedButton(
child: Text(_calculating ? "Stop" : "Start"),
onPressed: () {
if (_calculating) {
_setCalculating(false);
// stop calculating
} else {
_setCalculating(true);
_doCalc();
}
},
),
以下是回调:
void _doCalc() {
setState(() {
sleep(const Duration(seconds:1));
// Do some calculation and display the result ...
_setCalculating(false);
});
}
void _setCalculating(bool calculating) {
setState(() {
_calculating = calculating;
print ("Setting state: " + calculating.toString());
});
}
计算正在显示,但是在计算过程中按钮文本永远不会变为“停止”(请注意睡眠1秒钟)。但是print语句正在打印,所以我知道_setCalculating被按预期方式调用。
每按一次按钮是否只能进行一次更新,或者还有另一种解决方法?
答案 0 :(得分:3)
比您想象的简单
class Main extends StatefulWidget {
@override
MainState createState() {
return new MainState();
}
}
class MainState extends State<Main> {
bool _calculating = false;
void _doCalc() async {
_setCalculating(true);
await Future.delayed(const Duration(seconds: 2));
_setCalculating(false);
}
void _setCalculating(bool calculating) {
setState(() {
_calculating = calculating;
print("Setting state: " + calculating.toString());
});
}
@override
Widget build(BuildContext context) {
return new RaisedButton(
child: Text(_calculating ? "Stop" : "Start"),
onPressed: _doCalc,
);
}
}
您两次致电setState
。