切换页面时 Flutter 计时器会重置
Flutter timer resets when switching page
在我的 flutter 应用程序中有一个计时器和一个设置页面。当计时器为运行并且我切换到设置页面(通过使用PageView)时,计时器被重置或出现错误(未处理的异常:setState()在dispose()之后调用)
发生这种情况是因为我使用 setState 来减少时间。
if (!mounted) return;
setState(() {
final seconds = duration.inSeconds - 1;
if (seconds < 0) {
isWork = !isWork;
reset(autostartSession);
} else {
duration = Duration(seconds: seconds);
}
});
}
如果我关闭屏幕,计时器仍然保持 运行。
谁能告诉我如何在不重置计时器或不出错的情况下切换页面?
顺便说一句,我自己创建了计时器,没有使用包。
Widget buildTimer() {
String twoDigits(int n) => n.toString().padLeft(2, '0');
final minutes = twoDigits(duration.inMinutes.remainder(60));
final seconds = twoDigits(duration.inSeconds.remainder(60));
return Text('$minutes:$seconds', style: const TextStyle(fontSize: 80));
}
尝试像这样导航到您的设置页面,这样它下面的屏幕就不会死掉。
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondPage(),
));
在我的 flutter 应用程序中有一个计时器和一个设置页面。当计时器为运行并且我切换到设置页面(通过使用PageView)时,计时器被重置或出现错误(未处理的异常:setState()在dispose()之后调用) 发生这种情况是因为我使用 setState 来减少时间。
if (!mounted) return;
setState(() {
final seconds = duration.inSeconds - 1;
if (seconds < 0) {
isWork = !isWork;
reset(autostartSession);
} else {
duration = Duration(seconds: seconds);
}
});
}
如果我关闭屏幕,计时器仍然保持 运行。 谁能告诉我如何在不重置计时器或不出错的情况下切换页面?
顺便说一句,我自己创建了计时器,没有使用包。
Widget buildTimer() {
String twoDigits(int n) => n.toString().padLeft(2, '0');
final minutes = twoDigits(duration.inMinutes.remainder(60));
final seconds = twoDigits(duration.inSeconds.remainder(60));
return Text('$minutes:$seconds', style: const TextStyle(fontSize: 80));
}
尝试像这样导航到您的设置页面,这样它下面的屏幕就不会死掉。
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondPage(),
));