Fixed your tender and recommendedTenders in home

This commit is contained in:
llsajjad
2025-08-20 10:35:36 +03:30
parent 4b0dc4cedf
commit 45a2f854a4
5 changed files with 64 additions and 5 deletions
+1
View File
@@ -35,6 +35,7 @@ class AppStrings {
static const String recommendation = 'Recommendation'; static const String recommendation = 'Recommendation';
static const String welcome = 'Welcome'; static const String welcome = 'Welcome';
static const String tenderDeadline = 'Deadline'; static const String tenderDeadline = 'Deadline';
static const String recommendedTenders = 'Recommended Tenders';
//Tenders //Tenders
static const String tendersTitle = 'Tenders'; static const String tendersTitle = 'Tenders';
@@ -3,6 +3,7 @@ import 'package:tm_app/data/services/home_service.dart';
import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart'; import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart';
import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart'; import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart';
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.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';
class HomeRepository { class HomeRepository {
HomeRepository({required HomeService homeService}) HomeRepository({required HomeService homeService})
@@ -21,4 +22,7 @@ class HomeRepository {
}) async { }) async {
return _homeService.getRecommendedTenders(limit: limit, offset: offset); return _homeService.getRecommendedTenders(limit: limit, offset: offset);
} }
Future<Result<TenderApprovalsResponse>> getYourTenders() {
return _homeService.getYourTenders();
}
} }
+18
View File
@@ -7,6 +7,7 @@ import 'package:tm_app/data/services/mock_data/home_mock_data.dart';
import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart'; import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart';
import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart'; import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart';
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.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 '../../core/network/network_manager.dart'; import '../../core/network/network_manager.dart';
@@ -50,4 +51,21 @@ class HomeService {
); );
return result; return result;
} }
Future<Result<TenderApprovalsResponse>> getYourTenders() async {
try {
final result = await _networkManager.makeRequest(
'/api/v1/tender-approvals',
(json) => TenderApprovalsResponse.fromJson(json),
method: 'GET',
);
return result;
} on DioException catch (e) {
appLogger.error('get approved tenders failed: $e');
return Result.error(e);
} on Exception catch (e, stackTrace) {
appLogger.error('get approved tenders failed: $e', stackTrace: stackTrace);
return Result.error(Exception(e));
}
}
} }
+36 -2
View File
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:tm_app/core/utils/result.dart'; import 'package:tm_app/core/utils/result.dart';
import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart'; import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart';
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.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_data/tender_data.dart'; import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
import '../data/repositories/home_repository.dart'; import '../data/repositories/home_repository.dart';
@@ -11,14 +12,15 @@ class HomeViewModel with ChangeNotifier {
final HomeRepository _homeRepository; final HomeRepository _homeRepository;
HomeViewModel({required HomeRepository homeRepository}) HomeViewModel({required HomeRepository homeRepository})
: _homeRepository = homeRepository { : _homeRepository = homeRepository {
getHome(homeRequestModel: HomeRequestModel(id: '1')); getHome(homeRequestModel: HomeRequestModel(id: '1'));
getHomeRecommandTenders(reset: true); getYourTenders();
} }
bool _isLoading = false; bool _isLoading = false;
String? _errorMessage; String? _errorMessage;
HomeResponseModel? _homeResponse; HomeResponseModel? _homeResponse;
TenderApprovalsResponse? data;
bool get isLoading => _isLoading; bool get isLoading => _isLoading;
String? get errorMessage => _errorMessage; String? get errorMessage => _errorMessage;
@@ -97,4 +99,36 @@ class HomeViewModel with ChangeNotifier {
_isLoadingMore = false; _isLoadingMore = false;
notifyListeners(); notifyListeners();
} }
Future<void> getYourTenders() async {
_isLoading = true;
notifyListeners();
final result = await _homeRepository.getYourTenders();
switch (result) {
case Ok<TenderApprovalsResponse>():
data = result.value;
_errorMessage = null;
if (data?.data?.isEmpty ?? true) {
await getHomeRecommandTenders(reset: true);
} else {
_tenders.clear();
_tenders.addAll(
data!.data!
.map((e) => e.tender)
.whereType<TenderData>(),
);
}
case Error<TenderApprovalsResponse>():
_errorMessage = result.error.toString();
await getHomeRecommandTenders(reset: true);
break;
}
_isLoading = false;
notifyListeners();
}
} }
+5 -3
View File
@@ -30,6 +30,7 @@ class MobileHomePage extends StatelessWidget {
if (homeViewModel.errorMessage != null) { if (homeViewModel.errorMessage != null) {
return Center(child: Text(homeViewModel.errorMessage!)); return Center(child: Text(homeViewModel.errorMessage!));
} }
if (homeViewModel.homeResponse != null) { if (homeViewModel.homeResponse != null) {
return SingleChildScrollView( return SingleChildScrollView(
child: Column( child: Column(
@@ -44,7 +45,7 @@ class MobileHomePage extends StatelessWidget {
SizedBox(height: 8.0.h()), SizedBox(height: 8.0.h()),
_secondTenderCardsRow(homeViewModel.homeResponse!), _secondTenderCardsRow(homeViewModel.homeResponse!),
SizedBox(height: 40.0.h()), SizedBox(height: 40.0.h()),
_yourTenderText(), _yourTenderText(homeViewModel),
_bottomListView(homeViewModel), _bottomListView(homeViewModel),
], ],
), ),
@@ -149,11 +150,12 @@ class MobileHomePage extends StatelessWidget {
); );
} }
Widget _yourTenderText() { Widget _yourTenderText(HomeViewModel homeViewModel) {
final isYourTenders = homeViewModel.data?.data?.isNotEmpty ?? false;
return Padding( return Padding(
padding: EdgeInsets.symmetric(horizontal: 24.0.w()), padding: EdgeInsets.symmetric(horizontal: 24.0.w()),
child: Text( child: Text(
AppStrings.recommendation, isYourTenders ? AppStrings.yourTenders : AppStrings.recommendedTenders,
style: TextStyle( style: TextStyle(
fontSize: 18.0.sp(), fontSize: 18.0.sp(),
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,