用flutter实现分页加载和下拉刷新
itemCount: datalist.length + 1, // 加1是为了显示加载中的UI。// 刷新数据,将datalist清空后加载第一页。//获取数据后填充datalist。
class SearchList extends StatefulWidget {
const SearchList(
{super.key, required String keywords, required int selectedIndex});
@override
State<SearchList> createState() => _SearchListState();
}
class _SearchListState extends State<SearchList> {
int currentPage = 1; //当前页是第一页
List<JobInfo> datalist = [];
bool isLoading = false;
final ScrollController _scrollController = ScrollController();
//获取第n页数据
Future<List<JobInfo>> fetchJobList({int page = 1}) async {
final response = await http
.get(Uri.parse('http://xiaoshuo.com/api/zhaopin/index?page=$page'));
if (response.statusCode == 200) {
final responseBody = json.decode(response.body);
//转换模型数组
List<JobInfo> joblist = responseBody['data']['rows']
.map<JobInfo>((item) => JobInfo.fromJson(item))
.toList();
return joblist;
} else {
throw Exception('Failed to fetch data');
}
}
// 获取数据后填充datalist
Future<void> loadNextPage() async {
var nextPageData = await fetchJobList(page: currentPage);
var scrollOffset = _scrollController.offset;
setState(() {
datalist.addAll(nextPageData);
currentPage++;
isLoading = false;
});
_scrollController.jumpTo(scrollOffset);
}
@override
void initState() {
super.initState();
loadNextPage();//加载第一页
_scrollController.addListener(() {
if (!isLoading &&
_scrollController.position.pixels ==
_scrollController.position.maxScrollExtent) {
isLoading = true;
loadNextPage();//加载下一页
}
});
}
Future<void> _refresh() async {
// 模拟网络请求
//await Future.delayed(Duration(seconds: 2));
// 刷新数据,将datalist清空后加载第一页
setState(() {
datalist = [];
currentPage = 1;
isLoading = true;
loadNextPage();
});
}
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Color.fromARGB(255, 230, 229, 229),
),
padding: EdgeInsets.symmetric(
vertical: 3,
),
child: RefreshIndicator(
onRefresh: _refresh,
child: ListView.builder(
controller: _scrollController,
itemCount: datalist.length + 1, // 加1是为了显示加载中的UI
itemBuilder: (context, index) {
if (index < datalist.length) {
return SearchItemCard(jobinfo: datalist[index]);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
),
);
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)