首页 > 解决方案 > Flutter-如何不一遍又一遍地调用同一个服务?

问题描述

假设我的目标是向用户显示推荐项目的“无尽”列表。

为此,我实现了一些非常昂贵的异步方法 getItemsFromServer(...)(在服务器使用、时间、电池等方面),并从服务器获取 100 个新项目(及其图像),并更新通过添加从服务器获取的项目来显示推荐项目屏幕的状态。

我的目标是仅当用户拥有少于 20 个他尚未查看的项目时才调用此函数。问题是,如果我天真地编程,例如

if(itemsNotViewed<20){
getItemsFromServer(...)
}

在用户点击或查看了一些新项目后,这个异步方法将被调用大约 20 次...... 最原则的方法是只调用一次方法并等待它完成,同时不干扰用户体验?

标签: flutterasync-awaitflutter-web

解决方案


未来对象本身对于记住某事是否正在发生非常有用。像这样的东西应该工作。理想情况下,您会将其放入从多个位置调用的函数中。

class MyState ... {

  Future itemsBeingGotten;


  build() {
    ...
      onPress: () async {
        if (itemsBeingGotten == null && itemsNotViewed < 20) {
          try {
            itemsBeingGotten = getItemsFromServer()
            await itemsBeingGotten; 
          } finally {
            itemsBeingGotten = null;
          }
        }
      }
  }





推荐阅读