I have an issue with pagination with getX when I try to load more items in the last page, but It init again, So I will get a new index. ex: I have 60 items in the list, my rpp = 20, so page = 3, and then when I load more item until page 3 it again init page, so it's increase index, my app crash,
Here is my code controller:
ScrollController scrollController = ScrollController();
@override
void onInit() {
fetchMoreTrackingOrder(_startDate, _endDate, trackingPage, rpp);
super.onInit();
}
fetchMoreTrackingOrder(
String startData, String endData, int page, int rpp) async {
scrollController.addListener(() async {
if (scrollController.position.extentAfter < 300 &&
!scrollController.position.outOfRange) {
page += 1;
var resData = await _trackingService.trackingListOrder(
endData, startData, page, rpp, currentStatus);
if (page == 1) {
trackingOrderListResponse = resData;
} else {
trackingOrderListResponse!.body.items!.addAll(resData!.body.items!);
update();
}
}
});
}
Here is my UI code:
GetBuilder<TrackingController>(builder(_){
return GroupedListView<TrackingOrderItemListResponse, DateTime>(
controller: controller.scrollController,
key: controller.statePageKey,
elements:
controller.trackingOrderListResponse!.body.items!,
groupBy: (element) => DateTime.parse(
DateFormat("yyyy-MM-dd").format(element.orderDate)),
groupComparator: (value1, value2) {
return value2.compareTo(value1);
},
useStickyGroupSeparators: true,
padding: const EdgeInsets.all(16.0),
groupSeparatorBuilder: (DateTime value) {
var dateStr;
var dNow = DateTime.now();
if (value.isAtSameMomentAs(
DateTime(dNow.year, dNow.month, dNow.day))) {
dateStr = "Today";
} else {
dateStr = DateFormat("MMM dd, yyyy").format(value);
}
return Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
dateStr,
style: TextStyle(fontSize: 16),
),
);
},
itemBuilder: (c, data) {
return Padding(
padding: const EdgeInsets.only(bottom: 16.0),
child: TrackingCell(
trackingController: controller,
data: data,
onTap: () => controller.gotoDetailPage(data.id),
onReorder: () async {
Get.toNamed(Routes.EXPRESS_DETAILS, arguments: {
"is_reorder": true,
"id": data.id,
});
},
),
);
},
)
})