added pagination in your tenders and some fixes

This commit is contained in:
amirrezaghabeli
2025-09-07 12:15:43 +03:30
parent dd31c54cff
commit cd32bbd812
12 changed files with 313 additions and 448 deletions
+47 -52
View File
@@ -14,7 +14,7 @@ class HomeViewModel with ChangeNotifier {
final HomeRepository _homeRepository;
HomeViewModel({required HomeRepository homeRepository})
: _homeRepository = homeRepository {
: _homeRepository = homeRepository {
init();
}
@@ -31,7 +31,7 @@ class HomeViewModel with ChangeNotifier {
TenderApprovalsStateResponse? tenderApprovalsStateResponse;
FeedbackStats? feedbackStats;
final List<TenderData> _tenders = [];
final int _pageSize = 20;
final int _pageSize = 10;
int _currentPage = 0;
bool _isLoadingMore = false;
bool _hasMore = true;
@@ -44,9 +44,15 @@ class HomeViewModel with ChangeNotifier {
bool get isRecommendedMode => _isRecommendedMode;
void init() async {
_isLoading = true;
notifyListeners();
await getApprovedStates();
await getYourTenders(reset: true);
await getFeedbackStats();
_isLoading = false;
notifyListeners();
}
Future<void> getHomeRecommendTenders({bool reset = false}) async {
@@ -93,62 +99,59 @@ class HomeViewModel with ChangeNotifier {
notifyListeners();
}
Future<void> getYourTenders({bool reset = false}) async {
if (_isLoadingMore || (!_hasMore && !reset)) {
return;
}
Future<void> getYourTenders({bool reset = false}) async {
if (_isLoadingMore || (!_hasMore && !reset)) {
return;
}
if (reset) {
_currentPage = 0;
_hasMore = true;
_tenders.clear();
}
if (reset) {
_currentPage = 0;
_hasMore = true;
_tenders.clear();
}
_isLoadingMore = true;
_errorMessage = null;
_isRecommendedMode = false;
notifyListeners();
_isLoadingMore = true;
_errorMessage = null;
_isRecommendedMode = false;
notifyListeners();
final result = await _homeRepository.getYourTenders(
limit: _pageSize,
offset: _currentPage * _pageSize,
);
final result = await _homeRepository.getYourTenders(
limit: _pageSize,
offset: _currentPage * _pageSize,
);
switch (result) {
case Ok<TenderApprovalsResponse>():
data = result.value;
switch (result) {
case Ok<TenderApprovalsResponse>():
data = result.value;
final tendersList = data?.data?.tenders ?? [];
final metadata = data?.data?.metadata;
final tendersList = data?.data?.tenders ?? [];
final metadata = data?.data?.metadata;
if (tendersList.isNotEmpty) {
_tenders.addAll(
tendersList.map((e) => e.tender).whereType<TenderData>(),
);
_currentPage++;
if (tendersList.isNotEmpty) {
_tenders.addAll(
tendersList.map((e) => e.tender).whereType<TenderData>(),
);
_currentPage++;
if (metadata != null && (_currentPage >= metadata.pages!)) {
if (metadata != null && (_currentPage >= metadata.pages!)) {
_hasMore = false;
}
} else {
_hasMore = false;
}
} else {
_hasMore = false;
}
break;
break;
case Error<TenderApprovalsResponse>():
_errorMessage = result.error.toString();
break;
case Error<TenderApprovalsResponse>():
_errorMessage = result.error.toString();
break;
}
_isLoadingMore = false;
notifyListeners();
}
_isLoadingMore = false;
notifyListeners();
}
Future<void> getApprovedStates() async {
_isLoading = true;
_errorMessage = null;
notifyListeners();
final result = await _homeRepository.getTendersApprovalsState();
@@ -160,15 +163,10 @@ Future<void> getYourTenders({bool reset = false}) async {
_errorMessage = result.error.toString();
break;
}
_isLoading = false;
notifyListeners();
}
Future<void> getFeedbackStats() async {
_isLoading = true;
_errorMessage = null;
notifyListeners();
final result = await _homeRepository.getFeedbackStats();
@@ -180,9 +178,6 @@ Future<void> getYourTenders({bool reset = false}) async {
_errorMessage = result.error.toString();
break;
}
_isLoading = false;
notifyListeners();
}
double get partnershipCount {