gpt4 book ai didi

flutter : Cancel Timer In Dispose Not Working

转载 作者:行者123 更新时间:2023-12-03 02:55:34 24 4
gpt4 key购买 nike

我已经使用计时器和以下代码创建了运行时钟:

源代码


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.

enter image description here

我犯了错误还是计时器的行为?

最佳答案

在 flutter 中,当 widget 从父树中完全删除时,会调用 dispose。

在 flutter 中使用路线(导航)时。

  • 使用推送导航,可以在当前屏幕的顶部添加一个新屏幕。因此(旧屏幕的)树没有完全销毁,因此不会调用 dispose。

  • 使用流行音乐。屏幕被移除,树也被移除。因此调用 dispose。

  • 使用推送替换。新屏幕替换旧屏幕并删除小部件树。所以调用了 dispose。

希望这有帮助

关于 flutter : Cancel Timer In Dispose Not Working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60474260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com