从ScopedModel调用notifyListeners()而不触发FutureBuilder重新加载

时间:2019-02-13 18:49:18

标签: dart flutter future flutter-layout

我正在开发一个使用FutureBuilder显示列表的应用。从FutureBuilder检索ScopedModel/Model的数据,而Model则从HTTP API检索数据。

我在List中实现了一种非常简单的缓存机制,因此数据存储在Model中,默认情况下有效30分钟。用户还可以通过按下应用程序操作栏中的“重新加载”按钮来强制刷新。

除了一个微小的细节之外,这都可以正常工作。每当CircularProgressIndicator使用HTTP提取数据时,我都希望“重新加载”按钮通过变成Model来表明这一点。这很简单,可以在void forceRefresh(){ this.isLoading = true; notifyListeners(); this._items = await fetchUsingHTTP(); // This fetches the data using HTTP this.isLoading = false; notifyListeners(); } 中用类似的方法实现:

CircularProgressIndicator

然后,在UI中,根据model.isLoading的值,我可以简单地显示一个notifyListeners()或一个按钮。

但是-调用FutureBuilder会导致model.isLoading重新加载,这当然是在加载数据之后才需要的,但是在重新加载之前并不需要,因为FutureBuilder。即使没有任何变化,notifyListeners()仍会闪烁片刻,并在第一个FutureBuilder调用中滚动到顶部。

如何防止重新加载notifyListeners(),或限制第一个{{1}}调用仅通知重新加载按钮而不通知UI的其余部分?

0 个答案:

没有答案