我正在尝试在我的 Flutter 应用程序上实现分页。任务是在滚动时加载/获取新数据。我可以在每次滚动时从服务器获取数据,但问题是每次获取相同的数据。
这是我的代码供您查看:
Future<Map<String, dynamic>> fetchEvents(String accessToken,int vehicleId,) async {
String url = '${AppConstants.baseUrl}v2/event/paginated?size=10&offset=${offset++}&eventsId=${widget.eventsId}';
final response = await get(
Uri.parse('$url'),
headers: {
'Authorization': "bearer $accessToken",
},
);
Map<String, dynamic> responseBody = json.decode(response.body);
fetchedEvents = [...responseBody['eventResponses']];
for (var event in fetchedEvents) {
setState(() {
events.add(event);
});
}
return responseBody;
}
每次滚动时,偏移量都会更新,但返回相同的数据。
但是在 Postman 上,如果我更改偏移量,则会获取新的数据集。我哪里出错了?
这是我的 initState() 代码:
@override
initState() {
super.initState();
loadMoreData(); //initial data is fetched
_controller.addListener(() {
if (_controller.position.pixels == _controller.position.maxScrollExtent) { //data fetched on scroll
loadMoreData();
}
});
}
这里是 laodMoreData():
loadMoreData() {
fetchEvents(widget.accessToken, widget.eventId);
}
请帮助我克服这个问题。提前致谢。
答案 0 :(得分:0)
您不必为此使用控制器 您可以将 itemCount 加 1 以加载下一页
ListView.builder(
itemCount: list.length+1,
itemBuilder: (context, i) {
if(i<list.length)
{
return listItem()
}
else{
loadMoreData()//this function will be called with the last listitem
return Loader() //loader for pagination
}
},
)