Fixed pagination bug in tender like filter and fixed current page bug in same page

This commit is contained in:
llsajjad
2025-09-14 13:56:20 +03:30
parent 451fbb6e55
commit d47c85ffd4
6 changed files with 60 additions and 50 deletions
+40 -41
View File
@@ -120,12 +120,11 @@ class YourTendersViewModel with ChangeNotifier {
required String feedbackType, required String feedbackType,
bool reset = false, bool reset = false,
}) async { }) async {
if (reset) { if (reset) {
_offset = (currentPage - 1) * _limit; _offset = (currentPage - 1) * _limit;
hasMore = true; hasMore = true;
_currentFeedbackType = feedbackType; _currentFeedbackType = feedbackType;
} }
if (!reset && (isLoadingMore || !hasMore)) { if (!reset && (isLoadingMore || !hasMore)) {
return; return;
@@ -226,6 +225,7 @@ if (reset) {
// Clear data when status changes // Clear data when status changes
_clearAllData(); _clearAllData();
selectedStatus = status; selectedStatus = status;
currentPage = 1;
notifyListeners(); notifyListeners();
} }
@@ -261,43 +261,42 @@ if (reset) {
notifyListeners(); notifyListeners();
} }
Future<void> callWithFilter() async { Future<void> callWithFilter() async {
likedTendersData = null; likedTendersData = null;
data = null; data = null;
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
if (selectedStatus == YourTendersStrings.all) { if (selectedStatus == YourTendersStrings.all) {
final requestModel = GetTendersRequestModel( final requestModel = GetTendersRequestModel(
status: '', status: '',
createdFrom: startDateUnix, createdFrom: startDateUnix,
createdTo: endDateUnix, createdTo: endDateUnix,
limit: _tendersLimit, limit: _tendersLimit,
offset: _tendersOffset, offset: _tendersOffset,
); );
await getTenders(requestModel: requestModel, reset: true); await getTenders(requestModel: requestModel, reset: true);
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) { } else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
final requestModel = GetTendersRequestModel( final requestModel = GetTendersRequestModel(
status: TenderApprovalStatus.submitted.value, status: TenderApprovalStatus.submitted.value,
createdFrom: startDateUnix, createdFrom: startDateUnix,
createdTo: endDateUnix, createdTo: endDateUnix,
limit: _tendersLimit, limit: _tendersLimit,
offset: _tendersOffset, offset: _tendersOffset,
); );
await getTenders(requestModel: requestModel, reset: true); await getTenders(requestModel: requestModel, reset: true);
} else if (selectedStatus == YourTendersStrings.likeTenders) { } else if (selectedStatus == YourTendersStrings.likeTenders) {
await getTendersFeedback( await getTendersFeedback(
feedbackType: TenderFeedback.liked.value, feedbackType: TenderFeedback.liked.value,
reset: true, reset: true,
); );
} else if (selectedStatus == YourTendersStrings.dislikeTenders) { } else if (selectedStatus == YourTendersStrings.dislikeTenders) {
await getTendersFeedback( await getTendersFeedback(
feedbackType: TenderFeedback.disliked.value, feedbackType: TenderFeedback.disliked.value,
reset: true, reset: true,
); );
}
} }
}
int currentPage = 1; int currentPage = 1;
@@ -78,6 +78,7 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
data: viewModel.likedTendersData!, data: viewModel.likedTendersData!,
status: TenderFeedback.liked.value, status: TenderFeedback.liked.value,
isDesktop: true, isDesktop: true,
isMobile: false,
); );
} else if (viewModel.selectedStatus == } else if (viewModel.selectedStatus ==
YourTendersStrings.dislikeTenders && YourTendersStrings.dislikeTenders &&
@@ -86,6 +87,7 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
data: viewModel.likedTendersData!, data: viewModel.likedTendersData!,
status: TenderFeedback.disliked.value, status: TenderFeedback.disliked.value,
isDesktop: true, isDesktop: true,
isMobile: false,
); );
} else if (viewModel.data != null) { } else if (viewModel.data != null) {
content = TendersSubmitted( content = TendersSubmitted(
@@ -108,7 +110,7 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
children: [ children: [
const Spacer(), const Spacer(),
Text( Text(
'Page', YourTendersStrings.page,
style: TextStyle( style: TextStyle(
fontSize: 13.0.sp(), fontSize: 13.0.sp(),
fontWeight: FontWeight.w300, fontWeight: FontWeight.w300,
@@ -124,7 +126,7 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
return AlertDialog( return AlertDialog(
backgroundColor: backgroundColor:
AppColors.backgroundColor, AppColors.backgroundColor,
title: const Text('Select Page'), title: const Text(YourTendersStrings.selectPage),
content: SizedBox( content: SizedBox(
width: 200.0.w(), width: 200.0.w(),
height: 300.0.h(), height: 300.0.h(),
@@ -134,7 +136,7 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
final pageNumber = index + 1; final pageNumber = index + 1;
return ListTile( return ListTile(
title: Text( title: Text(
'Page $pageNumber', '${YourTendersStrings.page} $pageNumber',
), ),
onTap: onTap:
() => Navigator.pop( () => Navigator.pop(
@@ -181,7 +183,7 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
), ),
SizedBox(width: 5.0.w()), SizedBox(width: 5.0.w()),
Text( Text(
'of', YourTendersStrings.of,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -69,6 +69,7 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage> {
data: viewModel.likedTendersData!, data: viewModel.likedTendersData!,
status: TenderFeedback.liked.value, status: TenderFeedback.liked.value,
isDesktop: false, isDesktop: false,
isMobile: true,
), ),
) )
else if (viewModel.selectedStatus == else if (viewModel.selectedStatus ==
@@ -79,6 +80,7 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage> {
data: viewModel.likedTendersData!, data: viewModel.likedTendersData!,
status: TenderFeedback.disliked.value, status: TenderFeedback.disliked.value,
isDesktop: false, isDesktop: false,
isMobile: true,
), ),
) )
else if (viewModel.data != null) else if (viewModel.data != null)
@@ -82,6 +82,7 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
data: viewModel.likedTendersData!, data: viewModel.likedTendersData!,
status: TenderFeedback.liked.value, status: TenderFeedback.liked.value,
isDesktop: false, isDesktop: false,
isMobile: false,
); );
} else if (viewModel.selectedStatus == } else if (viewModel.selectedStatus ==
YourTendersStrings.dislikeTenders && YourTendersStrings.dislikeTenders &&
@@ -90,6 +91,7 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
data: viewModel.likedTendersData!, data: viewModel.likedTendersData!,
status: TenderFeedback.disliked.value, status: TenderFeedback.disliked.value,
isDesktop: false, isDesktop: false,
isMobile: false,
); );
} else if (viewModel.data != null) { } else if (viewModel.data != null) {
content = TendersSubmitted( content = TendersSubmitted(
@@ -112,7 +114,7 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
children: [ children: [
const Spacer(), const Spacer(),
Text( Text(
'Page', YourTendersStrings.page,
style: TextStyle( style: TextStyle(
fontSize: 13.0, fontSize: 13.0,
fontWeight: FontWeight.w300, fontWeight: FontWeight.w300,
@@ -127,7 +129,7 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
builder: (context) { builder: (context) {
return AlertDialog( return AlertDialog(
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
title: const Text('Select Page'), title: const Text(YourTendersStrings.selectPage),
content: SizedBox( content: SizedBox(
width: 200.0.w(), width: 200.0.w(),
height: 300.0.h(), height: 300.0.h(),
@@ -136,7 +138,7 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
itemBuilder: (context, index) { itemBuilder: (context, index) {
final pageNumber = index + 1; final pageNumber = index + 1;
return ListTile( return ListTile(
title: Text('Page $pageNumber'), title: Text('${YourTendersStrings.page} $pageNumber'),
onTap: () => Navigator.pop( onTap: () => Navigator.pop(
context, context,
pageNumber, pageNumber,
@@ -181,7 +183,7 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
), ),
SizedBox(width: 5.0), SizedBox(width: 5.0),
Text( Text(
'of', YourTendersStrings.page,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -18,4 +18,7 @@ class YourTendersStrings {
static const noLikedTenders = 'You havent liked any tenders yet !'; static const noLikedTenders = 'You havent liked any tenders yet !';
static const noDislikedTenders = 'You havent disliked any tenders yet !'; static const noDislikedTenders = 'You havent disliked any tenders yet !';
static const noTendersSubmitted = 'You havent submitted any tenders yet !'; static const noTendersSubmitted = 'You havent submitted any tenders yet !';
static const page = 'Page';
static const of = 'of';
static const selectPage ='Select Page';
} }
@@ -13,11 +13,13 @@ class LikedDislikedTendersList extends StatefulWidget {
final LikedTendersResponse data; final LikedTendersResponse data;
final String status; final String status;
final bool isDesktop; final bool isDesktop;
final bool isMobile;
const LikedDislikedTendersList({ const LikedDislikedTendersList({
required this.data, required this.data,
required this.status, required this.status,
required this.isDesktop, required this.isDesktop,
required this.isMobile,
super.key, super.key,
}); });
@@ -69,7 +71,7 @@ class _LikedDislikedTendersListState extends State<LikedDislikedTendersList> {
final itemCount = items.length + (vm.isLoadingMore ? 1 : 0); final itemCount = items.length + (vm.isLoadingMore ? 1 : 0);
return ListView.builder( return ListView.builder(
controller: _controller, controller: widget.isMobile ? _controller : null,
itemCount: itemCount, itemCount: itemCount,
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index >= items.length) { if (index >= items.length) {