gpt4 book ai didi

flutter 错误 : setState() called after dispose()

转载 作者:行者123 更新时间:2023-12-05 01:28:17 25 4
gpt4 key购买 nike

我编写代码每 60 秒获取一次数据并显示在屏幕上。当应用程序启动时,它会在调试控制台中显示错误。代码运行良好,每 60 秒获取一次数据并显示在屏幕上。

错误:

E/flutter ( 2021): #6 _CustomZone.bindUnaryCallbackGuarded。 ( Dart :async/zone.dart:1207:26)E/flutter ( 2021): #7 _rootRunUnary (dart:async/zone.dart:1370:13)E/flutter ( 2021): #8 _CustomZone.runUnary (dart:async/zone.dart:1265:19)E/flutter ( 2021): #9 _CustomZone.bindUnaryCallback。 ( Dart :异步/zone.dart:1191:26)E/flutter ( 2021): #10 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:395:19)E/flutter ( 2021): #11 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:426:5)E/flutter ( 2021): #12 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)E/flutter ​​(2021):E/flutter ( 2021): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常:setState() 在 dispose() 之后调用:_EvrokoVipScreenState#98462(生命周期状态:defunct,未安装)E/flutter ( 2021):如果您在 State 对象上为不再出现在小部件树中的小部件(例如,其父小部件不再在其构建中包含该小部件)调用 setState() ,则会发生此错误。当代码从计时器或动画回调调用 setState() 时,可能会发生此错误。E/flutter ( 2021 ): 首选方案是在dispose()回调中取消定时器或者停止监听动画。另一种解决方案是在调用 setState() 之前检查该对象的“mounted”属性,以确保该对象仍在树中。E/flutter ( 2021):如果调用 setState(),则此错误可能表示内存泄漏,因为另一个对象在从树中删除后保留对此 State 对象的引用。为避免内存泄漏,请考虑在 dispose() 期间中断对该对象的引用。

  void initState() {
// TODO: implement initState
super.initState();
if (mounted) {
fetchDataVip();
new Timer.periodic(Duration(seconds: 60), (Timer t) => setState(() {}));
}
}

最佳答案

我认为您应该在使用完计时器后将其处理掉。应该是这样的。

late var timer;
void initState() {
// TODO: implement initState
super.initState();
if (mounted) {
fetchDataVip();
timer = new Timer.periodic(Duration(seconds: 60), (Timer t) => setState(() {}));
}
}

@override
void dispose() {
timer.cancel();
super.dispose();
}

关于 flutter 错误 : setState() called after dispose(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68817813/

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