flutter怎么手动刷新_Flutter 实现上拉加载更多、下拉刷新

本文介绍了在Flutter中如何实现下拉刷新和上拉加载更多功能。下拉刷新利用RefreshIndicator组件,结合onRefresh回调进行数据更新。上拉加载更多则通过ListView的ScrollController监听滑动到底部,触发加载更多数据的操作。完整代码示例展示了这两种功能的实现细节。
摘要由CSDN通过智能技术生成

下拉刷新

上拉加载更多

实现分析

下拉刷新

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

Widget build(BuildContext context) {    return new Scaffold(

body: new RefreshIndicator(

onRefresh: _handleRefresh,

));

}

在body中添加RefreshIndicator 组件,在 onRefresh中实现下拉刷新的操作,这里的_handleRefresh方法代码如下:Future  _handleRefresh() async {    // 延迟3秒后添加新数据, 模拟网络加载

await Future.delayed(Duration(seconds: 3), () {

setState(() {

_suggestions.clear();

_suggestions.addAll(generateWordPairs().take(20));        return _suggestions;

});

});

}

上拉加载更多

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

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

实现步骤如下:定义ScrollController _scrollController = new ScrollController();

在 ListView 的列表中添加controller: _scrollController,// listView 列表

Widget _buildSuggestions() {    return new ListView.builder(

padding: const EdgeInsets.all(16.0),

itemCount: _suggestions.length + 1,

itemBuilder: (context, i) {        // 在每一列之前,添加一个1像素高的分隔线widget

if (i.isOdd) return new Divider();        // 最后一个单词对

if (i == _suggestions.length) {          return _buildLoadMore();

} else {          return _buildRow(_suggestions[i]);

}

},

controller: _scrollController,

);在 initState()方法中监听滑动,如果滑动到最后则获取加载更多的数据@override

void initState() {    super.initState();

_suggestions.addAll(generateWordPairs().take(20));

_scrollController.addListener(() {      if (_scrollController.position.pixels ==

_scrollController.position.maxScrollExtent) {

_getMoreData();

}

});

}

_getMorData方法实现如下:// 加载更多

Future _getMoreData() async {    await Future.delayed(Duration(seconds: 3), () {

setState(() {        // 这里是本地数据,因此在无网的时候也会加载数据

_suggestions.addAll(generateWordPairs().take(10));        return _suggestions;

});

});

}

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

作者:_龙衣

链接:https://www.jianshu.com/p/0101e821aa11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值