在我的 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/