import 'package:easy_refresh/easy_refresh.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:ftrecruiter/modules/zdemo/list_item.dart'; //Demo列表3,使用StatefulWidget+GetBuilder的方式 可以保存状态了,推荐使用 class PageFour extends StatefulWidget { @override State createState() { return _GoodsListPageState(); } } class _GoodsListPageState extends State with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin { List _list = List.generate(10, (index) => "1234"); int _page = 1; final int _maxPage = 10; //刷新控件控制器 final EasyRefreshController _controller = EasyRefreshController( controlFinishRefresh: true, controlFinishLoad: true, ); Future _onRefresh() async { // 设置两秒后关闭刷新,时间可以随便设置,根据项目需求,正常在请求成功后,也要关闭 await Future.delayed(const Duration(seconds: 2), () { setState(() { _page = 1; _list = List.generate(10, (index) => "1234"); // 控制器关闭刷新功能 _controller.finishRefresh(); _controller.resetFooter(); }); }); } Future _loadMore() async { await Future.delayed(const Duration(seconds: 2), () { setState(() { _page++; _list.addAll(List.generate(10, (i) => "4567")); // 控制器关闭加载功能,还可以设置没有更多数据noMore _controller.finishLoad(IndicatorResult.success); }); }); } @override Widget build(BuildContext context) { return EasyRefresh( //创建的刷新控制器 controller: _controller, //自定义刷新头 // header: MaterialHeader(), // ClassicalHeader( // enableInfiniteRefresh: false, // float: false, // enableHapticFeedback: false, // refreshText: "pullToRefresh", // refreshReadyText: "releaseToRefresh", // refreshingText: "refreshing", // refreshedText: "refreshed", // refreshFailedText: "refreshFailed", // noMoreText: "noMore", // infoText: "updateAt %T", // ), //自定义刷新脚 // footer: MaterialFooter(), // ClassicalFooter( // enableInfiniteLoad: true, // enableHapticFeedback: false, // loadText: "pushToLoad", // loadReadyText: "releaseToLoad", // loadingText: "loading", // loadedText: "loaded", // loadFailedText: "loadFailed", // noMoreText: "noMore", // infoText: "updateAt %T", // ), // CustomFootView(), onRefresh: _onRefresh, onLoad: _loadMore, // childBuilder: (BuildContext context, ScrollPhysics physics) { // return NestedScrollView( // physics: physics, // headerSliverBuilder: (context, innerBoxIsScrolled) { // return [ // const HeaderLocator.sliver(clearExtent: false), // ]; // }, // body: ListView.builder( // // itemBuilder: (BuildContext context, int index) { // //Item布局 // return ListTile(title: Text("$index")); // }, // )); // }, child: CustomScrollView( slivers: [ SliverFixedExtentList( //或者直接用Sliver也是可以的,只是一个固定Item高度,一个不固定高度而已 itemExtent: 100, delegate: SliverChildBuilderDelegate( (context, index) { return const ListItem(title: "index"); }, childCount: _list.length, ), ), ], ), ); } @override bool get wantKeepAlive => true; }