一尘不染

每x秒扑动运行功能

flutter

在我的flutter应用程序内部,我想每10秒检查一次api。我发现这篇文章每隔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的请求,第二个回合是四个请求,第三个回合是八个,依此类推…

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


阅读 288

收藏
2020-08-13

共1个答案

一尘不染

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在数据更新的情况下使用来更新视图。

2020-08-13