【问题标题】:Optimize multiple http calls in each item in listview Flutter优化listview Flutter中每个item的多个http调用
【发布时间】:2020-11-24 16:56:15
【问题描述】:

我在颤振中有一个无限的列表视图,该列表中的每个项目都需要进行 http 调用以从服务器获取一些数据。我想在用户滚动时优化呼叫我想防止项目进行 http 呼叫。 任何想法都可以做到这一点

【问题讨论】:

    标签: performance flutter dart


    【解决方案1】:

    大多数移动应用程序都使用的一个很好的解决方案是根据滚动来获取您的单元格。最初,您可以加载例如 20 个单元格,当用户到达列表末尾时,再次调用以加载 20 个更多单元格。 您可以像这样处理用户的滚动:

    var scrollController = ScrollController();
    scrollController.addListener(scrollListener);
    
    double maxScroll = listScrollController.position.maxScrollExtent;
    double currentScroll = listScrollController.position.pixels;
    if (maxScroll == currentScroll) {
       // fetch more cells
    }
    

    【讨论】:

    • 我已经使用它来获取数据,但问题是我想对每个项目进行 http 调用以获取其他数据
    • 你能给我一个你真正想做的例子吗?
    • 我有包含每篇文章的文章列表,将调用 http 以获取促销,他们希望仅在列表不滚动时获得促销
    【解决方案2】:

    两种优化方式可能是:

    1. ListView.builder():使用builder来懒惰地构建项目。这可用于避免在开始时进行大量 http 调用(项目是在用户滚动时构建的)。
    2. 缓存:根据您的需要在持续时间内缓存 http 调用。

    【讨论】:

    • 感谢您的回答,但已经在使用构建器并将数据存储在数据库中,他们希望我在滚动列表和用户停止滚动时避免调用,项目进行 http 调用
    • @Lionel dali,告诉我我是否正确,说when user stop scrolling, item make http call 你的意思是说你只想对那些滚动的项目进行 http 调用,并且目前在列表?
    • @Lioneldali,在这种情况下,我的另一个 SO answer 可能就是你想要的
    【解决方案3】:

    我没有找到解决问题的方法。 我使用了库 visibility_detector (https://pub.dev/packages/visibility_detector) 在每个项目中,如果项目仍然可见,我会等待 2 秒,如果没有,我会进行 http 调用,我什么也不做

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2013-02-01
      • 1970-01-01
      • 2019-11-16
      • 2020-08-31
      • 2021-02-19
      • 2011-03-31
      相关资源
      最近更新 更多