我正在开发一个使用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的其余部分?