[英]Update widget every 5 seconds
我需要使用 Flutter 制作小部件,例如“N 个用户现在观看它”,其中 N 来自后端,如果小部件可见,我需要每 5 秒更新一次。
我尝试了一些使用Future.delayed
和Timer
的方法,如下所示:
_timer = Timer(
const Duration(seconds: 5),
() {
if (isCounterVisible) {
// load data
}
},
);
@override
void dispose() async {
if (_timer != null) {
_timer!.cancel();
_timer = null;
}
}
但是面临一个问题,在我离开这个屏幕后请求仍然发送,并且单元测试失败,原因A Timer is still pending even after the widget tree was disposed
此外,我在确定小部件是否可见时遇到问题。 我使用了库visibility_detector
但似乎它不适用于模态窗口 - 当模态窗口显示时侦听器不会触发。
Timer.periodic
将完成这项工作,您也可以使用可取消的未来。 你错过了super.dispose();
.
Timer? timer;
void initTimer() {
if (timer != null && timer!.isActive) return;
timer = Timer.periodic(const Duration(seconds: 5), (timer) {
//job
setState(() {});
});
}
@override
void dispose() {
timer?.cancel();
super.dispose();
}
现在使用initTimer()
来启动woker。
您可以使用包裹在 Timer.periodic 周围的 RiverPod StreamProvider.autoDispose 来定期唤醒 Consumer Widget。 当不再引用时,它会自动消失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.