//리스트에 각각의 int값을 넣어준다.
List<String> items = ["1", "2", "3", "4", "5", "6", "7", "8"];
//컨트롤러를 지정해준다.
RefreshController _refreshController =
RefreshController(initialRefresh: true);
//위로 슬라이드 하면 refresh가 된다.
void _onRefresh() async{
print('onRefresh');
await Future.delayed(Duration(milliseconds: 1000));
//1초 후에 아래에 코드가 실행이 된다.
//컨트롤러한테 refresh가 완료되었음을 알려준다.
_refreshController.refreshCompleted();
}
//아래로 슬라이드하면 loading이 된다.
void _onLoading() async{
print('onLoading');
await Future.delayed(Duration(milliseconds: 1000));
//1초 후에 아래에 코드가 실행이 된다.
//아이템 리스트에 숫자 1을 더한 값의 아이템이 추가된다.
items.add((items.length+1).toString());
//mounted가 true일때 setState를 함으로써, 위젯을 업데이트 해준다.
if(mounted)
setState(() {
});
_refreshController.loadComplete();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SmartRefresher(
enablePullDown: false, //refresh 비활성화
enablePullUp: true, //loading 활성화
header: WaterDropHeader(), //refresh 메서드를 활성화 했을 때, 물방울 표시에 로딩바가 뜬다. 다른 것도 많으니 홈페이지 참고
footer: CustomFooter( //loading이 활성화 되었을 때 //내가 원하는 대로 커스텀 할 수 있다. 반대로 header에다가 CustomHeader()메서드를 사용할 수 있다.
builder: (BuildContext context,LoadStatus mode){
//위젯 타입에 body를 선언해주고,
Widget body ;
//mode 라고 넘어온 인자로,
//상황에 맞게 커스텀 할 수 있다.
//커스텀 기호에 맞게 잘 꾸며서 쓸 수 있다.
if(mode==LoadStatus.idle){
body = Text("pull up load");
}
else if(mode==LoadStatus.loading){
body = CupertinoActivityIndicator();
}
else if(mode == LoadStatus.failed){
body = Text("Load Failed!Click retry!");
}
else if(mode == LoadStatus.canLoading){
body = Text("release to load more");
}
else{
body = Text("No more Data");
}
return Container(
height: 55.0,
child: Center(child:body),
);
},
),
controller: _refreshController, //아까 생성한 컨트롤러 변수를 넣어준다.
onRefresh: _onRefresh, //onRefresh (위)
onLoading: _onLoading, //onLoading (아래)
child: ListView.builder(
itemBuilder: (c, i) => Card(child: Center(child: Text(items[i]))),
itemExtent: 100.0,
itemCount: items.length,
),
),
);
}