# 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**: 2026-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pull_to_refresh A widget that provided to pull-up load and pull-down refresh with Flutter. ## Features * pull up and pull down * Simple interface, easy access * support most of the component in Flutter such as scroll and non-scroll component ## Show cases ## Quick Start 1. Add ```import package:pull_to_refresh/pull_to_refresh_widget.dart; ``` 2. Using PullToRefreshWidget wrap outside your content widget ``` 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. You should set the headerBuilder and footerBuilder in PullToRefreshWidget that generate header widget and footer widget. The header widget must inherit 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. The onRefresh and onLoadMore will be callback when the indicator state is refreshed and load more. The function returned [Future] must complete when the refresh operation is finished. ``` 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)); }); }); } ``` full example see here: main.dart.