Я разрабатываю приложение, которое отображает список, используя FutureBuilder
.Данные для FutureBuilder
извлекаются из ScopedModel/Model
, который, в свою очередь, извлекает данные из HTTP API.
В Model
реализован очень простой механизм кэширования, поэтому данные хранятся в List
и по умолчанию действительны в течение 30 минут.Пользователь также может принудительно выполнить обновление, нажав кнопку «перезагрузить» на панели действий приложения.
Это прекрасно работает, за исключением одной крошечной детали.Всякий раз, когда Model
извлекает данные с использованием HTTP, я хочу, чтобы кнопка «перезагрузить» показала это, превратившись в CircularProgressIndicator
.Это достаточно просто реализовать с помощью чего-то подобного в Model
:
void forceRefresh(){
this.isLoading = true;
notifyListeners();
this._items = await fetchUsingHTTP(); // This fetches the data using HTTP
this.isLoading = false;
notifyListeners();
}
В пользовательском интерфейсе я могу просто отобразить CircularProgressIndicator
или кнопку в зависимости от значения model.isLoading
.
Но - вызов notifyListeners()
вызывает перезагрузку FutureBuilder
, что, конечно, желательно после загрузки данных, но не раньше, поскольку единственное, что изменилось, это model.isLoading
,Даже если ничего не изменилось, FutureBuilder
на мгновение мигает и прокручивается до вершины при первом вызове notifyListeners()
.
Как можно предотвратить перезагрузку FutureBuilder
или ограничить первый notifyListeners()
вызов, чтобы просто уведомить кнопку перезагрузки, а не остальную часть пользовательского интерфейса?