繁体   English   中英

每 5 秒更新一次小部件

[英]Update widget every 5 seconds

我需要使用 Flutter 制作小部件,例如“N 个用户现在观看它”,其中 N 来自后端,如果小部件可见,我需要每 5 秒更新一次。

我尝试了一些使用Future.delayedTimer的方法,如下所示:

            _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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM