Pagination alway init

Viewed 36

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,
                            });
                          },
                        ),
                      );
                    },
                  )
})
0 Answers
Related