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
- Add
import package:pull_to_refresh/pull_to_refresh_widget.dart;
- 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"),
);
}));
- 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)
]),
),
);
}
- 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<Null> _handleRefresh() async {
await Future.delayed(Duration(seconds: 50), () {
setState(() {
items.clear();
items = List.generate(40, (i) => i);
});
});
}
Future<Null> _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.