返回

Flutter下最全的SmartRefresher实现,适配iOS、安卓、Web,手把手教你下拉刷新、上拉加载!

前端

SmartRefresher:跨平台 Flutter 下拉刷新和上拉加载组件

什么是 SmartRefresher?

SmartRefresher 是一个 Flutter 组件库,提供强大的下拉刷新和上拉加载功能。它基于 Flutter 的滚动事件系统工作,在满足特定条件时触发事件。SmartRefresher 非常受欢迎,因为它易于使用,功能丰富。

SmartRefresher 如何工作?

SmartRefresher 监听可滚动组件(例如 ListView 和 GridView)中的滚动距离和速度。当满足特定的条件时(例如滚动到顶部或底部),它会触发下拉刷新或上拉加载事件。SmartRefresher 还支持加载更多、空数据提示和错误提示等自定义功能。

如何使用 SmartRefresher?

使用 SmartRefresher 非常简单。只需将您要刷新的组件包裹在 SmartRefresher 组件中即可。例如,如果您要对 ListView 进行下拉刷新和上拉加载,您可以使用以下代码:

import 'package:flutter/material.dart';
import 'package:smart_refresher/smart_refresher.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SmartRefresher Example',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> items = List.generate(20, (index) => 'Item $index');

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SmartRefresher Example'),
      ),
      body: SmartRefresher(
        controller: RefreshController(),
        onRefresh: _onRefresh,
        onLoading: _onLoading,
        child: ListView.builder(
          itemCount: items.length,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text(items[index]),
            );
          },
        ),
      ),
    );
  }

  void _onRefresh() async {
    // simulate network request
    await Future.delayed(Duration(seconds: 2));

    // add new items to list
    setState(() {
      items.insertAll(0, ['New item 1', 'New item 2']);
    });

    // end refresh
    _refreshController.refreshCompleted();
  }

  void _onLoading() async {
    // simulate network request
    await Future.delayed(Duration(seconds: 2));

    // add new items to list
    setState(() {
      items.addAll(['New item ${items.length + 1}', 'New item ${items.length + 2}']);
    });

    // end loading
    _refreshController.loadComplete();
  }

  final RefreshController _refreshController = RefreshController();
}

SmartRefresher 使用技巧

以下是使用 SmartRefresher 时的一些提示:

  • 设置控制器以控制刷新行为。
  • 自定义刷新指示器以匹配您的应用程序设计。
  • 使用加载更多来实现无限滚动。
  • 添加空数据提示和错误提示以提供更好的用户体验。

常见问题解答

  • 如何停止刷新或加载更多?

    使用控制器停止刷新或加载更多。例如:

    _refreshController.refreshCompleted();
    _refreshController.loadComplete();
    
  • 如何自定义刷新指示器?

    创建自定义 Widget 并将其作为 headerfooter 参数传递给 SmartRefresher。例如:

    SmartRefresher(
      header: CustomHeader(),
      footer: CustomFooter(),
      ...
    )
    
  • 如何使用加载更多?

    设置 onLoading 回调函数并实现加载更多逻辑。例如:

    SmartRefresher(
      onLoading: _onLoading,
      ...
    )
    
  • 如何添加空数据提示?

    设置 enablePullDown 为 false,并提供一个 emptyWidget。例如:

    SmartRefresher(
      enablePullDown: false,
      emptyWidget: Text('No data available'),
      ...
    )
    
  • 如何添加错误提示?

    设置 enablePullDown 为 false,并提供一个 errorWidget。例如:

    SmartRefresher(
      enablePullDown: false,
      errorWidget: Text('Error loading data'),
      ...
    )
    

结论

SmartRefresher 是一个强大的 Flutter 组件,可让您轻松添加下拉刷新和上拉加载功能到您的应用程序中。通过利用本指南,您可以充分利用 SmartRefresher 的功能,并为用户提供无缝的滚动体验。