作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用计时器和以下代码创建了运行时钟:
class LiveClock extends StatefulWidget {
@override
_LiveClockState createState() => _LiveClockState();
}
class _LiveClockState extends State<LiveClock> {
String _timeString;
String _dateString;
Timer _timerClock;
String _formatTime(DateTime dateTime) => DateFormat.Hms().format(dateTime);
String _formatDate(DateTime dateTime) =>
DateFormat.yMMMMEEEEd(appConfig.indonesiaLocale).format(dateTime);
@override
void initState() {
super.initState();
_timeString = _formatTime(DateTime.now());
_dateString = _formatDate(DateTime.now());
_timerClock = Timer.periodic(Duration(seconds: 1), _getTime);
}
@override
void dispose() {
_timerClock.cancel();
super.dispose();
}
void _getTime(Timer timer) {
final DateTime now = DateTime.now();
final String formattedTime = _formatTime(now);
setState(() => _timeString = formattedTime);
}
@override
Widget build(BuildContext context) {
print('This Rebuild');
return Text(
'$_dateString $_timeString ',
textAlign: TextAlign.center,
);
}
}
But the problem is , if i navigate to another screen , the timer still running although i have dispose the timer.
我犯了错误还是计时器的行为?
最佳答案
在 flutter 中,当 widget 从父树中完全删除时,会调用 dispose。
在 flutter 中使用路线(导航)时。
使用推送导航,可以在当前屏幕的顶部添加一个新屏幕。因此(旧屏幕的)树没有完全销毁,因此不会调用 dispose。
使用流行音乐。屏幕被移除,树也被移除。因此调用 dispose。
希望这有帮助
关于 flutter : Cancel Timer In Dispose Not Working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60474260/
我是一名优秀的程序员,十分优秀!