项目初始化
提供上拉加载和下拉刷新的组件
添加依赖文件: import package:pull_to_refresh/pull_to_refresh_widget.dart;
import package:pull_to_refresh/pull_to_refresh_widget.dart;
使用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"), ); }));
设置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文件
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
pull_to_refresh
提供上拉加载和下拉刷新的组件
特性
例子
如何使用?
添加依赖文件:
import package:pull_to_refresh/pull_to_refresh_widget.dart;使用PullToRefreshWidget包裹待展示的内容控件,child就是需要展示的控件
设置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) ]), ), ); }
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)); }); }); }