From 31792a2f8a41f390dd36ed09179feb6fcf900eaf Mon Sep 17 00:00:00 2001 From: MrM Date: Fri, 6 Jun 2025 18:18:36 +0330 Subject: [PATCH] feat : pagination --- .../pages/entering_the_warehouse/logic.dart | 34 +++++++++++++++++-- .../pages/entering_the_warehouse/view.dart | 13 ++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/packages/chicken/lib/presentation/pages/entering_the_warehouse/logic.dart b/packages/chicken/lib/presentation/pages/entering_the_warehouse/logic.dart index f156845..3e90fb0 100644 --- a/packages/chicken/lib/presentation/pages/entering_the_warehouse/logic.dart +++ b/packages/chicken/lib/presentation/pages/entering_the_warehouse/logic.dart @@ -24,6 +24,12 @@ class EnteringTheWarehouseLogic extends GetxController { final RxBool addPageImportedLoad = false.obs; final RxBool hasMoreDataImportedLoad = true.obs; + final ScrollController scrollControllerWaitingForArrival = ScrollController(); + final RxInt currentPageWaitingForArrival = 1.obs; + final RxBool isLoadingMoreWaitingForArrival = false.obs; + final RxBool addPageWaitingForArrival = false.obs; + final RxBool hasMoreDataWaitingForArrival = true.obs; + @override void onReady() { super.onReady(); @@ -39,6 +45,14 @@ class EnteringTheWarehouseLogic extends GetxController { getImportedEntried(); } }); + + scrollControllerWaitingForArrival.addListener(() { + if (scrollControllerWaitingForArrival.position.pixels >= + scrollControllerWaitingForArrival.position.maxScrollExtent - 100) { + addPageWaitingForArrival.value = true; + getWaitingArrivals(); + } + }); } Future getBarGeneralInformation() async { @@ -59,18 +73,34 @@ class EnteringTheWarehouseLogic extends GetxController { } Future getWaitingArrivals() async { + if (isLoadingMoreWaitingForArrival.value || + !hasMoreDataWaitingForArrival.value) { + return; + } + + if (addPageWaitingForArrival.value) { + currentPageWaitingForArrival.value++; + } + safeCall( call: () async => await rootLogic.chickenRepository.getWaitingArrivals( token: rootLogic.tokenService.accessToken.value!, - page: 1, + page: currentPageWaitingForArrival.value, ), onError: (error, stackTrace) { - eLog(error); + isLoadingMoreImportedLoad.value = false; }, onSuccess: (result) { if (result != null) { waitingForArrival.value = result; + if (isLoadingMoreWaitingForArrival.value) { + waitingForArrival.value?.results.addAll(result.results); + } else { + waitingForArrival.value = result; + } } + + isLoadingMoreImportedLoad.value = false; }, ); } diff --git a/packages/chicken/lib/presentation/pages/entering_the_warehouse/view.dart b/packages/chicken/lib/presentation/pages/entering_the_warehouse/view.dart index f998308..ca6c1ee 100644 --- a/packages/chicken/lib/presentation/pages/entering_the_warehouse/view.dart +++ b/packages/chicken/lib/presentation/pages/entering_the_warehouse/view.dart @@ -298,8 +298,19 @@ class EnteringTheWarehousePage extends GetView { padding: const EdgeInsets.all(6), child: ListView.separated( padding: const EdgeInsets.all(8.0), - itemCount: data.value?.results.length ?? 0, + itemCount: data.value!.results.length+1 , itemBuilder: (BuildContext context, int index) { + + if (index == data.value!.results!.length) { + return Obx( + () => controller.isLoadingMoreWaitingForArrival.value + ? const Padding( + padding: EdgeInsets.symmetric(vertical: 16), + child: Center(child: CircularProgressIndicator()), + ) + : const SizedBox(), + ); + } final result = data.value!.results[index]; return Card( margin: const EdgeInsets.symmetric(vertical: 4.0),