当前位置: 首页 > news >正文

Jetpack Compose 中使用分页 API 调用的无限滚动

Jetpack Compose 中使用分页 API 调用的无限滚动

effect
最近,我在DashCoin 的硬币屏幕上添加了一个带有分页 API 调用的无限滚动。它使浏览硬币列表变得非常困难,并且确实减少了初始加载时间,比以前少了。如果没有正确实施,实施无限滚动可能会很棘手。它可以轻松触发重新压缩并导致无限的 API 调用。这是我实现它的方式:

设置分页 API 调用并处理 UI 状态

您的 API 调用应该具有三种状态。加载、成功、错误

在加载状态
你想更新你的屏幕加载状态
ui-state
成功状态

  • 将您的 Loading 状态设置回 false。
  • 将响应中的新列表附加到旧列表。
  • 设置新的分页键。
  • 你想确定响应是否返回一个空列表,这意味着你到达了文件的末尾,这意味着你不需要继续向服务器发送请求。
    screenState
    错误状态
  • 将您的加载状态设置回 false
  • 更新你的错误值

screenState

分页数据处理

现在我们已经处理了屏幕状态,我们可以创建 Infinite Scroll Handler Composable
它需要一个,

  • 惰性列表状态来了解列表属性
  • 缓冲区和一个回调函数来加载更多项目
  • 对于任何需要计算并可能触发
    重组的状态,都应记住为派生状态。

看到这里,我们从惰性列表状态获取总项目数和最后一个项目索引,并比较最后一个项目可见索引是否大于总项目数减去缓冲区,这意味着我们到达了列表的末尾。

现在我们在我们记住的状态上启动 LaunchedEffect 并通过 SnapshotFlow 收集状态值以触发我们的回调函数。

infiniteState
如果您的列表立即加载,请确保执行以下操作

  • 确保您有两个独立的函数,getItemsFirstLoad()和getItemsPaginated()。
  • 第一次加载时将调用getItemsFirstLoad()并检查项目列表在第一次加载时是否为空。
  • 每次滚动到列表末尾以加载更多项目时都会调用getItemsPaginated() ,它会检查您是否没有到达响应列表的末尾并且列表不为空。

列表实现
现在你的列表应该是这样的
无限滚动效果

项目源码

项目参考地址:

https://github.com/MathRoda/DashCoin

http://www.lryc.cn/news/62369.html

相关文章:

  • 第5章 数据结构之“链表”
  • SpringMVC - REST风格介绍已经RESTful简化开发
  • Android 10.0 user模式下解除系统进入recovery功能的限制
  • 用这些 JavaScript 试题来提高你的编程技能
  • 倾斜摄影超大场景的三维模型在网络发布应用遇到常见的问题浅析
  • 基于遗传算法的梯级水电站群优化调度研究(Matlab代码实现)
  • java每日问题
  • C++设计模式之 依赖注入模式探索
  • 如何实现Spring AOP以及Spring AOP的实现原理
  • 数学建模——数据预处理
  • 第8章:树
  • Java基础学习(10)
  • Tomcat多实例部署实验
  • 无良公司把我从上家挖过来,白嫖了六个月,临近试用期结束才说不合适,催我赶紧找下家!...
  • 忙碌中也要记得休息,这两款好玩的游戏推荐给你
  • 四种方法可以实现判断字符串包含某个字符
  • ubuntu进程相关command
  • 7.参数校验
  • nginx简单介绍
  • 美创科技首届渠道高峰论坛| 两大分论坛亮点汇聚
  • QML中【预计符号】和【Unknown Component M300】的红色警告解决方法
  • 聊聊「低代码」的实践之路
  • (一)服务发现组件 Eureka
  • 学会笔记本电脑录屏快捷键,轻松实现录屏!
  • ( “树” 之 Trie) 208. 实现 Trie (前缀树) ——【Leetcode每日一题】
  • 算法训练Day40:343. 整数拆分 96.不同的二叉搜索树
  • 设计模式及代码
  • 9.java程序员必知必会类库之加密库
  • C技能树:for循环:九九乘法表
  • Win10老是蓝屏收集错误信息重启无效怎么办?