在我的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的请求,第二个回合是四个请求,第三个回合是八个,依此类推…
有人知道如何解决此问题吗?
build()通常,每次Timer.periodic创建新函数时,都可以调用一次以上。
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在数据更新的情况下使用来更新视图。
StreamBuilder