dart - 每 x 秒 flutter 一次运行功能

在我的 flutter 应用程序中,我想每 10 秒检查一次我的 api。我找到了 this post每 x 时间运行一个函数并执行以下操作:

class _MainPage extends State<MainPage> {
  int starter = 0;

  void checkForNewSharedLists(){
    // do request here
    setState((){
      // change state according to result of request
    });

  }

  Widget build(BuildContext context) {
    Timer.periodic(Duration(seconds: 15), (Timer t) => checkForNewSharedLists());
  }
} 

不幸的是请求堆积:在第一“轮”重新启动应用程序后,api有两个请求,第二轮是四个请求,第三轮是八个,依此类推......

有人知道如何解决这个问题吗?

最佳答案

build() 可以而且通常会在每次创建新的 Timer.periodic 时被多次调用。

您需要将该代码移出 build() 就像

Timer? timer;

@override
void initState() {
  super.initState();
  timer = Timer.periodic(Duration(seconds: 15), (Timer t) => checkForNewSharedLists());
}

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

更好的办法是在 API 层或类似层中完全从小部件中移出此类代码,并使用 StreamBuilder 在更新数据的情况下更新 View 。

https://stackoverflow.com/questions/52569602/

相关文章:

flutter - 无状态和有状态小部件有什么区别?

dart - 自动调用 ListView 上的按钮的 Flutter onPressed(当它变得可

flutter - 有没有更好的方法来检查#flutter 中的左/右拖动?

flutter - 在 ListTile 中放置两个尾随图标

dart - flutter 垂直视口(viewport)无界高度错误

flutter - 在 Flutter 中使用 Google 登录的错误 403 受限客户端

flutter - 如何在 flutter 中完成当前 View /事件?

Flutter:多语言应用程序 - 如何覆盖语言环境?

dart - Flutter:我可以将参数传递给按钮上的 onPress 事件中定义的函数吗?

firebase - 如何从 Flutter 中的 UploadTaskSnapshot 获取完整的