参考:ListView下拉刷新与加载更多git
文章目录github
相关文章bash
Flutter 搭建具备 Drawer 和 BottomNavigationBar 的静态项目框架网络
Flutter 容器类 Widgetasync
Flutter 入门实现 ListView 列表页面以及收藏页面ide
Flutter 环境搭建以及填坑指南(Win10 系统且已有 Android 开发环境 布局
实现效果截图 ui
下拉刷新 下拉刷新使用的是 RefreshIndicator
组件来实现,使用伪代码以下:spa
@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;
});
});
}
复制代码
至此,下拉刷新和上拉加载就实现完成了,欢迎你们一块儿交流,共同进步。
若是对你有帮助,请帮忙点个
star
,谢谢~
若有错误欢迎指出,共同进步。 源码地址:FlutterTest