From d47c85ffd44d3ebed860003e00fe06c1803d40f2 Mon Sep 17 00:00:00 2001 From: llsajjad Date: Sun, 14 Sep 2025 13:56:20 +0330 Subject: [PATCH] Fixed pagination bug in tender like filter and fixed current page bug in same page --- lib/view_models/your_tenders_view_model.dart | 81 +++++++++---------- .../pages/your_tenders_desktop_page.dart | 10 ++- .../pages/your_tenders_mobile_page.dart | 2 + .../pages/your_tenders_tablet_page.dart | 10 ++- .../strings/your_tenders_strings.dart | 3 + .../widgets/liked_disliked_tenders_list.dart | 4 +- 6 files changed, 60 insertions(+), 50 deletions(-) diff --git a/lib/view_models/your_tenders_view_model.dart b/lib/view_models/your_tenders_view_model.dart index a2e87e3..981576b 100644 --- a/lib/view_models/your_tenders_view_model.dart +++ b/lib/view_models/your_tenders_view_model.dart @@ -120,12 +120,11 @@ class YourTendersViewModel with ChangeNotifier { required String feedbackType, bool reset = false, }) async { -if (reset) { - _offset = (currentPage - 1) * _limit; - hasMore = true; - _currentFeedbackType = feedbackType; -} - + if (reset) { + _offset = (currentPage - 1) * _limit; + hasMore = true; + _currentFeedbackType = feedbackType; + } if (!reset && (isLoadingMore || !hasMore)) { return; @@ -226,6 +225,7 @@ if (reset) { // Clear data when status changes _clearAllData(); selectedStatus = status; + currentPage = 1; notifyListeners(); } @@ -261,43 +261,42 @@ if (reset) { notifyListeners(); } -Future callWithFilter() async { - likedTendersData = null; - data = null; - isLoading = true; - notifyListeners(); + Future callWithFilter() async { + likedTendersData = null; + data = null; + isLoading = true; + notifyListeners(); - if (selectedStatus == YourTendersStrings.all) { - final requestModel = GetTendersRequestModel( - status: '', - createdFrom: startDateUnix, - createdTo: endDateUnix, - limit: _tendersLimit, - offset: _tendersOffset, - ); - await getTenders(requestModel: requestModel, reset: true); - } else if (selectedStatus == YourTendersStrings.tendersSubmitted) { - final requestModel = GetTendersRequestModel( - status: TenderApprovalStatus.submitted.value, - createdFrom: startDateUnix, - createdTo: endDateUnix, - limit: _tendersLimit, - offset: _tendersOffset, - ); - await getTenders(requestModel: requestModel, reset: true); - } else if (selectedStatus == YourTendersStrings.likeTenders) { - await getTendersFeedback( - feedbackType: TenderFeedback.liked.value, - reset: true, - ); - } else if (selectedStatus == YourTendersStrings.dislikeTenders) { - await getTendersFeedback( - feedbackType: TenderFeedback.disliked.value, - reset: true, - ); + if (selectedStatus == YourTendersStrings.all) { + final requestModel = GetTendersRequestModel( + status: '', + createdFrom: startDateUnix, + createdTo: endDateUnix, + limit: _tendersLimit, + offset: _tendersOffset, + ); + await getTenders(requestModel: requestModel, reset: true); + } else if (selectedStatus == YourTendersStrings.tendersSubmitted) { + final requestModel = GetTendersRequestModel( + status: TenderApprovalStatus.submitted.value, + createdFrom: startDateUnix, + createdTo: endDateUnix, + limit: _tendersLimit, + offset: _tendersOffset, + ); + await getTenders(requestModel: requestModel, reset: true); + } else if (selectedStatus == YourTendersStrings.likeTenders) { + await getTendersFeedback( + feedbackType: TenderFeedback.liked.value, + reset: true, + ); + } else if (selectedStatus == YourTendersStrings.dislikeTenders) { + await getTendersFeedback( + feedbackType: TenderFeedback.disliked.value, + reset: true, + ); + } } -} - int currentPage = 1; diff --git a/lib/views/your_tenders/pages/your_tenders_desktop_page.dart b/lib/views/your_tenders/pages/your_tenders_desktop_page.dart index 1f9a9d6..2c1c574 100644 --- a/lib/views/your_tenders/pages/your_tenders_desktop_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_desktop_page.dart @@ -78,6 +78,7 @@ class _YourTendersDesktopPageState extends State data: viewModel.likedTendersData!, status: TenderFeedback.liked.value, isDesktop: true, + isMobile: false, ); } else if (viewModel.selectedStatus == YourTendersStrings.dislikeTenders && @@ -86,6 +87,7 @@ class _YourTendersDesktopPageState extends State data: viewModel.likedTendersData!, status: TenderFeedback.disliked.value, isDesktop: true, + isMobile: false, ); } else if (viewModel.data != null) { content = TendersSubmitted( @@ -108,7 +110,7 @@ class _YourTendersDesktopPageState extends State children: [ const Spacer(), Text( - 'Page', + YourTendersStrings.page, style: TextStyle( fontSize: 13.0.sp(), fontWeight: FontWeight.w300, @@ -124,7 +126,7 @@ class _YourTendersDesktopPageState extends State return AlertDialog( backgroundColor: AppColors.backgroundColor, - title: const Text('Select Page'), + title: const Text(YourTendersStrings.selectPage), content: SizedBox( width: 200.0.w(), height: 300.0.h(), @@ -134,7 +136,7 @@ class _YourTendersDesktopPageState extends State final pageNumber = index + 1; return ListTile( title: Text( - 'Page $pageNumber', + '${YourTendersStrings.page} $pageNumber', ), onTap: () => Navigator.pop( @@ -181,7 +183,7 @@ class _YourTendersDesktopPageState extends State ), SizedBox(width: 5.0.w()), Text( - 'of', + YourTendersStrings.of, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w400, diff --git a/lib/views/your_tenders/pages/your_tenders_mobile_page.dart b/lib/views/your_tenders/pages/your_tenders_mobile_page.dart index 5be41f2..e587392 100644 --- a/lib/views/your_tenders/pages/your_tenders_mobile_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_mobile_page.dart @@ -69,6 +69,7 @@ class _YourTendersMobilePageState extends State { data: viewModel.likedTendersData!, status: TenderFeedback.liked.value, isDesktop: false, + isMobile: true, ), ) else if (viewModel.selectedStatus == @@ -79,6 +80,7 @@ class _YourTendersMobilePageState extends State { data: viewModel.likedTendersData!, status: TenderFeedback.disliked.value, isDesktop: false, + isMobile: true, ), ) else if (viewModel.data != null) diff --git a/lib/views/your_tenders/pages/your_tenders_tablet_page.dart b/lib/views/your_tenders/pages/your_tenders_tablet_page.dart index f84eaef..00a137c 100644 --- a/lib/views/your_tenders/pages/your_tenders_tablet_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_tablet_page.dart @@ -82,6 +82,7 @@ class _YourTendersTabletPageState extends State data: viewModel.likedTendersData!, status: TenderFeedback.liked.value, isDesktop: false, + isMobile: false, ); } else if (viewModel.selectedStatus == YourTendersStrings.dislikeTenders && @@ -90,6 +91,7 @@ class _YourTendersTabletPageState extends State data: viewModel.likedTendersData!, status: TenderFeedback.disliked.value, isDesktop: false, + isMobile: false, ); } else if (viewModel.data != null) { content = TendersSubmitted( @@ -112,7 +114,7 @@ class _YourTendersTabletPageState extends State children: [ const Spacer(), Text( - 'Page', + YourTendersStrings.page, style: TextStyle( fontSize: 13.0, fontWeight: FontWeight.w300, @@ -127,7 +129,7 @@ class _YourTendersTabletPageState extends State builder: (context) { return AlertDialog( backgroundColor: AppColors.backgroundColor, - title: const Text('Select Page'), + title: const Text(YourTendersStrings.selectPage), content: SizedBox( width: 200.0.w(), height: 300.0.h(), @@ -136,7 +138,7 @@ class _YourTendersTabletPageState extends State itemBuilder: (context, index) { final pageNumber = index + 1; return ListTile( - title: Text('Page $pageNumber'), + title: Text('${YourTendersStrings.page} $pageNumber'), onTap: () => Navigator.pop( context, pageNumber, @@ -181,7 +183,7 @@ class _YourTendersTabletPageState extends State ), SizedBox(width: 5.0), Text( - 'of', + YourTendersStrings.page, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w400, diff --git a/lib/views/your_tenders/strings/your_tenders_strings.dart b/lib/views/your_tenders/strings/your_tenders_strings.dart index 4b1ecf0..2dddf48 100644 --- a/lib/views/your_tenders/strings/your_tenders_strings.dart +++ b/lib/views/your_tenders/strings/your_tenders_strings.dart @@ -18,4 +18,7 @@ class YourTendersStrings { static const noLikedTenders = 'You haven’t liked any tenders yet !'; static const noDislikedTenders = 'You haven’t disliked any tenders yet !'; static const noTendersSubmitted = 'You haven’t submitted any tenders yet !'; + static const page = 'Page'; + static const of = 'of'; + static const selectPage ='Select Page'; } diff --git a/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart b/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart index c09d085..af0e2bd 100644 --- a/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart +++ b/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart @@ -13,11 +13,13 @@ class LikedDislikedTendersList extends StatefulWidget { final LikedTendersResponse data; final String status; final bool isDesktop; + final bool isMobile; const LikedDislikedTendersList({ required this.data, required this.status, required this.isDesktop, + required this.isMobile, super.key, }); @@ -69,7 +71,7 @@ class _LikedDislikedTendersListState extends State { final itemCount = items.length + (vm.isLoadingMore ? 1 : 0); return ListView.builder( - controller: _controller, + controller: widget.isMobile ? _controller : null, itemCount: itemCount, itemBuilder: (context, index) { if (index >= items.length) {