Add liked tenders functionality to HomeRepository and ViewModel

- Integrated LikedTendersService into HomeRepository to fetch the count of user-liked tenders.
- Updated HomeViewModel to load and manage the userLikedTendersCount.
- Adjusted UI components across home pages to display the liked tenders count.
- Refactored date handling in date_utils.dart to improve timestamp parsing and validation.
- Enhanced unit tests for date utilities to cover new edge cases.
This commit is contained in:
AmirReza Jamali
2026-05-24 18:23:37 +03:30
parent 2515190576
commit 35af3e94ea
9 changed files with 114 additions and 44 deletions
+16 -10
View File
@@ -1,13 +1,11 @@
import 'package:flutter/material.dart';
import 'package:tm_app/core/utils/result.dart';
import 'package:tm_app/data/services/model/feedback_stats/feedback_stats.dart';
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart';
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
import 'package:tm_app/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart';
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
import '../data/repositories/home_repository.dart';
import '../data/services/model/feedback_stats_response/feedback_stat_response.dart';
import '../data/services/model/home/home_response/home_response_model.dart';
import '../data/services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart';
import '../data/services/notification_state_service.dart';
@@ -46,7 +44,7 @@ class HomeViewModel with ChangeNotifier {
RecommendedTendersResponse? _recommendedTendersResponse;
TenderApprovalsStatsResponse? tenderApprovalsStateResponse;
FeedbackStats? feedbackStats;
int userLikedTendersCount = 0;
final List<TenderData> _tenders = [];
final int _pageSize = 10;
int _currentPage = 0;
@@ -65,11 +63,19 @@ class HomeViewModel with ChangeNotifier {
void init() async {
_isLoading = true;
_errorMessage = null;
userLikedTendersCount = 0;
_tenders.clear();
_currentPage = 0;
_hasMore = true;
_isRecommendedMode = false;
data = null;
tenderApprovalsStateResponse = null;
notifyListeners();
await getApprovedStates();
await getYourTenders(reset: true);
await getFeedbackStats();
await loadUserLikedTendersCount();
if (_errorMessage != null) {
_isLoading = false;
@@ -192,15 +198,15 @@ class HomeViewModel with ChangeNotifier {
notifyListeners();
}
Future<void> getFeedbackStats() async {
final result = await _homeRepository.getFeedbackStats();
Future<void> loadUserLikedTendersCount() async {
final result = await _homeRepository.getUserLikedTendersCount();
switch (result) {
case Ok<FeedbackStatResponse>():
feedbackStats = result.value.data;
case Ok<int>():
userLikedTendersCount = result.value;
break;
case Error<FeedbackStatResponse>():
_errorMessage = result.error.toString();
case Error<int>():
userLikedTendersCount = 0;
break;
}
notifyListeners();