# pull_to_refresh
**Repository Path**: ByteDance/pull_to_refresh
## Basic Information
- **Project Name**: pull_to_refresh
- **Description**: Flutter pull_to_refresh widget
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-08-26
- **Last Updated**: 2025-09-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# pull_to_refresh
提供上拉加载和下拉刷新的组件
## 特性
* 提供上拉加载和下拉刷新
* 接口简单,接入十分方便
* 支持Flutter中大部分的控件
## 例子
## 如何使用?
1. 添加依赖文件: ```import package:pull_to_refresh/pull_to_refresh_widget.dart; ```
2. 使用PullToRefreshWidget包裹待展示的内容控件,child就是需要展示的控件
```
PullToRefreshWidget(
isRefreshEnable: true,
headerBuilder: _buildHeaderWidget,
onRefresh: _handleRefresh,
isLoadMoreEnable: hasMore,
onLoadMore: _onLoadMore,
footerBuilder: _buildFootWidget,
child: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return new ListTile(
title: Text("Index$index"),
);
}));
```
3. 设置PullToRefreshWidget中的headerBuilder和footerBuilder用来生成header控件和footer控件。其中header控件必须继承于DefaultRefreshHeaderWidget
```
DefaultRefreshHeaderWidget _buildHeaderWidget(BuildContext context) {
return DefaultRefreshHeaderWidget();
}
Widget _buildFootWidget(BuildContext context) {
return new Container(
alignment: Alignment.center,
height: 60.0,
child: new Center(
child: new Row(
textDirection: TextDirection.ltr,
mainAxisAlignment: MainAxisAlignment.center,
children: [
new Text("正在加载中。。。"),
new CircularProgressIndicator(strokeWidth: 2.0)
]),
),
);
}
```
4. 当进入刷新和加载更多状态时会分别调用onRefresh和onLoadMore函数。这两个函数必须返回[Future]类型,用来决定刷新和加载更多何时结束
```
Future _handleRefresh() async {
await Future.delayed(Duration(seconds: 50), () {
setState(() {
items.clear();
items = List.generate(40, (i) => i);
});
});
}
Future _onLoadMore() async {
await Future.delayed(Duration(seconds: 50), () {
setState(() {
if (index == 2) {
hasMore = false;
}
int length = items.length;
index++;
items.addAll(List.generate(16, (i) => i + length));
});
});
}
```
具体的例子可以参照main.dart文件