Flutter RefreshIndicator 下拉刷新

本文详细介绍Flutter SDK中RefreshIndicator组件的使用方法及参数配置,包括如何实现下拉刷新功能,以及如何配合Scrollable组件使用。同时,提供了一个完整的代码示例。

 

RefreshIndicator FlutterSDK提供的下拉刷新组件,但是没有上拉加载,需要上拉加载可查看 下拉刷新上拉加载Demo。

大家知道,所有的Scrollable都是可滚动的,但是如果没有足够内容,Scrollable是不可滚动的。Scrollable不可滚动时RefreshIndicator下拉功能不可用。这时官方告诉我们要将Scrollable的physics属性设置为AlwaysScrollableScrollPhysics。

参数详解

属性说明
child子组件
displacement下拉距离,根据这个距离判定刷新执行。默认40.0
onRefresh下拉监听
color刷新进度指示器的前景色
backgroundColor刷新进度指示器的背景色
notificationPredicate是否应处理滚动通知的检查(是否通知下拉刷新动作)
semanticsLabel标记此进度指示器(未知作用)
semanticsValue此进度指示器的值(未知作用)
  

代码示例

class _MyHomeState extends State<MyHome> {
  //数据列表
  List list = new List();
  int x = 0;

  // 初始化数据
  @override
  void initState() {
    super.initState();
    getData('初始化数据');
  }

  /*
   * 获取数据
   */
  Future getData(String s) async {
    await Future.delayed(Duration(seconds: 2), () {
      setState(() {
        list = List.generate(20, (i) => '$s $i');
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('RefreshIndicator 下拉刷新'),),
      body: RefreshIndicator(
        child:ListView.builder(
          itemCount: list.length,
          itemBuilder: (BuildContext context, int index) {
            return ListTile(
              title: Text(this.list[index]),
            );
          },
        ),
        onRefresh:_onRefresh,
        // displacement:30,
        color:Colors.red,
        backgroundColor:Colors.green,
        // notificationPredicate:,
        semanticsLabel:'哈哈',
        semanticsValue:'sdfjnlsdjf',
      ),
    );
  }

  // 下拉监听 处理
  Future<Null> _onRefresh() async {
    x++;
    await Future.delayed(Duration(seconds: 3), () {
      print('refresh');
      setState(() {
        list = List.generate(20, (i) => '第 $x 次刷新后数据 $i');
      });
    });
  }

}

效果图

完整代码

查看完整代码

Flutter 中实现下拉刷新功能有多种方法,以下为你介绍几种常见方式及相关示例: ### 使用 flutter_pull_to_refresh 库 可通过添加依赖、配置组件、处理数据请求和更新,以及对组件进行封装来实现高效的下拉刷新加载交互,提升用户体验。在实际开发中,还能根据项目需求进一步优化代码,例如添加错误处理、优化网络请求等,让应用更加健壮和稳定 [^1]。 ### 结合 RefreshIndicator、ListView 和 ScrollController 通常结合使用 RefreshIndicator、ListView 和 ScrollController 来实现下拉刷新、上拉加载更多和一键点击回到顶部的功能 [^2]。 ### 利用不同风格的刷新组件 Flutter 实现了两种风格的脚手架,对应的刷新组件也有两种风格。Material 风格的 widget 名称叫做 RefreshIndicator,iOS 风格的 widget 名称叫做 CupertinoSliverRefreshControl,官方文档也提供了相关例子 [^3]。 ### 使用 bloc 模拟实现 有文章记录了使用 bloc 与下拉刷新功能,结合之前文章中 bloc 和自定义 http 库的使用,通过对比官方示例与个人示例解决问题后实现了相应效果(所使用的 api 来源于 wanandroid api) [^4]。 下面是一个使用 RefreshIndicator 实现下拉刷新的简单示例代码: ```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('下拉刷新示例'), ), body: RefreshableList(), ), ); } } class RefreshableList extends StatefulWidget { @override _RefreshableListState createState() => _RefreshableListState(); } class _RefreshableListState extends State<RefreshableList> { List<String> items = List.generate(20, (index) => 'Item $index'); Future<void> _refreshData() async { // 模拟数据刷新 await Future.delayed(Duration(seconds: 2)); setState(() { items = List.generate(20, (index) => 'New Item $index'); }); } @override Widget build(BuildContext context) { return RefreshIndicator( onRefresh: _refreshData, child: ListView.builder( itemCount: items.length, itemBuilder: (context, index) { return ListTile( title: Text(items[index]), ); }, ), ); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马志武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值