Flutter 实现上拉加载更多、下拉刷新

绝地灬酷狼 2022-03-17 13:09 659阅读 0赞

参考:ListView下拉刷新与加载更多

文章目录

  • 相关文章推荐
  • 实现效果
  • 实现分析

    • 下拉刷新
    • 上拉加载更多
  • 源码

相关文章
Flutter 搭建具有 Drawer 和 BottomNavigationBar 的静态项目框架
Flutter 环境搭建以及填坑指南(Win10 系统且已有 Android 开发环境 )
Flutter 入门实现 ListView 列表页面以及收藏页面
Flutter Widget 静态布局实战
Flutter 容器类 Widget

实现效果截图
下拉刷新

上拉加载更多

实现分析

下拉刷新
下拉刷新使用的是 RefreshIndicator组件来实现,使用伪代码如下:

  1. @override
  2. Widget build(BuildContext context) {
  3. return new Scaffold(
  4. body: new RefreshIndicator(
  5. onRefresh: _handleRefresh,
  6. ));
  7. }

body中添加RefreshIndicator 组件,在 onRefresh中实现下拉刷新的操作,这里的_handleRefresh方法代码如下:

  1. Future _handleRefresh() async {
  2. // 延迟3秒后添加新数据, 模拟网络加载
  3. await Future.delayed(Duration(seconds: 3), () {
  4. setState(() {
  5. _suggestions.clear();
  6. _suggestions.addAll(generateWordPairs().take(20));
  7. return _suggestions;
  8. });
  9. });
  10. }

上拉加载更多
加载更多的组件在Flutter中是没有提供的,所以我们只能自己实现,在以前Android 中上拉加载更多可以通过监听滑动来实现,这里应该也是可以这么操作的。

FlutterListView中有一个ScrollController属性,通过监听这个滑动来实现加载更多。

实现步骤如下:

  • 定义ScrollController _scrollController = new ScrollController();
  • ListView 的列表中添加controller: _scrollController,

    // listView 列表
    Widget _buildSuggestions() {

    1. return new ListView.builder(
    2. padding: const EdgeInsets.all(16.0),
    3. itemCount: _suggestions.length + 1,
    4. itemBuilder: (context, i) {
    5. // 在每一列之前,添加一个1像素高的分隔线widget
    6. if (i.isOdd) return new Divider();
    7. // 最后一个单词对
    8. if (i == _suggestions.length) {
    9. return _buildLoadMore();
    10. } else {
    11. return _buildRow(_suggestions[i]);
    12. }
    13. },
    14. controller: _scrollController,
    15. );
  • initState()方法中监听滑动,如果滑动到最后则获取加载更多的数据

    @override
    void initState() {

    1. super.initState();
    2. _suggestions.addAll(generateWordPairs().take(20));
    3. _scrollController.addListener(() {
    4. if (_scrollController.position.pixels ==

    _scrollController.position.maxScrollExtent) {

    1. _getMoreData();
    2. }
    3. });

    }

_getMorData方法实现如下:

  1. // 加载更多
  2. Future _getMoreData() async {
  3. await Future.delayed(Duration(seconds: 3), () {
  4. setState(() {
  5. // 这里是本地数据,因此在无网的时候也会加载数据
  6. _suggestions.addAll(generateWordPairs().take(10));
  7. return _suggestions;
  8. });
  9. });
  10. }

至此,下拉刷新和上拉加载就实现完成了,欢迎大家一起交流,共同进步。

源码

如果对你有帮助,请帮忙点个star,谢谢~

如有错误欢迎指出,共同进步。
源码地址:FlutterTest

发表评论

表情:
评论列表 (有 0 条评论,659人围观)

还没有评论,来说两句吧...

相关阅读