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

news2024/11/25 2:47:27

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.coloradmin.cn/o/456826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基数排序详解

本期内容是对之前排序内容的一部分补充,需要有一定的基础 (14条消息) 万字解析,带你深入掌握多种排序算法!-C语言-CSDN博客 基数排序 基数排序(Radix Sorting)是和前面所述各类排序方法完全不相同的一种排序方法。从…

【C++】面试官:你小子,继承与多态的题你都会

文章目录 前言一、理论知识类二、编程题选择类 前言 上一篇文章我们详细了介绍了多态,用汇编一步一步的查看了多态的实现原理,讲解了这么多理论知识该做一些面试题了,这些面试题都是历年来大厂所出的笔试题,希望大家可以把我今天…

php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)

php加密解密的使用 一、项目说明二、项目分析1.js外部文件2.HTML容器构建3.layui前端验证4.php后端验证封装函数密码验证规则strpos内置函数 三、经典的核心加密函数1.Discuz!开发之核心加密解密函数2.常用简单加密解密函数 一、项目说明 在开发大屏时,需要在前端输…

【Linux】4、Linux 的用户、用户组和权限等

目录 一、Linux 的 root 用户二、切换用户相关命令(1) su(2) sudo 三、用户和用户组(1) 用户组命令(2) 用户相关命令(3) 查看当前系统中有哪些用户和用户组 四、认识权限控制信息(1) 权限控制信息分析(2) chmod 命令(3) 权限的数字序号(4) chown 命令 一、Linux 的 root 用户 …

【Android入门到项目实战-- 6.2】—— 如何访问其他应用程序的数据?

目录 一、ContentResolver基本用法 如何查询? 如何向表中添加一条数据? 如何更新这条新添加的数据? 如何删除这条数据? 二、读取系统联系人 要想你的APP访问其他应用程序的数据,需要使用内容提供器,下面使…

Springboot结合线程池的使用

1.使用配置文件配置线程的参数 配置文件 thread-pool:core-size: 100max-size: 100keep-alive-seconds: 60queue-capacity: 1配置类 Component ConfigurationProperties("thread-pool") Data public class ThreadPoolConfig {private int coreSize;private int ma…

数据结构与算法(三):数论(树形结构、二叉树、二叉搜索树、红黑树、Btree、B+Tree、赫夫曼树、堆树)

数论(树形结构、二叉树、二叉搜索树、红黑树、Btree、BTree、赫夫曼树、堆树) 树形结构概念 在树形结构里面重要的术语: 结点:树里面的元素。 父子关系:结点之间相连的边 子树:当结点大于1时&#xff0…

19学习提升:gRPC源码中的那些优秀设计(上)

gRPC作为高性能的RPC框架,离不开它优雅的设计和编码,无论是作为一名底层开发者还是上层的业务开发者,能够写出一手好的代码一直都是决定自身水平高低的一个重要体现,如果想要达到一个较高层次的水平,离不开长时间的学习和训练以及不断的感悟,而一些优秀的开源软件和框架往…

Idea 配置 maven 离线使用

首先,项目中的依赖已经下载到本地仓库,在没有网络或者没办法连通公司的maven仓库时,需要配置离线使用。 1. 配置 setting.xml 在 maven 使用的 setting.xml 文件中,加入以下配置。 默认在 maven安装目录下的 conf 文件夹下 。 &…

Web安全 XSS靶场搭建(玩转整个XSS环境.)

Web安全 XSS靶场搭建 XSS又叫CSS(Cross Site Script)跨站脚本攻击,指的是攻击者在Web页面,插入恶意JS代码,当用户浏览该页之时,嵌入其中JS代码就会被执行,从而达到攻击的目的.(包含&…

美颜sdk开发实践:如何构建美颜sdk功能?

美颜功能是现今很多应用中必不可少的一项功能。而要实现美颜功能,除了自己编写美颜算法外,还可以使用美颜sdk来实现。本文将介绍如何从零开始构建美颜功能,利用美颜sdk实现美颜效果。 一、简介 美颜sdk可以向用户提供多种美颜效果&#xff…

HopeHomi脚手架(五)远程调用Feign与Sentinel

代码示例 cloudB cloudA-api cloudA feign对象注册源码解析 FeignClientsRegistrar FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar 当启动类自动扫描构造beanDefinition的时候,进行beanDefinition注册 ImportBeanDefinitionRegistrar回调registerB…

TryHackMe-Second(boot2root)

Second 排名第二并不是一件坏事,但在这种情况下并非如此。 端口扫描 循例nmap Web枚举 进到8000 注册个账号进去,没啥用 二次注入 虽然登录框那里没有sql注入,但是可以尝试注册个非法账户名尝试二次注入 登录进去之后使用单词计数器 说明…

【产品设计】RBAC权限设计

权限管理是B端中常见的话题,它规定了用户各自的角色和可使用的职能,也对数据的安全提供了保障。 权限管理是B端产品绕不开的话题,本文总结了我对权限管理的设计经验与设计方法,共分为4个部分: 权限管理的概念梳理RBAC…

部署LVS-DR群集

LVS-DR数据包流向分析 为了方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线为1-2-3-4 (Client向目标VIP发出请求,调度器接收;director根据负载均衡算法选择realserver不修改也不封装IP&#xf…

【深度学习入门系列】径向基函数(RBF)神经网络原理介绍及pytorch实现(内含分类、回归任务实例)

文章目录 1 RBF神经网络1.1 简介1.2 步骤输入rbf层核函数中心点求解方法 输出 1.3 几个问题 2 分类2.0 数据集2.1 网络架构2.2 代码2.3 结果 3 回归3.0 数据集3.1 网络架构3.2 代码3.3 结果 4 代码(可直接食用) 众所周知,MATLAB工具箱里提供了…

MySQL基础练习——创建数据库、数据表,并进行修改

目录 题目: 创建库和表: 创建库: 创建表: 将 c_contact 字段插入到 c_birth 字段后面: 将 c_name 字段数据类型改为VARCHAR(70): 将 c_contact 字段改名为 c_phone: 将表名修改为 customer…

魔兽世界az端和TC端有什么区别 Mangos,TC,SW,AZ,AC的关系

魔兽世界az端和TC端有什么区别 Mangos,TC,SW,AZ,AC的关系 大家好我是艾西,魔兽世界现在很多小伙伴对AZ端和TC端不是很能理解什么意思有什么区别,小编查询了大量的资料简单跟大家说一下,今天是艾西故事会大家全当听故事了! &#…

learn C++ NO.2 ——认识引用、auto关键字

1.引用 1.1 引用的概念 引用并不是定义一个新的变量,而是给已经存在的变量起的一个别名。从语言的层面上,编译器并不会为了引用而去开辟新的内存空间。引用和被它引用的变量是共用一块内存空间的。举个生活中引用的例子,西游记中&#xff0…

C++入门(上)

C入门 c是对于c语言的补充而发展的一种面向对象的语言,也能兼容c语言的内容,所以c语言的东西可以在cpp文件中写c语言的内容,也是可以运行的(可以混写) 文章目录 C入门命名空间命名空间的定义命名空间的使用 C的输入…