我有一个计时器控制器:
class TimerController extends GetxController {
int secondsRemaining = 5;
late Timer timer;
void startTimer() {
timer = Timer.periodic(Duration(seconds: 1), (Timer t) {
secondsRemaining--;
update();
// Check if the timer has reached 0
if (secondsRemaining <= 0) {
// Stop the timer when it reaches 0
stopTimer();
}
});
}
void stopTimer() {
timer.cancel();
}
}
字符串
然后我在PageA中初始化控制器:
class _PageAState extends State<PageA> {
TimerController timerController =
Get.put(TimerController());
}
型
然后我按到PageB:
Get.to(() => PageB());
class _PageBState extends State<PageB> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: GetBuilder<TimerController>(builder: (controller) {
if (controller.secondsRemaining == 0) {
//error here!
Get.back();
}
return Text('${controller.secondsRemaining}s',
textAlign: TextAlign.right);
}),
);
}
}
的字符串
它在调用Get.back()时崩溃,原因是在构建期间调用了FlutterError(setState()或markNeedsBuild()**。
这怎么解决?!
1条答案
按热度按时间9rnv2umw1#
在构建过程中,调用
setState()
再次调用重建是不合适的。这会导致你得到的错误。您可以使用不同的方法来调用
Get.back();
,将其从构建方法中取出,或者如果需要在该点调用它,则必须使用类似于此的方法(代码如下),该方法允许您在构建过程完成后通过WidgetsBinding.instance.addPostFrameCallback
注册Callable。字符串