【发布时间】:2020-06-07 06:29:07
【问题描述】:
这是一个显示倒计时的简单颤振小部件:-
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
MyTimer(
count: 25,
),
RaisedButton(
onPressed: () {
setState(() {});
},
)
],
);
}
}
class MyTimer extends StatefulWidget {
final int count;
MyTimer({this.count});
@override
_MyTimerState createState() => _MyTimerState(count: this.count);
}
class _MyTimerState extends State<MyTimer> {
final int count;
Timer _timer;
int _start;
_MyTimerState({this.count});
@override
void initState() {
_start = this.count;
const oneSec = const Duration(seconds: 1);
_timer = Timer.periodic(
oneSec,
(Timer timer) => setState(
() {
if (_start < 1) {
_timer.cancel();
} else {
_start = _start - 1;
}
},
),
);
}
@override
Widget build(BuildContext context) {
return Text(this._start.toString());
}
}
当我按下父级上的button 时,它将setState() 并重建父级,这将导致MyTimer 小部件再次构建并因此将计时器再次重置为25。
这就是我的想法,但是按下按钮并在父级上设置状态不会重建MyTimer 小部件?
这种行为的原因是什么?
编辑:您可以在DartPad 中通过使用颤振创建新的pad 来尝试此代码。
【问题讨论】:
标签: flutter timer widget state