【开源鸿蒙跨平台Flutter开发】AtomGit Pocket:下拉刷新与上拉加载
一、今天开发进度
本项目基于前几天开发的AtomGit口袋工具,之前已经完成基础的搜索与仓库列表展示,并打通 AtomGit OpenAPI 的访问。今天主要是做下拉刷新与上拉的加载功能,完善体验。
二、核心技术
2.1 第三方库与依赖
之前我还想如果要自己实现下拉刷新和上拉加载,那肯定很复杂,但是如果有库的话,就会变得容易多了。
在 pubspec.yaml 中新增刷新库依赖(其实昨天的笔记里就已经提到了,但是刷新功能主要是今天实现的,所以再写一遍):
dependencies:
http: ^1.2.2
pull_to_refresh_flutter3: ^2.0.2
pull_to_refresh_flutter3 提供 SmartRefresher 组件,可快速实现下拉刷新、上拉加载与多种状态提示。
三、实现步骤详解
3.1 刷新与分页控制
3.1.1 SmartRefresher 基础用法
-
RefreshController:管理刷新/加载状态,调用refreshCompleted、loadComplete、loadNoData等方法更新 UI。 -
SmartRefresher:包裹 ListView 内容,实现下拉刷新onRefresh、上拉加载onLoading。
-
Header/Footer:使用
ClassicHeader、ClassicFooter提供统一的提示样式。
3.1.2 SearchPage 分页逻辑
主要使用的一些变量:
-
_lastKeyword:记录最后一次搜索关键词,保证翻页时使用同一关键字; -
_currentUserPage / _currentRepoPage:分别记录用户、仓库搜索的当前页; -
_hasMoreUsers / _hasMoreRepos:根据返回数据更新是否还有更多页; -
_userResults / _repoResults:存储结果列表,便于分页追加。
关键流程:
-
触发搜索
_triggerSearch:调用_performSearch(reset: true),重置分页状态。
-
下拉刷新
_onRefresh:同样执行_performSearch(reset: true, fromRefresh: true),刷新后调用refreshCompleted、resetNoData。
-
上拉加载
_onLoading:在_hasMoreCurrent为 true 时请求下一页,并通过loadComplete或loadNoData更新状态。
3.1.3 UserReposPage 分页逻辑
-
首次加载在
initState中执行_fetchRepositories(page: 1, reset: true)。 -
下拉刷新重置页码并清空列表,调用
refreshCompleted,若无更多数据则调用loadNoData。 -
上拉加载仅在
_hasMore为 true 时执行,返回结果数量少于perPage时通过_hasMore = repos.isNotEmpty判断是否还有更多数据。 -
引入
_isRequesting标记避免并发请求,确保请求串行执行。
与搜索页一样,通过 RefreshController 管理状态,避免重复请求和错误提示。
四、运行与调试
4.1 Flutter 与 OpenHarmony 环境
-
确保安装适配 OpenHarmony 的 Flutter SDK;
-
在模拟器上要连接WIFI,不然可能会测试失败
4.2 运行示例


四、总结
通过这几天的迭代,目前完善了列表交互体验与仓库卡片的组件化,为后续功能扩展打下了基础。依旧还有很多地方可以改进。明天继续加油吧,每天进步一点点。不过也有一点想试试其他框架,下次有空试试吧。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)