From daba428d67697ed494d8688a3e2e2aa71547309b Mon Sep 17 00:00:00 2001 From: amirrezaghabeli Date: Mon, 8 Sep 2025 10:48:05 +0330 Subject: [PATCH 1/5] get like tenders refactor services --- lib/core/config/app_config.dart | 4 +-- lib/core/config/dependencies.dart | 6 +++-- .../liked_tenders_repository.dart | 6 ++--- .../repositories/your_tenders_repository.dart | 25 ++++++++----------- lib/data/services/api/liked_tenders_api.dart | 16 ++++++++++-- lib/data/services/api/your_tenders_api.dart | 15 ----------- lib/data/services/liked_tenders_service.dart | 12 ++++++--- .../tender_feedback_request_model.dart | 15 +++++++++++ lib/data/services/your_tenders_service.dart | 22 ---------------- lib/view_models/liked_tenders_view_model.dart | 8 +++++- lib/view_models/your_tenders_view_model.dart | 9 +++++-- 11 files changed, 72 insertions(+), 66 deletions(-) create mode 100644 lib/data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart diff --git a/lib/core/config/app_config.dart b/lib/core/config/app_config.dart index 542bc74..8e569f5 100644 --- a/lib/core/config/app_config.dart +++ b/lib/core/config/app_config.dart @@ -8,13 +8,13 @@ class AppConfig { // این متد بر اساس محیط فعال، URL مناسب را برمی‌گرداند. static String get apiBaseUrl { - // return 'http://10.0.2.2:8081'; + return 'http://10.0.2.2:8081'; // return '192.168.1.103:8081'; // if (isDevelopment) { // // Handle different platforms for local development // if (kIsWeb) { // For web, use localhost - return 'https://app.opplens.com'; + // return 'https://app.opplens.com'; // return 'http://localhost:8081'; // } else { // For Android emulator, use 10.0.2.2 (special IP for host machine) diff --git a/lib/core/config/dependencies.dart b/lib/core/config/dependencies.dart index 0fdb68d..5c3bdfb 100644 --- a/lib/core/config/dependencies.dart +++ b/lib/core/config/dependencies.dart @@ -64,8 +64,10 @@ List get repositories { Provider(create: (context) => AuthRepository(authService: context.read())), Provider( create: - (context) => - YourTendersRepository(yourTendersService: context.read()), + (context) => YourTendersRepository( + yourTendersService: context.read(), + likedTendersService: context.read(), + ), ), Provider( create: diff --git a/lib/data/repositories/liked_tenders_repository.dart b/lib/data/repositories/liked_tenders_repository.dart index e944797..6f2d575 100644 --- a/lib/data/repositories/liked_tenders_repository.dart +++ b/lib/data/repositories/liked_tenders_repository.dart @@ -1,6 +1,7 @@ import 'package:tm_app/core/utils/result.dart'; import 'package:tm_app/data/services/liked_tenders_service.dart'; import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_response.dart'; +import 'package:tm_app/data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; class LikedTendersRepository { final LikedTendersService _likedTendersService; @@ -8,9 +9,8 @@ class LikedTendersRepository { : _likedTendersService = likedTendersService; Future> getLikedTenders({ - int offset = 0, - int limit = 20, + required TenderFeedbackRequestModel requestModel, }) { - return _likedTendersService.getLikedTenders(offset: offset, limit: limit); + return _likedTendersService.getLikedTenders(requestModel: requestModel); } } diff --git a/lib/data/repositories/your_tenders_repository.dart b/lib/data/repositories/your_tenders_repository.dart index 2968a73..7f59ee2 100644 --- a/lib/data/repositories/your_tenders_repository.dart +++ b/lib/data/repositories/your_tenders_repository.dart @@ -1,13 +1,20 @@ import 'package:tm_app/core/utils/result.dart'; +import 'package:tm_app/data/services/liked_tenders_service.dart'; import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_response.dart'; import 'package:tm_app/data/services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart'; import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart'; import 'package:tm_app/data/services/your_tenders_service.dart'; +import '../services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; + class YourTendersRepository { final YourTendersService _yourTendersService; - YourTendersRepository({required YourTendersService yourTendersService}) - : _yourTendersService = yourTendersService; + final LikedTendersService _likedTendersService; + YourTendersRepository({ + required YourTendersService yourTendersService, + required LikedTendersService likedTendersService, + }) : _yourTendersService = yourTendersService, + _likedTendersService = likedTendersService; Future> getApprovedTenders({ required int limit, @@ -30,18 +37,8 @@ class YourTendersRepository { } Future> getTendersFeedback({ - required int limit, - required int offset, - required String feedbackType, - required String dateFrom, - required String dateTo, + required TenderFeedbackRequestModel requestModel, }) { - return _yourTendersService.getTendersFeedback( - limit: limit, - offset: offset, - feedbackType: feedbackType, - dateFrom: dateFrom, - dateTo: dateTo, - ); + return _likedTendersService.getLikedTenders(requestModel: requestModel); } } diff --git a/lib/data/services/api/liked_tenders_api.dart b/lib/data/services/api/liked_tenders_api.dart index 94d0f34..673fb72 100644 --- a/lib/data/services/api/liked_tenders_api.dart +++ b/lib/data/services/api/liked_tenders_api.dart @@ -1,4 +1,16 @@ class LikedTendersApi { - static const String likedTenders = - '/api/v1/feedback?feedback_type=like'; + static const String tendersFeedback = '/api/v1/feedback'; + + static String getTendersFeedback({ + required int limit, + required int offset, + required String feedbackType, + required String dateFrom, + required String dateTo, + }) { + if (dateFrom.isNotEmpty && dateTo.isNotEmpty) { + return '$tendersFeedback?feedback_type=$feedbackType&limit=$limit&offset=$offset&date_from=$dateFrom&date_to=$dateTo'; + } + return '$tendersFeedback?feedback_type=$feedbackType&limit=$limit&offset=$offset'; + } } diff --git a/lib/data/services/api/your_tenders_api.dart b/lib/data/services/api/your_tenders_api.dart index fbb00cd..5dab60b 100644 --- a/lib/data/services/api/your_tenders_api.dart +++ b/lib/data/services/api/your_tenders_api.dart @@ -36,19 +36,4 @@ class YourTendersApi { return url; } - - static const String tendersFeedback = '/api/v1/feedback'; - - static String getTendersFeedback({ - required int limit, - required int offset, - required String feedbackType, - required String dateFrom, - required String dateTo, - }) { - if (dateFrom.isNotEmpty && dateTo.isNotEmpty) { - return '$tendersFeedback?feedback_type=$feedbackType&limit=$limit&offset=$offset&date_from=$dateFrom&date_to=$dateTo'; - } - return '$tendersFeedback?feedback_type=$feedbackType&limit=$limit&offset=$offset'; - } } diff --git a/lib/data/services/liked_tenders_service.dart b/lib/data/services/liked_tenders_service.dart index b58a79d..75b304a 100644 --- a/lib/data/services/liked_tenders_service.dart +++ b/lib/data/services/liked_tenders_service.dart @@ -3,6 +3,7 @@ import 'package:tm_app/data/services/api/liked_tenders_api.dart'; import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_response.dart'; import '../../../core/network/network_manager.dart'; +import 'model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; class LikedTendersService { LikedTendersService({required NetworkManager networkManager}) @@ -11,10 +12,15 @@ class LikedTendersService { final NetworkManager _networkManager; Future> getLikedTenders({ - int offset = 0, - int limit = 20, + required TenderFeedbackRequestModel requestModel, }) async { - final uri = '${LikedTendersApi.likedTenders}&limit=$limit&offset=$offset'; + final uri = LikedTendersApi.getTendersFeedback( + limit: requestModel.limit, + offset: requestModel.offset, + feedbackType: requestModel.feedbackType, + dateFrom: requestModel.dateFrom, + dateTo: requestModel.dateTo, + ); final result = await _networkManager.makeRequest( uri, diff --git a/lib/data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart b/lib/data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart new file mode 100644 index 0000000..c56470b --- /dev/null +++ b/lib/data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart @@ -0,0 +1,15 @@ +class TenderFeedbackRequestModel { + final String feedbackType; + final String dateFrom; + final String dateTo; + final int limit; + final int offset; + + TenderFeedbackRequestModel({ + required this.feedbackType, + this.dateFrom = '', + this.dateTo = '', + this.limit = 10, + this.offset = 0, + }); +} diff --git a/lib/data/services/your_tenders_service.dart b/lib/data/services/your_tenders_service.dart index 7a9b499..3234744 100644 --- a/lib/data/services/your_tenders_service.dart +++ b/lib/data/services/your_tenders_service.dart @@ -1,6 +1,5 @@ import 'package:tm_app/core/utils/result.dart'; import 'package:tm_app/data/services/api/your_tenders_api.dart'; -import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_response.dart'; import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart'; import '../../../core/network/network_manager.dart'; @@ -48,25 +47,4 @@ class YourTendersService { ); return result; } - - Future> getTendersFeedback({ - required int limit, - required int offset, - required String feedbackType, - required String dateFrom, - required String dateTo, - }) async { - final result = await _networkManager.makeRequest( - YourTendersApi.getTendersFeedback( - limit: limit, - offset: offset, - feedbackType: feedbackType, - dateFrom: dateFrom, - dateTo: dateTo, - ), - (json) => LikedTendersResponse.fromJson(json), - method: 'GET', - ); - return result; - } } diff --git a/lib/view_models/liked_tenders_view_model.dart b/lib/view_models/liked_tenders_view_model.dart index 4dd0c66..0799a6d 100644 --- a/lib/view_models/liked_tenders_view_model.dart +++ b/lib/view_models/liked_tenders_view_model.dart @@ -8,6 +8,7 @@ import 'package:tm_app/data/services/model/tender_approvals_toggle_response/tend import 'package:tm_app/view_models/home_view_model.dart'; import '../data/services/model/feedback_response/feedback_response.dart'; +import '../data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart'; import '../data/services/model/tender_approvals_data/tender_approvals_data.dart'; @@ -83,9 +84,14 @@ class LikedTendersViewModel with ChangeNotifier { errorMessage = null; - final result = await _likedTendersRepository.getLikedTenders( + final requestModel = TenderFeedbackRequestModel( offset: _offset, limit: _limit, + feedbackType: 'like', + ); + + final result = await _likedTendersRepository.getLikedTenders( + requestModel: requestModel, ); switch (result) { diff --git a/lib/view_models/your_tenders_view_model.dart b/lib/view_models/your_tenders_view_model.dart index 295ff11..3be71e0 100644 --- a/lib/view_models/your_tenders_view_model.dart +++ b/lib/view_models/your_tenders_view_model.dart @@ -7,6 +7,7 @@ import 'package:tm_app/data/services/model/tender_approvals_response/tender_appr import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart'; import '../data/services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart'; +import '../data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; class YourTendersViewModel with ChangeNotifier { final YourTendersRepository yourTendersRepository; @@ -132,14 +133,18 @@ class YourTendersViewModel with ChangeNotifier { } notifyListeners(); - final result = await yourTendersRepository.getTendersFeedback( - limit: _limit, + final requestModel = TenderFeedbackRequestModel( offset: _offset, + limit: _limit, feedbackType: _currentFeedbackType ?? feedbackType, dateFrom: startDateUnix, dateTo: endDateUnix, ); + final result = await yourTendersRepository.getTendersFeedback( + requestModel: requestModel, + ); + switch (result) { case Ok(): final incoming = result.value; From 65822036c80afa6dbc229cc787c25c8198c8066d Mon Sep 17 00:00:00 2001 From: amirrezaghabeli Date: Mon, 8 Sep 2025 11:06:25 +0330 Subject: [PATCH 2/5] tender stat model naming fixed --- lib/data/repositories/home_repository.dart | 4 +- lib/data/services/home_service.dart | 6 +- .../tender_approvals_state_response.dart | 22 ---- .../tender_approvals_stats_data.dart} | 14 +- .../tender_approvals_stats_data.freezed.dart} | 94 ++++++------- .../tender_approvals_stats_data.g.dart} | 10 +- .../tender_approvals_stats_response.dart | 23 ++++ ...der_approvals_stats_response.freezed.dart} | 124 +++++++++--------- .../tender_approvals_stats_response.g.dart} | 12 +- lib/view_models/home_view_model.dart | 8 +- lib/views/home/pages/m_home_page.dart | 4 +- lib/views/home/pages/t_home_page.dart | 4 +- 12 files changed, 163 insertions(+), 162 deletions(-) delete mode 100644 lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart rename lib/data/services/model/{tender_approvals_state_data/tender_approvals_state_data.dart => tender_approvals_stats_data/tender_approvals_stats_data.dart} (81%) rename lib/data/services/model/{tender_approvals_state_data/tender_approvals_state_data.freezed.dart => tender_approvals_stats_data/tender_approvals_stats_data.freezed.dart} (91%) rename lib/data/services/model/{tender_approvals_state_data/tender_approvals_state_data.g.dart => tender_approvals_stats_data/tender_approvals_stats_data.g.dart} (91%) create mode 100644 lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart rename lib/data/services/model/{tender_approvals_state_response/tender_approvals_state_response.freezed.dart => tender_approvals_stats_response/tender_approvals_stats_response.freezed.dart} (68%) rename lib/data/services/model/{tender_approvals_state_response/tender_approvals_state_response.g.dart => tender_approvals_stats_response/tender_approvals_stats_response.g.dart} (71%) diff --git a/lib/data/repositories/home_repository.dart b/lib/data/repositories/home_repository.dart index 7b138b3..ea7df6c 100644 --- a/lib/data/repositories/home_repository.dart +++ b/lib/data/repositories/home_repository.dart @@ -2,7 +2,7 @@ import 'package:tm_app/core/utils/result.dart'; import 'package:tm_app/data/services/home_service.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_state_response/tender_approvals_state_response.dart'; +import 'package:tm_app/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart'; import '../services/model/feedback_stats_response/feedback_stat_response.dart'; import '../services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart'; @@ -30,7 +30,7 @@ class HomeRepository { return _yourTendersService.getTenders(requestModel: requestModel); } - Future> getTendersApprovalsStats() { + Future> getTendersApprovalsStats() { return _homeService.getTendersApprovalsStats(); } diff --git a/lib/data/services/home_service.dart b/lib/data/services/home_service.dart index 0d8ce9b..d81e1d4 100644 --- a/lib/data/services/home_service.dart +++ b/lib/data/services/home_service.dart @@ -2,7 +2,7 @@ import 'package:tm_app/core/utils/result.dart'; import 'package:tm_app/data/services/api/home_api.dart'; import 'package:tm_app/data/services/model/feedback_stats_response/feedback_stat_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_state_response/tender_approvals_state_response.dart'; +import 'package:tm_app/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart'; import '../../core/network/network_manager.dart'; @@ -23,11 +23,11 @@ class HomeService { return result; } - Future> + Future> getTendersApprovalsStats() async { final result = await _networkManager.makeRequest( HomeApi.tenderApprovalStats, - (json) => TenderApprovalsStateResponse.fromJson(json), + (json) => TenderApprovalsStatsResponse.fromJson(json), method: 'GET', ); return result; diff --git a/lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart b/lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart deleted file mode 100644 index dccc28a..0000000 --- a/lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart +++ /dev/null @@ -1,22 +0,0 @@ -// ignore_for_file: invalid_annotation_target - -import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:tm_app/data/services/model/error/error_model.dart'; -import 'package:tm_app/data/services/model/tender_approvals_state_data/tender_approvals_state_data.dart'; - -part 'tender_approvals_state_response.freezed.dart'; -part 'tender_approvals_state_response.g.dart'; - -@freezed -abstract class TenderApprovalsStateResponse with _$TenderApprovalsStateResponse { - @JsonSerializable(explicitToJson: true) - const factory TenderApprovalsStateResponse({ - @JsonKey(name: 'success') required bool? success, - @JsonKey(name: 'message') required String? message, - @JsonKey(name: 'error') ErrorModel? error, - @JsonKey(name: 'data') TenderApprovalsStateData? data, - }) = _TenderApprovalsStateResponse; - - factory TenderApprovalsStateResponse.fromJson(Map json) => - _$TenderApprovalsStateResponseFromJson(json); -} diff --git a/lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.dart b/lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.dart similarity index 81% rename from lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.dart rename to lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.dart index 0a21b95..ee4e26b 100644 --- a/lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.dart +++ b/lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.dart @@ -2,13 +2,13 @@ import 'package:freezed_annotation/freezed_annotation.dart'; -part 'tender_approvals_state_data.freezed.dart'; -part 'tender_approvals_state_data.g.dart'; +part 'tender_approvals_stats_data.freezed.dart'; +part 'tender_approvals_stats_data.g.dart'; @freezed -abstract class TenderApprovalsStateData with _$TenderApprovalsStateData { +abstract class TenderApprovalsStatsData with _$TenderApprovalsStatsData { @JsonSerializable(explicitToJson: true) - const factory TenderApprovalsStateData({ + const factory TenderApprovalsStatsData({ @JsonKey(name: 'company_id') required String? companyId, @JsonKey(name: 'total_approvals') required int? totalApprovals, @JsonKey(name: 'submitted_tenders') required int? submittedTenders, @@ -20,10 +20,10 @@ abstract class TenderApprovalsStateData with _$TenderApprovalsStateData { @JsonKey(name: 'approvals_by_submission') required ApprovalsBySubmission? approvalsBySubmission, @JsonKey(name: 'last_updated') required int? lastUpdated, - }) = _TenderApprovalsStateData; + }) = _TenderApprovalsStatsData; - factory TenderApprovalsStateData.fromJson(Map json) => - _$TenderApprovalsStateDataFromJson(json); + factory TenderApprovalsStatsData.fromJson(Map json) => + _$TenderApprovalsStatsDataFromJson(json); } @freezed diff --git a/lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.freezed.dart b/lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.freezed.dart similarity index 91% rename from lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.freezed.dart rename to lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.freezed.dart index ccad0f1..fa287b5 100644 --- a/lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.freezed.dart +++ b/lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.freezed.dart @@ -3,7 +3,7 @@ // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark -part of 'tender_approvals_state_data.dart'; +part of 'tender_approvals_stats_data.dart'; // ************************************************************************** // FreezedGenerator @@ -13,22 +13,22 @@ part of 'tender_approvals_state_data.dart'; T _$identity(T value) => value; /// @nodoc -mixin _$TenderApprovalsStateData { +mixin _$TenderApprovalsStatsData { @JsonKey(name: 'company_id') String? get companyId;@JsonKey(name: 'total_approvals') int? get totalApprovals;@JsonKey(name: 'submitted_tenders') int? get submittedTenders;@JsonKey(name: 'rejected_tenders') int? get rejectedTenders;@JsonKey(name: 'self_apply_count') int? get selfApplyCount;@JsonKey(name: 'partnership_count') int? get partnershipCount;@JsonKey(name: 'approvals_by_status') ApprovalsByStatus? get approvalsByStatus;@JsonKey(name: 'approvals_by_submission') ApprovalsBySubmission? get approvalsBySubmission;@JsonKey(name: 'last_updated') int? get lastUpdated; -/// Create a copy of TenderApprovalsStateData +/// Create a copy of TenderApprovalsStatsData /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @pragma('vm:prefer-inline') -$TenderApprovalsStateDataCopyWith get copyWith => _$TenderApprovalsStateDataCopyWithImpl(this as TenderApprovalsStateData, _$identity); +$TenderApprovalsStatsDataCopyWith get copyWith => _$TenderApprovalsStatsDataCopyWithImpl(this as TenderApprovalsStatsData, _$identity); - /// Serializes this TenderApprovalsStateData to a JSON map. + /// Serializes this TenderApprovalsStatsData to a JSON map. Map toJson(); @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is TenderApprovalsStateData&&(identical(other.companyId, companyId) || other.companyId == companyId)&&(identical(other.totalApprovals, totalApprovals) || other.totalApprovals == totalApprovals)&&(identical(other.submittedTenders, submittedTenders) || other.submittedTenders == submittedTenders)&&(identical(other.rejectedTenders, rejectedTenders) || other.rejectedTenders == rejectedTenders)&&(identical(other.selfApplyCount, selfApplyCount) || other.selfApplyCount == selfApplyCount)&&(identical(other.partnershipCount, partnershipCount) || other.partnershipCount == partnershipCount)&&(identical(other.approvalsByStatus, approvalsByStatus) || other.approvalsByStatus == approvalsByStatus)&&(identical(other.approvalsBySubmission, approvalsBySubmission) || other.approvalsBySubmission == approvalsBySubmission)&&(identical(other.lastUpdated, lastUpdated) || other.lastUpdated == lastUpdated)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is TenderApprovalsStatsData&&(identical(other.companyId, companyId) || other.companyId == companyId)&&(identical(other.totalApprovals, totalApprovals) || other.totalApprovals == totalApprovals)&&(identical(other.submittedTenders, submittedTenders) || other.submittedTenders == submittedTenders)&&(identical(other.rejectedTenders, rejectedTenders) || other.rejectedTenders == rejectedTenders)&&(identical(other.selfApplyCount, selfApplyCount) || other.selfApplyCount == selfApplyCount)&&(identical(other.partnershipCount, partnershipCount) || other.partnershipCount == partnershipCount)&&(identical(other.approvalsByStatus, approvalsByStatus) || other.approvalsByStatus == approvalsByStatus)&&(identical(other.approvalsBySubmission, approvalsBySubmission) || other.approvalsBySubmission == approvalsBySubmission)&&(identical(other.lastUpdated, lastUpdated) || other.lastUpdated == lastUpdated)); } @JsonKey(includeFromJson: false, includeToJson: false) @@ -37,15 +37,15 @@ int get hashCode => Object.hash(runtimeType,companyId,totalApprovals,submittedTe @override String toString() { - return 'TenderApprovalsStateData(companyId: $companyId, totalApprovals: $totalApprovals, submittedTenders: $submittedTenders, rejectedTenders: $rejectedTenders, selfApplyCount: $selfApplyCount, partnershipCount: $partnershipCount, approvalsByStatus: $approvalsByStatus, approvalsBySubmission: $approvalsBySubmission, lastUpdated: $lastUpdated)'; + return 'TenderApprovalsStatsData(companyId: $companyId, totalApprovals: $totalApprovals, submittedTenders: $submittedTenders, rejectedTenders: $rejectedTenders, selfApplyCount: $selfApplyCount, partnershipCount: $partnershipCount, approvalsByStatus: $approvalsByStatus, approvalsBySubmission: $approvalsBySubmission, lastUpdated: $lastUpdated)'; } } /// @nodoc -abstract mixin class $TenderApprovalsStateDataCopyWith<$Res> { - factory $TenderApprovalsStateDataCopyWith(TenderApprovalsStateData value, $Res Function(TenderApprovalsStateData) _then) = _$TenderApprovalsStateDataCopyWithImpl; +abstract mixin class $TenderApprovalsStatsDataCopyWith<$Res> { + factory $TenderApprovalsStatsDataCopyWith(TenderApprovalsStatsData value, $Res Function(TenderApprovalsStatsData) _then) = _$TenderApprovalsStatsDataCopyWithImpl; @useResult $Res call({ @JsonKey(name: 'company_id') String? companyId,@JsonKey(name: 'total_approvals') int? totalApprovals,@JsonKey(name: 'submitted_tenders') int? submittedTenders,@JsonKey(name: 'rejected_tenders') int? rejectedTenders,@JsonKey(name: 'self_apply_count') int? selfApplyCount,@JsonKey(name: 'partnership_count') int? partnershipCount,@JsonKey(name: 'approvals_by_status') ApprovalsByStatus? approvalsByStatus,@JsonKey(name: 'approvals_by_submission') ApprovalsBySubmission? approvalsBySubmission,@JsonKey(name: 'last_updated') int? lastUpdated @@ -56,14 +56,14 @@ $ApprovalsByStatusCopyWith<$Res>? get approvalsByStatus;$ApprovalsBySubmissionCo } /// @nodoc -class _$TenderApprovalsStateDataCopyWithImpl<$Res> - implements $TenderApprovalsStateDataCopyWith<$Res> { - _$TenderApprovalsStateDataCopyWithImpl(this._self, this._then); +class _$TenderApprovalsStatsDataCopyWithImpl<$Res> + implements $TenderApprovalsStatsDataCopyWith<$Res> { + _$TenderApprovalsStatsDataCopyWithImpl(this._self, this._then); - final TenderApprovalsStateData _self; - final $Res Function(TenderApprovalsStateData) _then; + final TenderApprovalsStatsData _self; + final $Res Function(TenderApprovalsStatsData) _then; -/// Create a copy of TenderApprovalsStateData +/// Create a copy of TenderApprovalsStatsData /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({Object? companyId = freezed,Object? totalApprovals = freezed,Object? submittedTenders = freezed,Object? rejectedTenders = freezed,Object? selfApplyCount = freezed,Object? partnershipCount = freezed,Object? approvalsByStatus = freezed,Object? approvalsBySubmission = freezed,Object? lastUpdated = freezed,}) { return _then(_self.copyWith( @@ -79,7 +79,7 @@ as ApprovalsBySubmission?,lastUpdated: freezed == lastUpdated ? _self.lastUpdate as int?, )); } -/// Create a copy of TenderApprovalsStateData +/// Create a copy of TenderApprovalsStatsData /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') @@ -91,7 +91,7 @@ $ApprovalsByStatusCopyWith<$Res>? get approvalsByStatus { return $ApprovalsByStatusCopyWith<$Res>(_self.approvalsByStatus!, (value) { return _then(_self.copyWith(approvalsByStatus: value)); }); -}/// Create a copy of TenderApprovalsStateData +}/// Create a copy of TenderApprovalsStatsData /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') @@ -107,8 +107,8 @@ $ApprovalsBySubmissionCopyWith<$Res>? get approvalsBySubmission { } -/// Adds pattern-matching-related methods to [TenderApprovalsStateData]. -extension TenderApprovalsStateDataPatterns on TenderApprovalsStateData { +/// Adds pattern-matching-related methods to [TenderApprovalsStatsData]. +extension TenderApprovalsStatsDataPatterns on TenderApprovalsStatsData { /// A variant of `map` that fallback to returning `orElse`. /// /// It is equivalent to doing: @@ -121,10 +121,10 @@ extension TenderApprovalsStateDataPatterns on TenderApprovalsStateData { /// } /// ``` -@optionalTypeArgs TResult maybeMap(TResult Function( _TenderApprovalsStateData value)? $default,{required TResult orElse(),}){ +@optionalTypeArgs TResult maybeMap(TResult Function( _TenderApprovalsStatsData value)? $default,{required TResult orElse(),}){ final _that = this; switch (_that) { -case _TenderApprovalsStateData() when $default != null: +case _TenderApprovalsStatsData() when $default != null: return $default(_that);case _: return orElse(); @@ -143,10 +143,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult map(TResult Function( _TenderApprovalsStateData value) $default,){ +@optionalTypeArgs TResult map(TResult Function( _TenderApprovalsStatsData value) $default,){ final _that = this; switch (_that) { -case _TenderApprovalsStateData(): +case _TenderApprovalsStatsData(): return $default(_that);case _: throw StateError('Unexpected subclass'); @@ -164,10 +164,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult? mapOrNull(TResult? Function( _TenderApprovalsStateData value)? $default,){ +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _TenderApprovalsStatsData value)? $default,){ final _that = this; switch (_that) { -case _TenderApprovalsStateData() when $default != null: +case _TenderApprovalsStatsData() when $default != null: return $default(_that);case _: return null; @@ -187,7 +187,7 @@ return $default(_that);case _: @optionalTypeArgs TResult maybeWhen(TResult Function(@JsonKey(name: 'company_id') String? companyId, @JsonKey(name: 'total_approvals') int? totalApprovals, @JsonKey(name: 'submitted_tenders') int? submittedTenders, @JsonKey(name: 'rejected_tenders') int? rejectedTenders, @JsonKey(name: 'self_apply_count') int? selfApplyCount, @JsonKey(name: 'partnership_count') int? partnershipCount, @JsonKey(name: 'approvals_by_status') ApprovalsByStatus? approvalsByStatus, @JsonKey(name: 'approvals_by_submission') ApprovalsBySubmission? approvalsBySubmission, @JsonKey(name: 'last_updated') int? lastUpdated)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { -case _TenderApprovalsStateData() when $default != null: +case _TenderApprovalsStatsData() when $default != null: return $default(_that.companyId,_that.totalApprovals,_that.submittedTenders,_that.rejectedTenders,_that.selfApplyCount,_that.partnershipCount,_that.approvalsByStatus,_that.approvalsBySubmission,_that.lastUpdated);case _: return orElse(); @@ -208,7 +208,7 @@ return $default(_that.companyId,_that.totalApprovals,_that.submittedTenders,_tha @optionalTypeArgs TResult when(TResult Function(@JsonKey(name: 'company_id') String? companyId, @JsonKey(name: 'total_approvals') int? totalApprovals, @JsonKey(name: 'submitted_tenders') int? submittedTenders, @JsonKey(name: 'rejected_tenders') int? rejectedTenders, @JsonKey(name: 'self_apply_count') int? selfApplyCount, @JsonKey(name: 'partnership_count') int? partnershipCount, @JsonKey(name: 'approvals_by_status') ApprovalsByStatus? approvalsByStatus, @JsonKey(name: 'approvals_by_submission') ApprovalsBySubmission? approvalsBySubmission, @JsonKey(name: 'last_updated') int? lastUpdated) $default,) {final _that = this; switch (_that) { -case _TenderApprovalsStateData(): +case _TenderApprovalsStatsData(): return $default(_that.companyId,_that.totalApprovals,_that.submittedTenders,_that.rejectedTenders,_that.selfApplyCount,_that.partnershipCount,_that.approvalsByStatus,_that.approvalsBySubmission,_that.lastUpdated);case _: throw StateError('Unexpected subclass'); @@ -228,7 +228,7 @@ return $default(_that.companyId,_that.totalApprovals,_that.submittedTenders,_tha @optionalTypeArgs TResult? whenOrNull(TResult? Function(@JsonKey(name: 'company_id') String? companyId, @JsonKey(name: 'total_approvals') int? totalApprovals, @JsonKey(name: 'submitted_tenders') int? submittedTenders, @JsonKey(name: 'rejected_tenders') int? rejectedTenders, @JsonKey(name: 'self_apply_count') int? selfApplyCount, @JsonKey(name: 'partnership_count') int? partnershipCount, @JsonKey(name: 'approvals_by_status') ApprovalsByStatus? approvalsByStatus, @JsonKey(name: 'approvals_by_submission') ApprovalsBySubmission? approvalsBySubmission, @JsonKey(name: 'last_updated') int? lastUpdated)? $default,) {final _that = this; switch (_that) { -case _TenderApprovalsStateData() when $default != null: +case _TenderApprovalsStatsData() when $default != null: return $default(_that.companyId,_that.totalApprovals,_that.submittedTenders,_that.rejectedTenders,_that.selfApplyCount,_that.partnershipCount,_that.approvalsByStatus,_that.approvalsBySubmission,_that.lastUpdated);case _: return null; @@ -240,9 +240,9 @@ return $default(_that.companyId,_that.totalApprovals,_that.submittedTenders,_tha /// @nodoc @JsonSerializable(explicitToJson: true) -class _TenderApprovalsStateData implements TenderApprovalsStateData { - const _TenderApprovalsStateData({@JsonKey(name: 'company_id') required this.companyId, @JsonKey(name: 'total_approvals') required this.totalApprovals, @JsonKey(name: 'submitted_tenders') required this.submittedTenders, @JsonKey(name: 'rejected_tenders') required this.rejectedTenders, @JsonKey(name: 'self_apply_count') required this.selfApplyCount, @JsonKey(name: 'partnership_count') required this.partnershipCount, @JsonKey(name: 'approvals_by_status') required this.approvalsByStatus, @JsonKey(name: 'approvals_by_submission') required this.approvalsBySubmission, @JsonKey(name: 'last_updated') required this.lastUpdated}); - factory _TenderApprovalsStateData.fromJson(Map json) => _$TenderApprovalsStateDataFromJson(json); +class _TenderApprovalsStatsData implements TenderApprovalsStatsData { + const _TenderApprovalsStatsData({@JsonKey(name: 'company_id') required this.companyId, @JsonKey(name: 'total_approvals') required this.totalApprovals, @JsonKey(name: 'submitted_tenders') required this.submittedTenders, @JsonKey(name: 'rejected_tenders') required this.rejectedTenders, @JsonKey(name: 'self_apply_count') required this.selfApplyCount, @JsonKey(name: 'partnership_count') required this.partnershipCount, @JsonKey(name: 'approvals_by_status') required this.approvalsByStatus, @JsonKey(name: 'approvals_by_submission') required this.approvalsBySubmission, @JsonKey(name: 'last_updated') required this.lastUpdated}); + factory _TenderApprovalsStatsData.fromJson(Map json) => _$TenderApprovalsStatsDataFromJson(json); @override@JsonKey(name: 'company_id') final String? companyId; @override@JsonKey(name: 'total_approvals') final int? totalApprovals; @@ -254,20 +254,20 @@ class _TenderApprovalsStateData implements TenderApprovalsStateData { @override@JsonKey(name: 'approvals_by_submission') final ApprovalsBySubmission? approvalsBySubmission; @override@JsonKey(name: 'last_updated') final int? lastUpdated; -/// Create a copy of TenderApprovalsStateData +/// Create a copy of TenderApprovalsStatsData /// with the given fields replaced by the non-null parameter values. @override @JsonKey(includeFromJson: false, includeToJson: false) @pragma('vm:prefer-inline') -_$TenderApprovalsStateDataCopyWith<_TenderApprovalsStateData> get copyWith => __$TenderApprovalsStateDataCopyWithImpl<_TenderApprovalsStateData>(this, _$identity); +_$TenderApprovalsStatsDataCopyWith<_TenderApprovalsStatsData> get copyWith => __$TenderApprovalsStatsDataCopyWithImpl<_TenderApprovalsStatsData>(this, _$identity); @override Map toJson() { - return _$TenderApprovalsStateDataToJson(this, ); + return _$TenderApprovalsStatsDataToJson(this, ); } @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _TenderApprovalsStateData&&(identical(other.companyId, companyId) || other.companyId == companyId)&&(identical(other.totalApprovals, totalApprovals) || other.totalApprovals == totalApprovals)&&(identical(other.submittedTenders, submittedTenders) || other.submittedTenders == submittedTenders)&&(identical(other.rejectedTenders, rejectedTenders) || other.rejectedTenders == rejectedTenders)&&(identical(other.selfApplyCount, selfApplyCount) || other.selfApplyCount == selfApplyCount)&&(identical(other.partnershipCount, partnershipCount) || other.partnershipCount == partnershipCount)&&(identical(other.approvalsByStatus, approvalsByStatus) || other.approvalsByStatus == approvalsByStatus)&&(identical(other.approvalsBySubmission, approvalsBySubmission) || other.approvalsBySubmission == approvalsBySubmission)&&(identical(other.lastUpdated, lastUpdated) || other.lastUpdated == lastUpdated)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _TenderApprovalsStatsData&&(identical(other.companyId, companyId) || other.companyId == companyId)&&(identical(other.totalApprovals, totalApprovals) || other.totalApprovals == totalApprovals)&&(identical(other.submittedTenders, submittedTenders) || other.submittedTenders == submittedTenders)&&(identical(other.rejectedTenders, rejectedTenders) || other.rejectedTenders == rejectedTenders)&&(identical(other.selfApplyCount, selfApplyCount) || other.selfApplyCount == selfApplyCount)&&(identical(other.partnershipCount, partnershipCount) || other.partnershipCount == partnershipCount)&&(identical(other.approvalsByStatus, approvalsByStatus) || other.approvalsByStatus == approvalsByStatus)&&(identical(other.approvalsBySubmission, approvalsBySubmission) || other.approvalsBySubmission == approvalsBySubmission)&&(identical(other.lastUpdated, lastUpdated) || other.lastUpdated == lastUpdated)); } @JsonKey(includeFromJson: false, includeToJson: false) @@ -276,15 +276,15 @@ int get hashCode => Object.hash(runtimeType,companyId,totalApprovals,submittedTe @override String toString() { - return 'TenderApprovalsStateData(companyId: $companyId, totalApprovals: $totalApprovals, submittedTenders: $submittedTenders, rejectedTenders: $rejectedTenders, selfApplyCount: $selfApplyCount, partnershipCount: $partnershipCount, approvalsByStatus: $approvalsByStatus, approvalsBySubmission: $approvalsBySubmission, lastUpdated: $lastUpdated)'; + return 'TenderApprovalsStatsData(companyId: $companyId, totalApprovals: $totalApprovals, submittedTenders: $submittedTenders, rejectedTenders: $rejectedTenders, selfApplyCount: $selfApplyCount, partnershipCount: $partnershipCount, approvalsByStatus: $approvalsByStatus, approvalsBySubmission: $approvalsBySubmission, lastUpdated: $lastUpdated)'; } } /// @nodoc -abstract mixin class _$TenderApprovalsStateDataCopyWith<$Res> implements $TenderApprovalsStateDataCopyWith<$Res> { - factory _$TenderApprovalsStateDataCopyWith(_TenderApprovalsStateData value, $Res Function(_TenderApprovalsStateData) _then) = __$TenderApprovalsStateDataCopyWithImpl; +abstract mixin class _$TenderApprovalsStatsDataCopyWith<$Res> implements $TenderApprovalsStatsDataCopyWith<$Res> { + factory _$TenderApprovalsStatsDataCopyWith(_TenderApprovalsStatsData value, $Res Function(_TenderApprovalsStatsData) _then) = __$TenderApprovalsStatsDataCopyWithImpl; @override @useResult $Res call({ @JsonKey(name: 'company_id') String? companyId,@JsonKey(name: 'total_approvals') int? totalApprovals,@JsonKey(name: 'submitted_tenders') int? submittedTenders,@JsonKey(name: 'rejected_tenders') int? rejectedTenders,@JsonKey(name: 'self_apply_count') int? selfApplyCount,@JsonKey(name: 'partnership_count') int? partnershipCount,@JsonKey(name: 'approvals_by_status') ApprovalsByStatus? approvalsByStatus,@JsonKey(name: 'approvals_by_submission') ApprovalsBySubmission? approvalsBySubmission,@JsonKey(name: 'last_updated') int? lastUpdated @@ -295,17 +295,17 @@ $Res call({ } /// @nodoc -class __$TenderApprovalsStateDataCopyWithImpl<$Res> - implements _$TenderApprovalsStateDataCopyWith<$Res> { - __$TenderApprovalsStateDataCopyWithImpl(this._self, this._then); +class __$TenderApprovalsStatsDataCopyWithImpl<$Res> + implements _$TenderApprovalsStatsDataCopyWith<$Res> { + __$TenderApprovalsStatsDataCopyWithImpl(this._self, this._then); - final _TenderApprovalsStateData _self; - final $Res Function(_TenderApprovalsStateData) _then; + final _TenderApprovalsStatsData _self; + final $Res Function(_TenderApprovalsStatsData) _then; -/// Create a copy of TenderApprovalsStateData +/// Create a copy of TenderApprovalsStatsData /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') $Res call({Object? companyId = freezed,Object? totalApprovals = freezed,Object? submittedTenders = freezed,Object? rejectedTenders = freezed,Object? selfApplyCount = freezed,Object? partnershipCount = freezed,Object? approvalsByStatus = freezed,Object? approvalsBySubmission = freezed,Object? lastUpdated = freezed,}) { - return _then(_TenderApprovalsStateData( + return _then(_TenderApprovalsStatsData( companyId: freezed == companyId ? _self.companyId : companyId // ignore: cast_nullable_to_non_nullable as String?,totalApprovals: freezed == totalApprovals ? _self.totalApprovals : totalApprovals // ignore: cast_nullable_to_non_nullable as int?,submittedTenders: freezed == submittedTenders ? _self.submittedTenders : submittedTenders // ignore: cast_nullable_to_non_nullable @@ -319,7 +319,7 @@ as int?, )); } -/// Create a copy of TenderApprovalsStateData +/// Create a copy of TenderApprovalsStatsData /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') @@ -331,7 +331,7 @@ $ApprovalsByStatusCopyWith<$Res>? get approvalsByStatus { return $ApprovalsByStatusCopyWith<$Res>(_self.approvalsByStatus!, (value) { return _then(_self.copyWith(approvalsByStatus: value)); }); -}/// Create a copy of TenderApprovalsStateData +}/// Create a copy of TenderApprovalsStatsData /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') diff --git a/lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.g.dart b/lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.g.dart similarity index 91% rename from lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.g.dart rename to lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.g.dart index 6904747..b8b19ba 100644 --- a/lib/data/services/model/tender_approvals_state_data/tender_approvals_state_data.g.dart +++ b/lib/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.g.dart @@ -1,14 +1,14 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'tender_approvals_state_data.dart'; +part of 'tender_approvals_stats_data.dart'; // ************************************************************************** // JsonSerializableGenerator // ************************************************************************** -_TenderApprovalsStateData _$TenderApprovalsStateDataFromJson( +_TenderApprovalsStatsData _$TenderApprovalsStatsDataFromJson( Map json, -) => _TenderApprovalsStateData( +) => _TenderApprovalsStatsData( companyId: json['company_id'] as String?, totalApprovals: (json['total_approvals'] as num?)?.toInt(), submittedTenders: (json['submitted_tenders'] as num?)?.toInt(), @@ -30,8 +30,8 @@ _TenderApprovalsStateData _$TenderApprovalsStateDataFromJson( lastUpdated: (json['last_updated'] as num?)?.toInt(), ); -Map _$TenderApprovalsStateDataToJson( - _TenderApprovalsStateData instance, +Map _$TenderApprovalsStatsDataToJson( + _TenderApprovalsStatsData instance, ) => { 'company_id': instance.companyId, 'total_approvals': instance.totalApprovals, diff --git a/lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart b/lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart new file mode 100644 index 0000000..aef1095 --- /dev/null +++ b/lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart @@ -0,0 +1,23 @@ +// ignore_for_file: invalid_annotation_target + +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:tm_app/data/services/model/error/error_model.dart'; +import 'package:tm_app/data/services/model/tender_approvals_stats_data/tender_approvals_stats_data.dart'; + +part 'tender_approvals_stats_response.freezed.dart'; +part 'tender_approvals_stats_response.g.dart'; + +@freezed +abstract class TenderApprovalsStatsResponse + with _$TenderApprovalsStatsResponse { + @JsonSerializable(explicitToJson: true) + const factory TenderApprovalsStatsResponse({ + @JsonKey(name: 'success') required bool? success, + @JsonKey(name: 'message') required String? message, + @JsonKey(name: 'error') ErrorModel? error, + @JsonKey(name: 'data') TenderApprovalsStatsData? data, + }) = _TenderApprovalsStatsResponse; + + factory TenderApprovalsStatsResponse.fromJson(Map json) => + _$TenderApprovalsStatsResponseFromJson(json); +} diff --git a/lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.freezed.dart b/lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.freezed.dart similarity index 68% rename from lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.freezed.dart rename to lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.freezed.dart index a2dfc7b..6e0828c 100644 --- a/lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.freezed.dart +++ b/lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.freezed.dart @@ -3,7 +3,7 @@ // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark -part of 'tender_approvals_state_response.dart'; +part of 'tender_approvals_stats_response.dart'; // ************************************************************************** // FreezedGenerator @@ -13,22 +13,22 @@ part of 'tender_approvals_state_response.dart'; T _$identity(T value) => value; /// @nodoc -mixin _$TenderApprovalsStateResponse { +mixin _$TenderApprovalsStatsResponse { -@JsonKey(name: 'success') bool? get success;@JsonKey(name: 'message') String? get message;@JsonKey(name: 'error') ErrorModel? get error;@JsonKey(name: 'data') TenderApprovalsStateData? get data; -/// Create a copy of TenderApprovalsStateResponse +@JsonKey(name: 'success') bool? get success;@JsonKey(name: 'message') String? get message;@JsonKey(name: 'error') ErrorModel? get error;@JsonKey(name: 'data') TenderApprovalsStatsData? get data; +/// Create a copy of TenderApprovalsStatsResponse /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @pragma('vm:prefer-inline') -$TenderApprovalsStateResponseCopyWith get copyWith => _$TenderApprovalsStateResponseCopyWithImpl(this as TenderApprovalsStateResponse, _$identity); +$TenderApprovalsStatsResponseCopyWith get copyWith => _$TenderApprovalsStatsResponseCopyWithImpl(this as TenderApprovalsStatsResponse, _$identity); - /// Serializes this TenderApprovalsStateResponse to a JSON map. + /// Serializes this TenderApprovalsStatsResponse to a JSON map. Map toJson(); @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is TenderApprovalsStateResponse&&(identical(other.success, success) || other.success == success)&&(identical(other.message, message) || other.message == message)&&(identical(other.error, error) || other.error == error)&&(identical(other.data, data) || other.data == data)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is TenderApprovalsStatsResponse&&(identical(other.success, success) || other.success == success)&&(identical(other.message, message) || other.message == message)&&(identical(other.error, error) || other.error == error)&&(identical(other.data, data) || other.data == data)); } @JsonKey(includeFromJson: false, includeToJson: false) @@ -37,33 +37,33 @@ int get hashCode => Object.hash(runtimeType,success,message,error,data); @override String toString() { - return 'TenderApprovalsStateResponse(success: $success, message: $message, error: $error, data: $data)'; + return 'TenderApprovalsStatsResponse(success: $success, message: $message, error: $error, data: $data)'; } } /// @nodoc -abstract mixin class $TenderApprovalsStateResponseCopyWith<$Res> { - factory $TenderApprovalsStateResponseCopyWith(TenderApprovalsStateResponse value, $Res Function(TenderApprovalsStateResponse) _then) = _$TenderApprovalsStateResponseCopyWithImpl; +abstract mixin class $TenderApprovalsStatsResponseCopyWith<$Res> { + factory $TenderApprovalsStatsResponseCopyWith(TenderApprovalsStatsResponse value, $Res Function(TenderApprovalsStatsResponse) _then) = _$TenderApprovalsStatsResponseCopyWithImpl; @useResult $Res call({ -@JsonKey(name: 'success') bool? success,@JsonKey(name: 'message') String? message,@JsonKey(name: 'error') ErrorModel? error,@JsonKey(name: 'data') TenderApprovalsStateData? data +@JsonKey(name: 'success') bool? success,@JsonKey(name: 'message') String? message,@JsonKey(name: 'error') ErrorModel? error,@JsonKey(name: 'data') TenderApprovalsStatsData? data }); -$ErrorModelCopyWith<$Res>? get error;$TenderApprovalsStateDataCopyWith<$Res>? get data; +$ErrorModelCopyWith<$Res>? get error;$TenderApprovalsStatsDataCopyWith<$Res>? get data; } /// @nodoc -class _$TenderApprovalsStateResponseCopyWithImpl<$Res> - implements $TenderApprovalsStateResponseCopyWith<$Res> { - _$TenderApprovalsStateResponseCopyWithImpl(this._self, this._then); +class _$TenderApprovalsStatsResponseCopyWithImpl<$Res> + implements $TenderApprovalsStatsResponseCopyWith<$Res> { + _$TenderApprovalsStatsResponseCopyWithImpl(this._self, this._then); - final TenderApprovalsStateResponse _self; - final $Res Function(TenderApprovalsStateResponse) _then; + final TenderApprovalsStatsResponse _self; + final $Res Function(TenderApprovalsStatsResponse) _then; -/// Create a copy of TenderApprovalsStateResponse +/// Create a copy of TenderApprovalsStatsResponse /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({Object? success = freezed,Object? message = freezed,Object? error = freezed,Object? data = freezed,}) { return _then(_self.copyWith( @@ -71,10 +71,10 @@ success: freezed == success ? _self.success : success // ignore: cast_nullable_t as bool?,message: freezed == message ? _self.message : message // ignore: cast_nullable_to_non_nullable as String?,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable as ErrorModel?,data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable -as TenderApprovalsStateData?, +as TenderApprovalsStatsData?, )); } -/// Create a copy of TenderApprovalsStateResponse +/// Create a copy of TenderApprovalsStatsResponse /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') @@ -86,24 +86,24 @@ $ErrorModelCopyWith<$Res>? get error { return $ErrorModelCopyWith<$Res>(_self.error!, (value) { return _then(_self.copyWith(error: value)); }); -}/// Create a copy of TenderApprovalsStateResponse +}/// Create a copy of TenderApprovalsStatsResponse /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') -$TenderApprovalsStateDataCopyWith<$Res>? get data { +$TenderApprovalsStatsDataCopyWith<$Res>? get data { if (_self.data == null) { return null; } - return $TenderApprovalsStateDataCopyWith<$Res>(_self.data!, (value) { + return $TenderApprovalsStatsDataCopyWith<$Res>(_self.data!, (value) { return _then(_self.copyWith(data: value)); }); } } -/// Adds pattern-matching-related methods to [TenderApprovalsStateResponse]. -extension TenderApprovalsStateResponsePatterns on TenderApprovalsStateResponse { +/// Adds pattern-matching-related methods to [TenderApprovalsStatsResponse]. +extension TenderApprovalsStatsResponsePatterns on TenderApprovalsStatsResponse { /// A variant of `map` that fallback to returning `orElse`. /// /// It is equivalent to doing: @@ -116,10 +116,10 @@ extension TenderApprovalsStateResponsePatterns on TenderApprovalsStateResponse { /// } /// ``` -@optionalTypeArgs TResult maybeMap(TResult Function( _TenderApprovalsStateResponse value)? $default,{required TResult orElse(),}){ +@optionalTypeArgs TResult maybeMap(TResult Function( _TenderApprovalsStatsResponse value)? $default,{required TResult orElse(),}){ final _that = this; switch (_that) { -case _TenderApprovalsStateResponse() when $default != null: +case _TenderApprovalsStatsResponse() when $default != null: return $default(_that);case _: return orElse(); @@ -138,10 +138,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult map(TResult Function( _TenderApprovalsStateResponse value) $default,){ +@optionalTypeArgs TResult map(TResult Function( _TenderApprovalsStatsResponse value) $default,){ final _that = this; switch (_that) { -case _TenderApprovalsStateResponse(): +case _TenderApprovalsStatsResponse(): return $default(_that);case _: throw StateError('Unexpected subclass'); @@ -159,10 +159,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult? mapOrNull(TResult? Function( _TenderApprovalsStateResponse value)? $default,){ +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _TenderApprovalsStatsResponse value)? $default,){ final _that = this; switch (_that) { -case _TenderApprovalsStateResponse() when $default != null: +case _TenderApprovalsStatsResponse() when $default != null: return $default(_that);case _: return null; @@ -180,9 +180,9 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function(@JsonKey(name: 'success') bool? success, @JsonKey(name: 'message') String? message, @JsonKey(name: 'error') ErrorModel? error, @JsonKey(name: 'data') TenderApprovalsStateData? data)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function(@JsonKey(name: 'success') bool? success, @JsonKey(name: 'message') String? message, @JsonKey(name: 'error') ErrorModel? error, @JsonKey(name: 'data') TenderApprovalsStatsData? data)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { -case _TenderApprovalsStateResponse() when $default != null: +case _TenderApprovalsStatsResponse() when $default != null: return $default(_that.success,_that.message,_that.error,_that.data);case _: return orElse(); @@ -201,9 +201,9 @@ return $default(_that.success,_that.message,_that.error,_that.data);case _: /// } /// ``` -@optionalTypeArgs TResult when(TResult Function(@JsonKey(name: 'success') bool? success, @JsonKey(name: 'message') String? message, @JsonKey(name: 'error') ErrorModel? error, @JsonKey(name: 'data') TenderApprovalsStateData? data) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function(@JsonKey(name: 'success') bool? success, @JsonKey(name: 'message') String? message, @JsonKey(name: 'error') ErrorModel? error, @JsonKey(name: 'data') TenderApprovalsStatsData? data) $default,) {final _that = this; switch (_that) { -case _TenderApprovalsStateResponse(): +case _TenderApprovalsStatsResponse(): return $default(_that.success,_that.message,_that.error,_that.data);case _: throw StateError('Unexpected subclass'); @@ -221,9 +221,9 @@ return $default(_that.success,_that.message,_that.error,_that.data);case _: /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function(@JsonKey(name: 'success') bool? success, @JsonKey(name: 'message') String? message, @JsonKey(name: 'error') ErrorModel? error, @JsonKey(name: 'data') TenderApprovalsStateData? data)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function(@JsonKey(name: 'success') bool? success, @JsonKey(name: 'message') String? message, @JsonKey(name: 'error') ErrorModel? error, @JsonKey(name: 'data') TenderApprovalsStatsData? data)? $default,) {final _that = this; switch (_that) { -case _TenderApprovalsStateResponse() when $default != null: +case _TenderApprovalsStatsResponse() when $default != null: return $default(_that.success,_that.message,_that.error,_that.data);case _: return null; @@ -235,29 +235,29 @@ return $default(_that.success,_that.message,_that.error,_that.data);case _: /// @nodoc @JsonSerializable(explicitToJson: true) -class _TenderApprovalsStateResponse implements TenderApprovalsStateResponse { - const _TenderApprovalsStateResponse({@JsonKey(name: 'success') required this.success, @JsonKey(name: 'message') required this.message, @JsonKey(name: 'error') this.error, @JsonKey(name: 'data') this.data}); - factory _TenderApprovalsStateResponse.fromJson(Map json) => _$TenderApprovalsStateResponseFromJson(json); +class _TenderApprovalsStatsResponse implements TenderApprovalsStatsResponse { + const _TenderApprovalsStatsResponse({@JsonKey(name: 'success') required this.success, @JsonKey(name: 'message') required this.message, @JsonKey(name: 'error') this.error, @JsonKey(name: 'data') this.data}); + factory _TenderApprovalsStatsResponse.fromJson(Map json) => _$TenderApprovalsStatsResponseFromJson(json); @override@JsonKey(name: 'success') final bool? success; @override@JsonKey(name: 'message') final String? message; @override@JsonKey(name: 'error') final ErrorModel? error; -@override@JsonKey(name: 'data') final TenderApprovalsStateData? data; +@override@JsonKey(name: 'data') final TenderApprovalsStatsData? data; -/// Create a copy of TenderApprovalsStateResponse +/// Create a copy of TenderApprovalsStatsResponse /// with the given fields replaced by the non-null parameter values. @override @JsonKey(includeFromJson: false, includeToJson: false) @pragma('vm:prefer-inline') -_$TenderApprovalsStateResponseCopyWith<_TenderApprovalsStateResponse> get copyWith => __$TenderApprovalsStateResponseCopyWithImpl<_TenderApprovalsStateResponse>(this, _$identity); +_$TenderApprovalsStatsResponseCopyWith<_TenderApprovalsStatsResponse> get copyWith => __$TenderApprovalsStatsResponseCopyWithImpl<_TenderApprovalsStatsResponse>(this, _$identity); @override Map toJson() { - return _$TenderApprovalsStateResponseToJson(this, ); + return _$TenderApprovalsStatsResponseToJson(this, ); } @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _TenderApprovalsStateResponse&&(identical(other.success, success) || other.success == success)&&(identical(other.message, message) || other.message == message)&&(identical(other.error, error) || other.error == error)&&(identical(other.data, data) || other.data == data)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _TenderApprovalsStatsResponse&&(identical(other.success, success) || other.success == success)&&(identical(other.message, message) || other.message == message)&&(identical(other.error, error) || other.error == error)&&(identical(other.data, data) || other.data == data)); } @JsonKey(includeFromJson: false, includeToJson: false) @@ -266,45 +266,45 @@ int get hashCode => Object.hash(runtimeType,success,message,error,data); @override String toString() { - return 'TenderApprovalsStateResponse(success: $success, message: $message, error: $error, data: $data)'; + return 'TenderApprovalsStatsResponse(success: $success, message: $message, error: $error, data: $data)'; } } /// @nodoc -abstract mixin class _$TenderApprovalsStateResponseCopyWith<$Res> implements $TenderApprovalsStateResponseCopyWith<$Res> { - factory _$TenderApprovalsStateResponseCopyWith(_TenderApprovalsStateResponse value, $Res Function(_TenderApprovalsStateResponse) _then) = __$TenderApprovalsStateResponseCopyWithImpl; +abstract mixin class _$TenderApprovalsStatsResponseCopyWith<$Res> implements $TenderApprovalsStatsResponseCopyWith<$Res> { + factory _$TenderApprovalsStatsResponseCopyWith(_TenderApprovalsStatsResponse value, $Res Function(_TenderApprovalsStatsResponse) _then) = __$TenderApprovalsStatsResponseCopyWithImpl; @override @useResult $Res call({ -@JsonKey(name: 'success') bool? success,@JsonKey(name: 'message') String? message,@JsonKey(name: 'error') ErrorModel? error,@JsonKey(name: 'data') TenderApprovalsStateData? data +@JsonKey(name: 'success') bool? success,@JsonKey(name: 'message') String? message,@JsonKey(name: 'error') ErrorModel? error,@JsonKey(name: 'data') TenderApprovalsStatsData? data }); -@override $ErrorModelCopyWith<$Res>? get error;@override $TenderApprovalsStateDataCopyWith<$Res>? get data; +@override $ErrorModelCopyWith<$Res>? get error;@override $TenderApprovalsStatsDataCopyWith<$Res>? get data; } /// @nodoc -class __$TenderApprovalsStateResponseCopyWithImpl<$Res> - implements _$TenderApprovalsStateResponseCopyWith<$Res> { - __$TenderApprovalsStateResponseCopyWithImpl(this._self, this._then); +class __$TenderApprovalsStatsResponseCopyWithImpl<$Res> + implements _$TenderApprovalsStatsResponseCopyWith<$Res> { + __$TenderApprovalsStatsResponseCopyWithImpl(this._self, this._then); - final _TenderApprovalsStateResponse _self; - final $Res Function(_TenderApprovalsStateResponse) _then; + final _TenderApprovalsStatsResponse _self; + final $Res Function(_TenderApprovalsStatsResponse) _then; -/// Create a copy of TenderApprovalsStateResponse +/// Create a copy of TenderApprovalsStatsResponse /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') $Res call({Object? success = freezed,Object? message = freezed,Object? error = freezed,Object? data = freezed,}) { - return _then(_TenderApprovalsStateResponse( + return _then(_TenderApprovalsStatsResponse( success: freezed == success ? _self.success : success // ignore: cast_nullable_to_non_nullable as bool?,message: freezed == message ? _self.message : message // ignore: cast_nullable_to_non_nullable as String?,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable as ErrorModel?,data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable -as TenderApprovalsStateData?, +as TenderApprovalsStatsData?, )); } -/// Create a copy of TenderApprovalsStateResponse +/// Create a copy of TenderApprovalsStatsResponse /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') @@ -316,16 +316,16 @@ $ErrorModelCopyWith<$Res>? get error { return $ErrorModelCopyWith<$Res>(_self.error!, (value) { return _then(_self.copyWith(error: value)); }); -}/// Create a copy of TenderApprovalsStateResponse +}/// Create a copy of TenderApprovalsStatsResponse /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') -$TenderApprovalsStateDataCopyWith<$Res>? get data { +$TenderApprovalsStatsDataCopyWith<$Res>? get data { if (_self.data == null) { return null; } - return $TenderApprovalsStateDataCopyWith<$Res>(_self.data!, (value) { + return $TenderApprovalsStatsDataCopyWith<$Res>(_self.data!, (value) { return _then(_self.copyWith(data: value)); }); } diff --git a/lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.g.dart b/lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.g.dart similarity index 71% rename from lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.g.dart rename to lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.g.dart index 06e898f..544677b 100644 --- a/lib/data/services/model/tender_approvals_state_response/tender_approvals_state_response.g.dart +++ b/lib/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.g.dart @@ -1,14 +1,14 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'tender_approvals_state_response.dart'; +part of 'tender_approvals_stats_response.dart'; // ************************************************************************** // JsonSerializableGenerator // ************************************************************************** -_TenderApprovalsStateResponse _$TenderApprovalsStateResponseFromJson( +_TenderApprovalsStatsResponse _$TenderApprovalsStatsResponseFromJson( Map json, -) => _TenderApprovalsStateResponse( +) => _TenderApprovalsStatsResponse( success: json['success'] as bool?, message: json['message'] as String?, error: @@ -18,13 +18,13 @@ _TenderApprovalsStateResponse _$TenderApprovalsStateResponseFromJson( data: json['data'] == null ? null - : TenderApprovalsStateData.fromJson( + : TenderApprovalsStatsData.fromJson( json['data'] as Map, ), ); -Map _$TenderApprovalsStateResponseToJson( - _TenderApprovalsStateResponse instance, +Map _$TenderApprovalsStatsResponseToJson( + _TenderApprovalsStatsResponse instance, ) => { 'success': instance.success, 'message': instance.message, diff --git a/lib/view_models/home_view_model.dart b/lib/view_models/home_view_model.dart index d9cacbc..1490bb4 100644 --- a/lib/view_models/home_view_model.dart +++ b/lib/view_models/home_view_model.dart @@ -3,7 +3,7 @@ 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_state_response/tender_approvals_state_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'; @@ -29,7 +29,7 @@ class HomeViewModel with ChangeNotifier { HomeResponseModel? get homeResponse => _homeResponse; RecommendedTendersResponse? _recommendedTendersResponse; - TenderApprovalsStateResponse? tenderApprovalsStateResponse; + TenderApprovalsStatsResponse? tenderApprovalsStateResponse; FeedbackStats? feedbackStats; final List _tenders = []; final int _pageSize = 10; @@ -161,10 +161,10 @@ class HomeViewModel with ChangeNotifier { final result = await _homeRepository.getTendersApprovalsStats(); switch (result) { - case Ok(): + case Ok(): tenderApprovalsStateResponse = result.value; break; - case Error(): + case Error(): _errorMessage = result.error.toString(); break; } diff --git a/lib/views/home/pages/m_home_page.dart b/lib/views/home/pages/m_home_page.dart index 607e6fb..2b042d1 100644 --- a/lib/views/home/pages/m_home_page.dart +++ b/lib/views/home/pages/m_home_page.dart @@ -4,7 +4,7 @@ import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/utils/size_config.dart'; -import 'package:tm_app/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart'; +import 'package:tm_app/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart'; import 'package:tm_app/view_models/home_view_model.dart'; import 'package:tm_app/views/shared/tender_app_bar.dart'; @@ -90,7 +90,7 @@ class MobileHomePage extends StatelessWidget { Widget _firstTenderCardsRow( BuildContext context, - TenderApprovalsStateResponse tenderApprovalsStateResponse, + TenderApprovalsStatsResponse tenderApprovalsStateResponse, ) { return Padding( padding: EdgeInsets.symmetric(horizontal: 24.0.w()), diff --git a/lib/views/home/pages/t_home_page.dart b/lib/views/home/pages/t_home_page.dart index 704e6ee..33eb811 100644 --- a/lib/views/home/pages/t_home_page.dart +++ b/lib/views/home/pages/t_home_page.dart @@ -3,7 +3,7 @@ import 'package:provider/provider.dart'; import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/utils/size_config.dart'; -import 'package:tm_app/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart'; +import 'package:tm_app/data/services/model/tender_approvals_stats_response/tender_approvals_stats_response.dart'; import 'package:tm_app/view_models/home_view_model.dart'; import 'package:tm_app/views/shared/tablet_navigation_widget.dart'; @@ -110,7 +110,7 @@ class TabletHomePage extends StatelessWidget { Widget _firstTenderCardsRow( BuildContext context, - TenderApprovalsStateResponse tenderApprovalsStateResponse, + TenderApprovalsStatsResponse tenderApprovalsStateResponse, ) { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, From f6da74f739af577bdc03a352f4bf8836c06d0e7a Mon Sep 17 00:00:00 2001 From: amirrezaghabeli Date: Mon, 8 Sep 2025 12:22:08 +0330 Subject: [PATCH 3/5] removed hardcoded status feedback and submission mode --- lib/core/constants/status_enums.dart | 7 ++++ .../constants/tender_approval_status.dart | 21 ++++++++++++ .../tender_approval_status_extension.dart | 20 +++++++++++ lib/core/constants/tender_feedback.dart | 21 ++++++++++++ .../constants/tender_feedback_extension.dart | 20 +++++++++++ lib/core/constants/tender_submision_mode.dart | 15 +++++++++ .../tender_submission_mode_extension.dart | 17 ++++++++++ .../repositories/your_tenders_repository.dart | 14 -------- lib/data/services/api/your_tenders_api.dart | 16 --------- lib/data/services/your_tenders_service.dart | 20 ----------- lib/view_models/liked_tenders_view_model.dart | 33 ++++++++++++------- lib/view_models/tender_detail_view_model.dart | 5 +-- lib/view_models/tenders_view_model.dart | 6 +++- lib/view_models/your_tenders_view_model.dart | 16 ++++++--- .../detail/pages/detail_desktop_page.dart | 9 ++--- .../detail/pages/detail_mobile_page.dart | 9 ++--- .../detail/pages/detail_tablet_page.dart | 9 ++--- .../detail/widgets/tender_detail_action.dart | 7 ++-- .../select_submission_bottom_sheet.dart | 11 ++++--- .../shared/select_submission_dialog.dart | 13 ++++---- .../widgets/tender_action_buttons_row.dart | 33 ++++++++++++------- .../pages/your_tenders_desktop_page.dart | 5 +-- .../pages/your_tenders_mobile_page.dart | 6 ++-- .../pages/your_tenders_tablet_page.dart | 5 +-- .../your_tenders/widgets/tender_card.dart | 3 +- 25 files changed, 228 insertions(+), 113 deletions(-) create mode 100644 lib/core/constants/status_enums.dart create mode 100644 lib/core/constants/tender_approval_status.dart create mode 100644 lib/core/constants/tender_approval_status_extension.dart create mode 100644 lib/core/constants/tender_feedback.dart create mode 100644 lib/core/constants/tender_feedback_extension.dart create mode 100644 lib/core/constants/tender_submision_mode.dart create mode 100644 lib/core/constants/tender_submission_mode_extension.dart diff --git a/lib/core/constants/status_enums.dart b/lib/core/constants/status_enums.dart new file mode 100644 index 0000000..a799acc --- /dev/null +++ b/lib/core/constants/status_enums.dart @@ -0,0 +1,7 @@ +/// Barrel export for all status enums +library; + +export 'tender_approval_status.dart'; +export 'tender_approval_status_extension.dart'; +export 'tender_feedback.dart'; +export 'tender_feedback_extension.dart'; diff --git a/lib/core/constants/tender_approval_status.dart b/lib/core/constants/tender_approval_status.dart new file mode 100644 index 0000000..1fcc770 --- /dev/null +++ b/lib/core/constants/tender_approval_status.dart @@ -0,0 +1,21 @@ +/// Enum for tender approval statuses +enum TenderApprovalStatus { + submitted, + rejected, + unsubmitted, + unrejected; + + /// Convert enum to string value for API + String get value { + switch (this) { + case TenderApprovalStatus.submitted: + return 'submitted'; + case TenderApprovalStatus.rejected: + return 'rejected'; + case TenderApprovalStatus.unsubmitted: + return 'unsubmitted'; + case TenderApprovalStatus.unrejected: + return 'unrejected'; + } + } +} diff --git a/lib/core/constants/tender_approval_status_extension.dart b/lib/core/constants/tender_approval_status_extension.dart new file mode 100644 index 0000000..87c2923 --- /dev/null +++ b/lib/core/constants/tender_approval_status_extension.dart @@ -0,0 +1,20 @@ +import 'tender_approval_status.dart'; + +/// Extension for parsing string to TenderApprovalStatus +extension TenderApprovalStatusExtension on String { + /// Parse string to TenderApprovalStatus + TenderApprovalStatus? toTenderApprovalStatus() { + switch (toLowerCase()) { + case 'submitted': + return TenderApprovalStatus.submitted; + case 'rejected': + return TenderApprovalStatus.rejected; + case 'unsubmitted': + return TenderApprovalStatus.unsubmitted; + case 'unrejected': + return TenderApprovalStatus.unrejected; + default: + return null; + } + } +} diff --git a/lib/core/constants/tender_feedback.dart b/lib/core/constants/tender_feedback.dart new file mode 100644 index 0000000..e11807e --- /dev/null +++ b/lib/core/constants/tender_feedback.dart @@ -0,0 +1,21 @@ +/// Enum for tender feedback +enum TenderFeedback { + liked, + disliked, + unliked, + undisliked; + + /// Convert enum to string value for API + String get value { + switch (this) { + case TenderFeedback.liked: + return 'like'; + case TenderFeedback.disliked: + return 'dislike'; + case TenderFeedback.unliked: + return 'unlike'; + case TenderFeedback.undisliked: + return 'undislike'; + } + } +} diff --git a/lib/core/constants/tender_feedback_extension.dart b/lib/core/constants/tender_feedback_extension.dart new file mode 100644 index 0000000..203525f --- /dev/null +++ b/lib/core/constants/tender_feedback_extension.dart @@ -0,0 +1,20 @@ +import 'tender_feedback.dart'; + +/// Extension for parsing string to TenderFeedback +extension TenderFeedbackExtension on String { + /// Parse string to TenderFeedback + TenderFeedback? toTenderFeedback() { + switch (this) { + case 'like': + return TenderFeedback.liked; + case 'dislike': + return TenderFeedback.disliked; + case 'unlike': + return TenderFeedback.unliked; + case 'undislike': + return TenderFeedback.undisliked; + default: + return null; + } + } +} diff --git a/lib/core/constants/tender_submision_mode.dart b/lib/core/constants/tender_submision_mode.dart new file mode 100644 index 0000000..b74ef95 --- /dev/null +++ b/lib/core/constants/tender_submision_mode.dart @@ -0,0 +1,15 @@ +/// Enum for tender submission mode +enum TenderSubmissionMode { + selfApply, + partnership; + + /// Convert enum to string value for API + String get value { + switch (this) { + case TenderSubmissionMode.selfApply: + return 'self-apply'; + case TenderSubmissionMode.partnership: + return 'partnership'; + } + } +} diff --git a/lib/core/constants/tender_submission_mode_extension.dart b/lib/core/constants/tender_submission_mode_extension.dart new file mode 100644 index 0000000..9a7ebaa --- /dev/null +++ b/lib/core/constants/tender_submission_mode_extension.dart @@ -0,0 +1,17 @@ +import 'tender_submision_mode.dart'; + +/// Extension for parsing string to TenderSubmissionMode +extension TenderSubmissionModeExtension on String { + /// Parse string to TenderSubmissionMode + TenderSubmissionMode? toTenderSubmissionMode() { + switch (this) { + case 'self-apply': + return TenderSubmissionMode.selfApply; + case 'partnership': + return TenderSubmissionMode.partnership; + + default: + return null; + } + } +} diff --git a/lib/data/repositories/your_tenders_repository.dart b/lib/data/repositories/your_tenders_repository.dart index 7f59ee2..cf95ed2 100644 --- a/lib/data/repositories/your_tenders_repository.dart +++ b/lib/data/repositories/your_tenders_repository.dart @@ -16,20 +16,6 @@ class YourTendersRepository { }) : _yourTendersService = yourTendersService, _likedTendersService = likedTendersService; - Future> getApprovedTenders({ - required int limit, - required int offset, - required String createdFrom, - required String createdTo, - }) { - return _yourTendersService.getApprovedTenders( - limit: limit, - offset: offset, - createdFrom: createdFrom, - createdTo: createdTo, - ); - } - Future> getTenders({ required GetTendersRequestModel requestModel, }) { diff --git a/lib/data/services/api/your_tenders_api.dart b/lib/data/services/api/your_tenders_api.dart index 5dab60b..389b286 100644 --- a/lib/data/services/api/your_tenders_api.dart +++ b/lib/data/services/api/your_tenders_api.dart @@ -1,20 +1,4 @@ class YourTendersApi { - static const String tenderApprovalsStatus = - '/api/v1/tender-approvals?status=submitted'; - - static String getTenderApprovalsStatus({ - required int limit, - required int offset, - required String createdFrom, - required String createdTo, - }) { - if (createdFrom.isNotEmpty && createdTo.isNotEmpty) { - return '$tenderApprovalsStatus&created_from=$createdFrom&created_to=$createdTo'; - } - return tenderApprovalsStatus; - } - // return '$tenderApprovalsStatus?limit=$limit&offset=$offset'; - static const String tenderApproval = '/api/v1/tender-approvals'; static String getTenders({ diff --git a/lib/data/services/your_tenders_service.dart b/lib/data/services/your_tenders_service.dart index 3234744..410ea16 100644 --- a/lib/data/services/your_tenders_service.dart +++ b/lib/data/services/your_tenders_service.dart @@ -11,26 +11,6 @@ class YourTendersService { final NetworkManager _networkManager; - Future> getApprovedTenders({ - required int limit, - required int offset, - required String createdFrom, - required String createdTo, - }) async { - final result = await _networkManager.makeRequest( - YourTendersApi.getTenderApprovalsStatus( - limit: limit, - offset: offset, - createdFrom: createdFrom, - createdTo: createdTo, - ), - (json) => TenderApprovalsResponse.fromJson(json), - method: 'GET', - ); - - return result; - } - Future> getTenders({ required GetTendersRequestModel requestModel, }) async { diff --git a/lib/view_models/liked_tenders_view_model.dart b/lib/view_models/liked_tenders_view_model.dart index 0799a6d..f4b74bc 100644 --- a/lib/view_models/liked_tenders_view_model.dart +++ b/lib/view_models/liked_tenders_view_model.dart @@ -7,6 +7,7 @@ import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_ import 'package:tm_app/data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart'; import 'package:tm_app/view_models/home_view_model.dart'; +import '../core/constants/tender_approval_status.dart'; import '../data/services/model/feedback_response/feedback_response.dart'; import '../data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart'; @@ -245,12 +246,14 @@ class LikedTendersViewModel with ChangeNotifier { /// Check if tender is submitted bool isTenderSubmitted(String tenderId) { - return getApprovalStatusForTenderId(tenderId) == 'submitted'; + return getApprovalStatusForTenderId(tenderId) == + TenderApprovalStatus.submitted.value; } /// Check if tender is rejected bool isTenderRejected(String tenderId) { - return getApprovalStatusForTenderId(tenderId) == 'rejected'; + return getApprovalStatusForTenderId(tenderId) == + TenderApprovalStatus.rejected.value; } Future submitTenderApproval({ @@ -268,12 +271,15 @@ class LikedTendersViewModel with ChangeNotifier { final existingApproval = getApprovalStatusForTender(tenderId); if (existingApproval != null) { - if (existingApproval.status == 'submitted') { + if (existingApproval.status == TenderApprovalStatus.submitted.value) { // Remove from list if already submitted tenderApprovals.removeWhere((a) => a.tenderId == tenderId); - } else if (existingApproval.status == 'rejected') { + } else if (existingApproval.status == + TenderApprovalStatus.rejected.value) { // Change rejected to submitted - final updatedApproval = existingApproval.copyWith(status: 'submitted'); + final updatedApproval = existingApproval.copyWith( + status: TenderApprovalStatus.submitted.value, + ); final index = tenderApprovals.indexWhere((a) => a.tenderId == tenderId); if (index != -1) { tenderApprovals[index] = updatedApproval; @@ -283,7 +289,7 @@ class LikedTendersViewModel with ChangeNotifier { // Add new approval with submitted status final newApproval = TenderApprovalsData( id: null, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, tenderId: tenderId, companyId: null, submissionMode: submissionMode, @@ -298,7 +304,7 @@ class LikedTendersViewModel with ChangeNotifier { // Make server request final result = await _tendersRepository.toggleApprovals( tenderId: tenderId, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, submissionMode: submissionMode, ); @@ -334,12 +340,15 @@ class LikedTendersViewModel with ChangeNotifier { final existingApproval = getApprovalStatusForTender(tenderId); if (existingApproval != null) { - if (existingApproval.status == 'rejected') { + if (existingApproval.status == TenderApprovalStatus.rejected.value) { // Remove from list if already rejected tenderApprovals.removeWhere((a) => a.tenderId == tenderId); - } else if (existingApproval.status == 'submitted') { + } else if (existingApproval.status == + TenderApprovalStatus.submitted.value) { // Change submitted to rejected - final updatedApproval = existingApproval.copyWith(status: 'rejected'); + final updatedApproval = existingApproval.copyWith( + status: TenderApprovalStatus.rejected.value, + ); final index = tenderApprovals.indexWhere((a) => a.tenderId == tenderId); if (index != -1) { tenderApprovals[index] = updatedApproval; @@ -349,7 +358,7 @@ class LikedTendersViewModel with ChangeNotifier { // Add new approval with rejected status final newApproval = TenderApprovalsData( id: null, - status: 'rejected', + status: TenderApprovalStatus.rejected.value, tenderId: tenderId, companyId: null, submissionMode: submissionMode, @@ -364,7 +373,7 @@ class LikedTendersViewModel with ChangeNotifier { // Make server request final result = await _tendersRepository.toggleApprovals( tenderId: tenderId, - status: 'rejected', + status: TenderApprovalStatus.rejected.value, submissionMode: submissionMode, ); diff --git a/lib/view_models/tender_detail_view_model.dart b/lib/view_models/tender_detail_view_model.dart index 627c9ca..649ada4 100644 --- a/lib/view_models/tender_detail_view_model.dart +++ b/lib/view_models/tender_detail_view_model.dart @@ -5,6 +5,7 @@ import 'package:tm_app/data/repositories/tenders_repository.dart'; import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import 'package:tm_app/data/services/model/tender_detail_response/tender_detail_response_model.dart'; +import '../core/constants/tender_approval_status.dart'; import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart'; import '../data/services/model/tender_approvals_data/tender_approvals_data.dart'; import '../data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart'; @@ -73,7 +74,7 @@ class TenderDetailViewModel with ChangeNotifier { notifyListeners(); final result = await _tendersRepository.toggleApprovals( tenderId: tenderId, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, submissionMode: submissionMode, ); switch (result) { @@ -102,7 +103,7 @@ class TenderDetailViewModel with ChangeNotifier { notifyListeners(); final result = await _tendersRepository.toggleApprovals( tenderId: tenderId, - status: 'rejected', + status: TenderApprovalStatus.rejected.value, submissionMode: submissionMode, ); switch (result) { diff --git a/lib/view_models/tenders_view_model.dart b/lib/view_models/tenders_view_model.dart index f95c7f7..5f0cf69 100644 --- a/lib/view_models/tenders_view_model.dart +++ b/lib/view_models/tenders_view_model.dart @@ -8,6 +8,7 @@ import 'package:tm_app/data/services/model/tender_approvals_toggle_data/tender_a import 'package:tm_app/data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart'; import 'package:tm_app/data/services/model/tenders/tenders_response/tenders_response.dart'; +import '../core/constants/tender_submision_mode.dart'; import '../core/utils/result.dart'; import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart'; import '../data/services/model/tender_approvals_data/tender_approvals_data.dart'; @@ -420,7 +421,10 @@ class TendersViewModel with ChangeNotifier { status: _tenderApprovalToggleData!.status!, tenderId: _tenderApprovalToggleData!.tenderId, companyId: _tenderApprovalToggleData!.companyId, - submissionMode: _tenderApprovalToggleData!.submissionMode, + submissionMode: + (_tenderApprovalToggleData!.submissionMode?.isNotEmpty == true) + ? _tenderApprovalToggleData!.submissionMode + : TenderSubmissionMode.selfApply.value, createdAt: _tenderApprovalToggleData!.createdAt, tender: null, // Tender data is not included in toggle response ); diff --git a/lib/view_models/your_tenders_view_model.dart b/lib/view_models/your_tenders_view_model.dart index 3be71e0..c18ca63 100644 --- a/lib/view_models/your_tenders_view_model.dart +++ b/lib/view_models/your_tenders_view_model.dart @@ -6,6 +6,8 @@ import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_ import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart'; import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart'; +import '../core/constants/tender_approval_status.dart'; +import '../core/constants/tender_feedback.dart'; import '../data/services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart'; import '../data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; @@ -201,7 +203,7 @@ class YourTendersViewModel with ChangeNotifier { await getTenders(requestModel: requestModel); } else if (selectedStatus == YourTendersStrings.tendersSubmitted) { final requestModel = GetTendersRequestModel( - status: 'submitted', + status: TenderApprovalStatus.submitted.value, createdFrom: startDateUnix, createdTo: endDateUnix, limit: _tendersLimit, @@ -272,7 +274,7 @@ class YourTendersViewModel with ChangeNotifier { await getTenders(requestModel: requestModel, reset: true); } else if (selectedStatus == YourTendersStrings.tendersSubmitted) { final requestModel = GetTendersRequestModel( - status: 'submitted', + status: TenderApprovalStatus.submitted.value, createdFrom: startDateUnix, createdTo: endDateUnix, limit: _tendersLimit, @@ -280,9 +282,15 @@ class YourTendersViewModel with ChangeNotifier { ); await getTenders(requestModel: requestModel, reset: true); } else if (selectedStatus == YourTendersStrings.likeTenders) { - await getTendersFeedback(feedbackType: 'like', reset: true); + await getTendersFeedback( + feedbackType: TenderFeedback.liked.value, + reset: true, + ); } else if (selectedStatus == YourTendersStrings.dislikeTenders) { - await getTendersFeedback(feedbackType: 'dislike', reset: true); + await getTendersFeedback( + feedbackType: TenderFeedback.disliked.value, + reset: true, + ); } } } diff --git a/lib/views/detail/pages/detail_desktop_page.dart b/lib/views/detail/pages/detail_desktop_page.dart index 23256c8..c9e2d90 100644 --- a/lib/views/detail/pages/detail_desktop_page.dart +++ b/lib/views/detail/pages/detail_desktop_page.dart @@ -7,6 +7,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_action.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../core/utils/app_toast.dart'; import '../../shared/desktop_navigation_widget.dart'; import '../strings/tender_details_strings.dart'; @@ -31,7 +32,7 @@ class _TenderDetailDesktopPageState extends State { void _viewModelListener() { if (viewModel.status.isNotEmpty && - viewModel.status == 'submitted' && + viewModel.status == TenderApprovalStatus.submitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -39,7 +40,7 @@ class _TenderDetailDesktopPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unsubmitted' && + viewModel.status == TenderApprovalStatus.unsubmitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -47,7 +48,7 @@ class _TenderDetailDesktopPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'rejected' && + viewModel.status == TenderApprovalStatus.rejected.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -55,7 +56,7 @@ class _TenderDetailDesktopPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unrejected' && + viewModel.status == TenderApprovalStatus.unrejected.value && viewModel.approvalStatus == true) { AppToast.success( context, diff --git a/lib/views/detail/pages/detail_mobile_page.dart b/lib/views/detail/pages/detail_mobile_page.dart index 37fd1b4..3f66d3d 100644 --- a/lib/views/detail/pages/detail_mobile_page.dart +++ b/lib/views/detail/pages/detail_mobile_page.dart @@ -10,6 +10,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; import 'package:tm_app/views/shared/tender_app_bar.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../core/utils/app_toast.dart'; class TenderDetailMobilePage extends StatefulWidget { @@ -31,7 +32,7 @@ class _TenderDetailMobilePageState extends State { void _viewModelListener() { if (viewModel.status.isNotEmpty && - viewModel.status == 'submitted' && + viewModel.status == TenderApprovalStatus.submitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -39,7 +40,7 @@ class _TenderDetailMobilePageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unsubmitted' && + viewModel.status == TenderApprovalStatus.unsubmitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -47,7 +48,7 @@ class _TenderDetailMobilePageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'rejected' && + viewModel.status == TenderApprovalStatus.rejected.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -55,7 +56,7 @@ class _TenderDetailMobilePageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unrejected' && + viewModel.status == TenderApprovalStatus.unrejected.value && viewModel.approvalStatus == true) { AppToast.success( context, diff --git a/lib/views/detail/pages/detail_tablet_page.dart b/lib/views/detail/pages/detail_tablet_page.dart index 7a2b9ad..5299eba 100644 --- a/lib/views/detail/pages/detail_tablet_page.dart +++ b/lib/views/detail/pages/detail_tablet_page.dart @@ -9,6 +9,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; import 'package:tm_app/views/shared/tablet_navigation_widget.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../core/utils/app_toast.dart'; import '../../shared/tender_app_bar.dart'; import '../strings/tender_details_strings.dart'; @@ -32,7 +33,7 @@ class _TenderDetailTabletPageState extends State { void _viewModelListener() { if (viewModel.status.isNotEmpty && - viewModel.status == 'submitted' && + viewModel.status == TenderApprovalStatus.submitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -40,7 +41,7 @@ class _TenderDetailTabletPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unsubmitted' && + viewModel.status == TenderApprovalStatus.unsubmitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -48,7 +49,7 @@ class _TenderDetailTabletPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'rejected' && + viewModel.status == TenderApprovalStatus.rejected.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -56,7 +57,7 @@ class _TenderDetailTabletPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unrejected' && + viewModel.status == TenderApprovalStatus.unrejected.value && viewModel.approvalStatus == true) { AppToast.success( context, diff --git a/lib/views/detail/widgets/tender_detail_action.dart b/lib/views/detail/widgets/tender_detail_action.dart index e02e909..165fa33 100644 --- a/lib/views/detail/widgets/tender_detail_action.dart +++ b/lib/views/detail/widgets/tender_detail_action.dart @@ -6,6 +6,7 @@ import 'package:tm_app/view_models/tender_detail_view_model.dart'; import 'package:tm_app/views/shared/base_button.dart'; import 'package:tm_app/views/shared/select_submission_bottom_sheet.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../data/services/model/tender_data/tender_data.dart'; import '../../shared/select_submission_dialog.dart'; import '../strings/tender_details_strings.dart'; @@ -47,7 +48,8 @@ class TenderDetailActions extends StatelessWidget { backgroundColor: AppColors.primary30, textColor: AppColors.mainBlue, onPressed: () { - if (viewModel.status == 'submitted') { + if (viewModel.status == + TenderApprovalStatus.submitted.value) { viewModel.submitTenderApproval( tenderId: detail.id!, submissionMode: 'self-apply', @@ -156,7 +158,8 @@ class TenderDetailActions extends StatelessWidget { backgroundColor: AppColors.lightBlue, textColor: AppColors.mainBlue, onPressed: () { - if (viewModel.status == 'submitted') { + if (viewModel.status == + TenderApprovalStatus.submitted.value) { viewModel.submitTenderApproval( tenderId: detail.id!, submissionMode: 'self-apply', diff --git a/lib/views/shared/select_submission_bottom_sheet.dart b/lib/views/shared/select_submission_bottom_sheet.dart index 1ccb317..480cb42 100644 --- a/lib/views/shared/select_submission_bottom_sheet.dart +++ b/lib/views/shared/select_submission_bottom_sheet.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:tm_app/core/utils/size_config.dart'; +import '../../core/constants/tender_submision_mode.dart'; import '../../core/theme/colors.dart'; class SelectSubmissionBottomSheet extends StatefulWidget { @@ -16,7 +17,7 @@ class SelectSubmissionBottomSheet extends StatefulWidget { class _SelectSubmissionBottomSheetState extends State { int selectedType = 0; - String type = 'self-apply'; + String type = TenderSubmissionMode.selfApply.value; @override Widget build(BuildContext context) { @@ -46,20 +47,20 @@ class _SelectSubmissionBottomSheetState SizedBox(height: 8.0.h()), _submissionType( title: 'self-apply', - isSelected: type == 'self-apply', + isSelected: type == TenderSubmissionMode.selfApply.value, onTap: () { selectedType = 0; - type = 'self-apply'; + type = TenderSubmissionMode.selfApply.value; setState(() {}); }, ), SizedBox(height: 8.0.h()), _submissionType( title: 'Partnership', - isSelected: type == 'partnership', + isSelected: type == TenderSubmissionMode.partnership.value, onTap: () { selectedType = 1; - type = 'partnership'; + type = TenderSubmissionMode.partnership.value; setState(() {}); }, ), diff --git a/lib/views/shared/select_submission_dialog.dart b/lib/views/shared/select_submission_dialog.dart index 5e59bf3..14ce045 100644 --- a/lib/views/shared/select_submission_dialog.dart +++ b/lib/views/shared/select_submission_dialog.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:tm_app/core/utils/size_config.dart'; +import '../../core/constants/tender_submision_mode.dart'; import '../../core/theme/colors.dart'; class SelectSubmissionDialog extends StatefulWidget { @@ -14,7 +15,7 @@ class SelectSubmissionDialog extends StatefulWidget { class _SelectSubmissionDialogState extends State { int selectedType = 0; - String type = 'self-apply'; + String type = TenderSubmissionMode.selfApply.value; @override Widget build(BuildContext context) { return Dialog( @@ -42,21 +43,21 @@ class _SelectSubmissionDialogState extends State { ), SizedBox(height: 8.0.h()), _submissionType( - title: 'self-apply', - isSelected: type == 'self-apply', + title: 'Self-apply', + isSelected: type == TenderSubmissionMode.selfApply.value, onTap: () { selectedType = 0; - type = 'self-apply'; + type = TenderSubmissionMode.selfApply.value; setState(() {}); }, ), SizedBox(height: 8.0.h()), _submissionType( title: 'Partnership', - isSelected: type == 'partnership', + isSelected: type == TenderSubmissionMode.partnership.value, onTap: () { selectedType = 1; - type = 'partnership'; + type = TenderSubmissionMode.partnership.value; setState(() {}); }, ), diff --git a/lib/views/tenders/widgets/tender_action_buttons_row.dart b/lib/views/tenders/widgets/tender_action_buttons_row.dart index 7b07606..1472c06 100644 --- a/lib/views/tenders/widgets/tender_action_buttons_row.dart +++ b/lib/views/tenders/widgets/tender_action_buttons_row.dart @@ -5,6 +5,9 @@ import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import 'package:tm_app/view_models/tenders_view_model.dart'; import '../../../core/constants/assets.dart'; +import '../../../core/constants/tender_approval_status.dart'; +import '../../../core/constants/tender_feedback.dart'; +import '../../../core/constants/tender_submision_mode.dart'; import '../../../core/theme/colors.dart'; import '../../../core/utils/size_config.dart'; import '../../shared/select_submission_bottom_sheet.dart'; @@ -54,7 +57,7 @@ class TenderActionButtonsRow extends StatelessWidget { } final approval = viewModel.getTenderApprovalForTender(tender.id!); - final isRejected = approval?.status == 'rejected'; + final isRejected = approval?.status == TenderApprovalStatus.rejected.value; return Tooltip( message: TendersStrings.reject, @@ -63,8 +66,8 @@ class TenderActionButtonsRow extends StatelessWidget { onTap: () { viewModel.toggleApprovals( tenderId: tender.id!, - submissionMode: 'self-apply', - status: 'rejected', + submissionMode: TenderSubmissionMode.selfApply.value, + status: TenderApprovalStatus.rejected.value, ); }, child: Column( @@ -109,7 +112,7 @@ class TenderActionButtonsRow extends StatelessWidget { } final approval = viewModel.getTenderApprovalForTender(tender.id!); - final isApproved = approval?.status == 'submitted'; + final isApproved = approval?.status == TenderApprovalStatus.submitted.value; return Tooltip( message: TendersStrings.submit, @@ -119,8 +122,11 @@ class TenderActionButtonsRow extends StatelessWidget { if (isApproved) { viewModel.toggleApprovals( tenderId: tender.id!, - submissionMode: approval?.submissionMode ?? 'self-apply', - status: 'submitted', + submissionMode: + (approval?.submissionMode?.isNotEmpty == true) + ? approval!.submissionMode! + : TenderSubmissionMode.selfApply.value, + status: TenderApprovalStatus.submitted.value, ); } else { final isMobile = MediaQuery.sizeOf(context).width < 600; @@ -134,7 +140,7 @@ class TenderActionButtonsRow extends StatelessWidget { viewModel.toggleApprovals( tenderId: tender.id!, submissionMode: value, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, ); }, ); @@ -149,7 +155,7 @@ class TenderActionButtonsRow extends StatelessWidget { viewModel.toggleApprovals( tenderId: tender.id!, submissionMode: value, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, ); }, ); @@ -200,7 +206,7 @@ class TenderActionButtonsRow extends StatelessWidget { } final feedback = viewModel.getFeedbackForTender(tender.id!); - final isDisliked = feedback?.feedbackType == 'dislike'; + final isDisliked = feedback?.feedbackType == TenderFeedback.disliked.value; return Tooltip( message: TendersStrings.dislike, @@ -209,7 +215,7 @@ class TenderActionButtonsRow extends StatelessWidget { onTap: () { viewModel.toogleFeedback( tenderId: tender.id!, - feedbackType: 'dislike', + feedbackType: TenderFeedback.disliked.value, ); }, child: Column( @@ -247,14 +253,17 @@ class TenderActionButtonsRow extends StatelessWidget { } final feedback = viewModel.getFeedbackForTender(tender.id!); - final isLiked = feedback?.feedbackType == 'like'; + final isLiked = feedback?.feedbackType == TenderFeedback.liked.value; return Tooltip( message: TendersStrings.like, child: InkWell( splashColor: Colors.transparent, onTap: () { - viewModel.toogleFeedback(tenderId: tender.id!, feedbackType: 'like'); + viewModel.toogleFeedback( + tenderId: tender.id!, + feedbackType: TenderFeedback.liked.value, + ); }, child: Column( children: [ 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 fbdaa71..1b1ee5c 100644 --- a/lib/views/your_tenders/pages/your_tenders_desktop_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_desktop_page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:tm_app/core/constants/tender_feedback.dart'; import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/view_models/your_tenders_view_model.dart'; import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart'; @@ -73,7 +74,7 @@ class _YourTendersDesktopPageState extends State viewModel.likedTendersData != null) { return LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'liked', + status: TenderFeedback.liked.value, isDesctop: true, ); } else if (viewModel.selectedStatus == @@ -81,7 +82,7 @@ class _YourTendersDesktopPageState extends State viewModel.likedTendersData != null) { return LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'disliked', + status: TenderFeedback.disliked.value, isDesctop: true, ); } else if (viewModel.data != null) { 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 80060c1..27990e0 100644 --- a/lib/views/your_tenders/pages/your_tenders_mobile_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_mobile_page.dart @@ -8,6 +8,8 @@ import 'package:tm_app/views/your_tenders/widgets/filter_button.dart'; import 'package:tm_app/views/your_tenders/widgets/liked_disliked_tenders_list.dart'; import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart'; +import '../../../core/constants/tender_feedback.dart'; + class YourTendersMobilePage extends StatefulWidget { const YourTendersMobilePage({super.key}); @@ -65,7 +67,7 @@ class _YourTendersMobilePageState extends State { Expanded( child: LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'liked tenders', + status: TenderFeedback.liked.value, isDesctop: false, ), ) @@ -75,7 +77,7 @@ class _YourTendersMobilePageState extends State { Expanded( child: LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'disliked', + status: TenderFeedback.disliked.value, isDesctop: false, ), ) 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 cd39fb3..e58341e 100644 --- a/lib/views/your_tenders/pages/your_tenders_tablet_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_tablet_page.dart @@ -8,6 +8,7 @@ import 'package:tm_app/views/your_tenders/widgets/liked_disliked_tenders_list.da import 'package:tm_app/views/your_tenders/widgets/tablet_desktop_appbar.dart'; import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart'; +import '../../../core/constants/tender_feedback.dart'; import '../../shared/tablet_navigation_widget.dart'; import '../../shared/tender_app_bar.dart'; import '../strings/your_tenders_strings.dart'; @@ -85,7 +86,7 @@ class _YourTendersTabletPageState extends State viewModel.likedTendersData != null) { return LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'liked', + status: TenderFeedback.liked.value, isDesctop: false, ); } else if (viewModel.selectedStatus == @@ -93,7 +94,7 @@ class _YourTendersTabletPageState extends State viewModel.likedTendersData != null) { return LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'disliked', + status: TenderFeedback.disliked.value, isDesctop: false, ); } else if (viewModel.data != null) { diff --git a/lib/views/your_tenders/widgets/tender_card.dart b/lib/views/your_tenders/widgets/tender_card.dart index 6cc016b..d6405e3 100644 --- a/lib/views/your_tenders/widgets/tender_card.dart +++ b/lib/views/your_tenders/widgets/tender_card.dart @@ -5,6 +5,7 @@ import 'package:tm_app/core/utils/date_utils.dart'; import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import '../../../core/constants/assets.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../core/theme/colors.dart'; import '../../../core/utils/size_config.dart'; @@ -29,7 +30,7 @@ class TenderCard extends StatelessWidget { statusIcon = AssetsManager.tickCircle; statusCardColor = AppColors.green20; statusTextColor = AppColors.green30; - } else if (tender.status == 'submitted') { + } else if (tender.status == TenderApprovalStatus.submitted.value) { backgroundColor = AppColors.grey0; borderColor = AppColors.grey30; statusIcon = null; From d56261b6648b99d96f72e5f5cff07dacaf4b438a Mon Sep 17 00:00:00 2001 From: amirrezaghabeli Date: Mon, 8 Sep 2025 12:54:27 +0330 Subject: [PATCH 4/5] strings check --- lib/core/constants/common_strings.dart | 9 +- .../detail/widgets/tender_detail_action.dart | 10 +- .../pages/liked_tenders_desktop_page.dart | 12 ++- .../pages/liked_tenders_tablet_page.dart | 12 ++- .../strings/liked_tenders_strings.dart | 5 +- .../widgets/liked_tenders_list_item.dart | 5 +- lib/views/login/pages/login_desktop_page.dart | 4 +- lib/views/login/pages/login_mobile_page.dart | 4 +- lib/views/login/pages/login_tablet_page.dart | 4 +- lib/views/shared/bottom_navigation.dart | 98 ------------------- .../select_submission_bottom_sheet.dart | 9 +- .../shared/select_submission_dialog.dart | 9 +- .../strings/your_tenders_strings.dart | 3 + .../widgets/liked_disliked_tenders_list.dart | 7 +- .../widgets/tenders_submitted.dart | 9 +- 15 files changed, 64 insertions(+), 136 deletions(-) delete mode 100644 lib/views/shared/bottom_navigation.dart diff --git a/lib/core/constants/common_strings.dart b/lib/core/constants/common_strings.dart index 6a264d8..cdfd6b4 100644 --- a/lib/core/constants/common_strings.dart +++ b/lib/core/constants/common_strings.dart @@ -3,11 +3,8 @@ class CommonStrings { // Truly shared strings across multiple features static const String noData = 'No data'; + static const String selectSubmission = 'Select Submission'; + static const String selfApply = 'Self-apply'; + static const String partnership = 'Partnership'; static const String confirm = 'Confirm'; - static const String submit = 'Submit'; - static const String cancel = 'Cancel'; - static const String loading = 'Loading...'; - static const String error = 'Error'; - static const String success = 'Success'; - static const String retry = 'Retry'; } diff --git a/lib/views/detail/widgets/tender_detail_action.dart b/lib/views/detail/widgets/tender_detail_action.dart index 165fa33..d1b4aab 100644 --- a/lib/views/detail/widgets/tender_detail_action.dart +++ b/lib/views/detail/widgets/tender_detail_action.dart @@ -7,6 +7,7 @@ import 'package:tm_app/views/shared/base_button.dart'; import 'package:tm_app/views/shared/select_submission_bottom_sheet.dart'; import '../../../core/constants/tender_approval_status.dart'; +import '../../../core/constants/tender_submision_mode.dart'; import '../../../data/services/model/tender_data/tender_data.dart'; import '../../shared/select_submission_dialog.dart'; import '../strings/tender_details_strings.dart'; @@ -52,7 +53,8 @@ class TenderDetailActions extends StatelessWidget { TenderApprovalStatus.submitted.value) { viewModel.submitTenderApproval( tenderId: detail.id!, - submissionMode: 'self-apply', + submissionMode: + TenderSubmissionMode.selfApply.value, ); } else { showModalBottomSheet( @@ -97,7 +99,7 @@ class TenderDetailActions extends StatelessWidget { onPressed: () { viewModel.rejectTenderApproval( tenderId: detail.id!, - submissionMode: 'self-apply', + submissionMode: TenderSubmissionMode.selfApply.value, ); }, ); @@ -133,7 +135,7 @@ class TenderDetailActions extends StatelessWidget { onPressed: () { viewModel.rejectTenderApproval( tenderId: detail.id!, - submissionMode: 'self-apply', + submissionMode: TenderSubmissionMode.selfApply.value, ); }, width: 120.0.w(), @@ -162,7 +164,7 @@ class TenderDetailActions extends StatelessWidget { TenderApprovalStatus.submitted.value) { viewModel.submitTenderApproval( tenderId: detail.id!, - submissionMode: 'self-apply', + submissionMode: TenderSubmissionMode.selfApply.value, ); } else { (MediaQuery.sizeOf(context).width > 600) diff --git a/lib/views/liked_tenders/pages/liked_tenders_desktop_page.dart b/lib/views/liked_tenders/pages/liked_tenders_desktop_page.dart index d7a2391..e892940 100644 --- a/lib/views/liked_tenders/pages/liked_tenders_desktop_page.dart +++ b/lib/views/liked_tenders/pages/liked_tenders_desktop_page.dart @@ -150,7 +150,7 @@ class _LikedTendersDesktopPageState extends State { children: [ const Spacer(), Text( - 'Page', + LikedTendersStrings.page, style: TextStyle( fontSize: 13.0.sp(), fontWeight: FontWeight.w300, @@ -165,7 +165,9 @@ class _LikedTendersDesktopPageState extends State { context: context, builder: (context) { return AlertDialog( - title: const Text('Select Page'), + title: const Text( + LikedTendersStrings.selectPage, + ), content: SizedBox( width: 200, height: 300, @@ -174,7 +176,9 @@ class _LikedTendersDesktopPageState extends State { itemBuilder: (context, index) { final pageNumber = index + 1; return ListTile( - title: Text('Page $pageNumber'), + title: Text( + '${LikedTendersStrings.page} $pageNumber', + ), onTap: () => Navigator.pop( context, @@ -223,7 +227,7 @@ class _LikedTendersDesktopPageState extends State { SizedBox(width: 5.0.w()), Text( - 'Of', + LikedTendersStrings.of, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w400, diff --git a/lib/views/liked_tenders/pages/liked_tenders_tablet_page.dart b/lib/views/liked_tenders/pages/liked_tenders_tablet_page.dart index 02f538f..6dc6ed6 100644 --- a/lib/views/liked_tenders/pages/liked_tenders_tablet_page.dart +++ b/lib/views/liked_tenders/pages/liked_tenders_tablet_page.dart @@ -160,7 +160,7 @@ class _LikedTendersTabletPageState extends State { children: [ const Spacer(), Text( - 'Page', + LikedTendersStrings.page, style: TextStyle( fontSize: 13.0.sp(), fontWeight: FontWeight.w300, @@ -175,7 +175,9 @@ class _LikedTendersTabletPageState extends State { context: context, builder: (context) { return AlertDialog( - title: const Text('Select Page'), + title: const Text( + LikedTendersStrings.selectPage, + ), content: SizedBox( width: 200, height: 300, @@ -184,7 +186,9 @@ class _LikedTendersTabletPageState extends State { itemBuilder: (context, index) { final pageNumber = index + 1; return ListTile( - title: Text('Page $pageNumber'), + title: Text( + '${LikedTendersStrings.page} $pageNumber', + ), onTap: () => Navigator.pop( context, @@ -233,7 +237,7 @@ class _LikedTendersTabletPageState extends State { SizedBox(width: 5.0.w()), Text( - 'Of', + LikedTendersStrings.of, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w400, diff --git a/lib/views/liked_tenders/strings/liked_tenders_strings.dart b/lib/views/liked_tenders/strings/liked_tenders_strings.dart index 7ec0c42..896ba57 100644 --- a/lib/views/liked_tenders/strings/liked_tenders_strings.dart +++ b/lib/views/liked_tenders/strings/liked_tenders_strings.dart @@ -12,5 +12,8 @@ class LikedTendersStrings { static const startDate = 'YYYY/MM/DD'; static const endDate = 'YYYY/MM/DD'; static const approvedTenders = 'Approved tenders'; - static const noLikedTenders = 'You haven’t liked any tenders yet.'; + static const noLikedTenders = 'You haven’t liked any tenders yet!'; + static const page = 'Page'; + static const selectPage = 'Select Page'; + static const of = 'Of'; } diff --git a/lib/views/liked_tenders/widgets/liked_tenders_list_item.dart b/lib/views/liked_tenders/widgets/liked_tenders_list_item.dart index 8b8be25..545a741 100644 --- a/lib/views/liked_tenders/widgets/liked_tenders_list_item.dart +++ b/lib/views/liked_tenders/widgets/liked_tenders_list_item.dart @@ -10,6 +10,7 @@ import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import 'package:tm_app/view_models/liked_tenders_view_model.dart'; import 'package:tm_app/views/home/strings/home_strings.dart'; +import '../../../core/constants/tender_submision_mode.dart'; import '../../../data/services/model/tender_approvals_data/tender_approvals_data.dart'; import '../../shared/select_submission_bottom_sheet.dart'; import '../../shared/select_submission_dialog.dart'; @@ -178,7 +179,7 @@ class LikedListItem extends StatelessWidget { onTap: () { viewModel.rejectTenderApproval( tenderId: tender.id!, - submissionMode: 'self-apply', + submissionMode: TenderSubmissionMode.selfApply.value, ); }, child: Container( @@ -211,7 +212,7 @@ class LikedListItem extends StatelessWidget { if (viewModel.isTenderSubmitted(tender.id!)) { viewModel.submitTenderApproval( tenderId: tender.id!, - submissionMode: 'self-apply', + submissionMode: TenderSubmissionMode.selfApply.value, ); } else { (kIsWeb && MediaQuery.sizeOf(context).width > 600) diff --git a/lib/views/login/pages/login_desktop_page.dart b/lib/views/login/pages/login_desktop_page.dart index a7db0a9..087e298 100644 --- a/lib/views/login/pages/login_desktop_page.dart +++ b/lib/views/login/pages/login_desktop_page.dart @@ -1,11 +1,11 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:tm_app/core/theme/colors.dart'; import '../../../core/constants/assets.dart'; +import '../../../core/routes/app_routes.dart'; import '../../../core/utils/app_toast.dart'; import '../../../core/utils/size_config.dart'; import '../../../view_models/auth_view_model.dart'; @@ -31,7 +31,7 @@ class _LoginDesktopPageState extends State { void _viewModelListener() { if (viewModel.loggedInUser != null) { - Router.neglect(context, () => context.go('/home')); + Router.neglect(context, () => HomeRouteData().go(context)); } else if (viewModel.errorMessage != null) { AppToast.error(context, viewModel.errorMessage!); } diff --git a/lib/views/login/pages/login_mobile_page.dart b/lib/views/login/pages/login_mobile_page.dart index 4f4111a..4898ca3 100644 --- a/lib/views/login/pages/login_mobile_page.dart +++ b/lib/views/login/pages/login_mobile_page.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:tm_app/core/theme/colors.dart'; import '../../../core/constants/assets.dart'; +import '../../../core/routes/app_routes.dart'; import '../../../core/utils/app_toast.dart'; import '../../../core/utils/size_config.dart'; import '../../../view_models/auth_view_model.dart'; @@ -29,7 +29,7 @@ class _LoginMobilePageState extends State { void _viewModelListener() { if (viewModel.loggedInUser != null) { - Router.neglect(context, () => context.go('/home')); + Router.neglect(context, () => HomeRouteData().go(context)); } if (viewModel.errorMessage != null) { AppToast.error(context, viewModel.errorMessage!); diff --git a/lib/views/login/pages/login_tablet_page.dart b/lib/views/login/pages/login_tablet_page.dart index d114a29..a0979ff 100644 --- a/lib/views/login/pages/login_tablet_page.dart +++ b/lib/views/login/pages/login_tablet_page.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:tm_app/core/theme/colors.dart'; import '../../../core/constants/assets.dart'; +import '../../../core/routes/app_routes.dart'; import '../../../core/utils/app_toast.dart'; import '../../../core/utils/size_config.dart'; import '../../../view_models/auth_view_model.dart'; @@ -29,7 +29,7 @@ class _LoginTabletPageState extends State { void _viewModelListener() { if (viewModel.loggedInUser != null) { - Router.neglect(context, () => context.go('/home')); + Router.neglect(context, () => HomeRouteData().go(context)); } if (viewModel.errorMessage != null) { AppToast.error(context, viewModel.errorMessage!); diff --git a/lib/views/shared/bottom_navigation.dart b/lib/views/shared/bottom_navigation.dart deleted file mode 100644 index 4a3f178..0000000 --- a/lib/views/shared/bottom_navigation.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:tm_app/core/constants/assets.dart'; - -import '../../core/utils/size_config.dart'; - -class TenderBottomNavigation extends StatefulWidget { - const TenderBottomNavigation({super.key}); - - @override - State createState() => _TenderBottomNavigationState(); -} - -class _TenderBottomNavigationState extends State { - int activeTab = 0; - - @override - Widget build(BuildContext context) { - return Container( - height: 72.0.h(), - decoration: BoxDecoration( - color: Color(0xFFE3E3E3), - border: Border.fromBorderSide(BorderSide(color: Color(0xFFE3E3E3))), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - _bottomNavigationItem( - text: 'Home', - isActive: activeTab == 0, - onTap: () { - setState(() { - activeTab = 0; - }); - }, - iconPath: 'assets/icons/home.svg', - activeIconPath: AssetsManager.homeActive, - ), - _bottomNavigationItem( - text: 'Tenders', - isActive: activeTab == 1, - onTap: () { - setState(() { - activeTab = 1; - }); - }, - iconPath: 'assets/icons/task_square.svg', - activeIconPath: 'assets/icons/task-square_active.svg', - ), - _bottomNavigationItem( - text: 'Profile', - isActive: activeTab == 2, - onTap: () { - setState(() { - activeTab = 2; - }); - }, - iconPath: 'assets/icons/profile-circle.svg', - activeIconPath: 'assets/icons/profile-circle_active.svg', - ), - ], - ), - ); - } - - Widget _bottomNavigationItem({ - required String text, - required bool isActive, - required VoidCallback onTap, - required String iconPath, - required String activeIconPath, - }) { - return InkWell( - onTap: onTap, - child: SizedBox( - width: 64.0.w(), - height: 72.0.h(), - child: Padding( - padding: EdgeInsets.only(top: 12.0.h(), bottom: 14.0.h()), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - SvgPicture.asset(isActive ? activeIconPath : iconPath), - Text( - text, - style: TextStyle( - fontSize: 12.0.sp(), - fontWeight: FontWeight.w400, - color: isActive ? Color(0xFF0164FF) : Color(0xFF777777), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/views/shared/select_submission_bottom_sheet.dart b/lib/views/shared/select_submission_bottom_sheet.dart index 480cb42..89e30cf 100644 --- a/lib/views/shared/select_submission_bottom_sheet.dart +++ b/lib/views/shared/select_submission_bottom_sheet.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:tm_app/core/utils/size_config.dart'; +import '../../core/constants/common_strings.dart'; import '../../core/constants/tender_submision_mode.dart'; import '../../core/theme/colors.dart'; @@ -37,7 +38,7 @@ class _SelectSubmissionBottomSheetState child: Column( children: [ Text( - 'Select Submission', + CommonStrings.selectSubmission, style: TextStyle( fontSize: 20.0.sp(), fontWeight: FontWeight.w600, @@ -46,7 +47,7 @@ class _SelectSubmissionBottomSheetState ), SizedBox(height: 8.0.h()), _submissionType( - title: 'self-apply', + title: CommonStrings.selfApply, isSelected: type == TenderSubmissionMode.selfApply.value, onTap: () { selectedType = 0; @@ -56,7 +57,7 @@ class _SelectSubmissionBottomSheetState ), SizedBox(height: 8.0.h()), _submissionType( - title: 'Partnership', + title: CommonStrings.partnership, isSelected: type == TenderSubmissionMode.partnership.value, onTap: () { selectedType = 1; @@ -79,7 +80,7 @@ class _SelectSubmissionBottomSheetState ), alignment: Alignment.center, child: Text( - 'Confirm', + CommonStrings.confirm, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w500, diff --git a/lib/views/shared/select_submission_dialog.dart b/lib/views/shared/select_submission_dialog.dart index 14ce045..a15ce13 100644 --- a/lib/views/shared/select_submission_dialog.dart +++ b/lib/views/shared/select_submission_dialog.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:tm_app/core/utils/size_config.dart'; +import '../../core/constants/common_strings.dart'; import '../../core/constants/tender_submision_mode.dart'; import '../../core/theme/colors.dart'; @@ -34,7 +35,7 @@ class _SelectSubmissionDialogState extends State { child: Column( children: [ Text( - 'Select Submission', + CommonStrings.selectSubmission, style: TextStyle( fontSize: 20.0.sp(), fontWeight: FontWeight.w600, @@ -43,7 +44,7 @@ class _SelectSubmissionDialogState extends State { ), SizedBox(height: 8.0.h()), _submissionType( - title: 'Self-apply', + title: CommonStrings.selfApply, isSelected: type == TenderSubmissionMode.selfApply.value, onTap: () { selectedType = 0; @@ -53,7 +54,7 @@ class _SelectSubmissionDialogState extends State { ), SizedBox(height: 8.0.h()), _submissionType( - title: 'Partnership', + title: CommonStrings.partnership, isSelected: type == TenderSubmissionMode.partnership.value, onTap: () { selectedType = 1; @@ -78,7 +79,7 @@ class _SelectSubmissionDialogState extends State { ), alignment: Alignment.center, child: Text( - 'Confirm', + CommonStrings.confirm, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w500, diff --git a/lib/views/your_tenders/strings/your_tenders_strings.dart b/lib/views/your_tenders/strings/your_tenders_strings.dart index 2476151..4b1ecf0 100644 --- a/lib/views/your_tenders/strings/your_tenders_strings.dart +++ b/lib/views/your_tenders/strings/your_tenders_strings.dart @@ -15,4 +15,7 @@ class YourTendersStrings { static const approvedTenders = 'Approved tenders'; static const noTenders = 'No data available'; static const selectPublicationRangeDate = 'Select publication date range'; + 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 !'; } 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 40a7b5a..3ba3f28 100644 --- a/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart +++ b/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart @@ -4,8 +4,11 @@ import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_response.dart'; import 'package:tm_app/view_models/your_tenders_view_model.dart'; +import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart'; import 'package:tm_app/views/your_tenders/widgets/tender_card.dart'; +import '../../../core/constants/tender_feedback.dart'; + class LikedDislikedTendersList extends StatefulWidget { final LikedTendersResponse data; final String status; @@ -54,7 +57,9 @@ class _LikedDislikedTendersListState extends State { if (data.data?.feedback == null || data.data!.feedback!.isEmpty) { return Center( child: Text( - 'No ${widget.status} found', + widget.status == TenderFeedback.liked.value + ? YourTendersStrings.noLikedTenders + : YourTendersStrings.noDislikedTenders, style: TextStyle(fontSize: 16.0.sp(), color: AppColors.grey70), ), ); diff --git a/lib/views/your_tenders/widgets/tenders_submitted.dart b/lib/views/your_tenders/widgets/tenders_submitted.dart index 9f2cf39..bed6366 100644 --- a/lib/views/your_tenders/widgets/tenders_submitted.dart +++ b/lib/views/your_tenders/widgets/tenders_submitted.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/view_models/your_tenders_view_model.dart'; +import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart'; import 'package:tm_app/views/your_tenders/widgets/tender_card.dart'; import '../../../data/services/model/tender_approvals_response/tender_approvals_response.dart'; @@ -55,12 +56,16 @@ class _TendersSubmittedState extends State { return Consumer( builder: (context, viewModel, child) { if (widget.approvedTenders.data == null) { - return const Center(child: Text('No submitted projects yet.')); + return const Center( + child: Text(YourTendersStrings.noTendersSubmitted), + ); } final tenders = widget.approvedTenders.data!.tenders ?? []; if (tenders.isEmpty) { - return const Center(child: Text('No submitted projects yet.')); + return const Center( + child: Text(YourTendersStrings.noTendersSubmitted), + ); } final itemCount = From f3d5c60c066cdadac4a5c3ddcab73fb3707ff0b1 Mon Sep 17 00:00:00 2001 From: amirrezaghabeli Date: Mon, 8 Sep 2025 15:15:04 +0330 Subject: [PATCH 5/5] fixes --- lib/views/your_tenders/pages/your_tenders_screen.dart | 2 +- lib/views/your_tenders/widgets/tenders_submitted.dart | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/lib/views/your_tenders/pages/your_tenders_screen.dart b/lib/views/your_tenders/pages/your_tenders_screen.dart index ed92d30..a4b67e2 100644 --- a/lib/views/your_tenders/pages/your_tenders_screen.dart +++ b/lib/views/your_tenders/pages/your_tenders_screen.dart @@ -24,7 +24,7 @@ class _YourTendersScreenState extends State { viewModel = context.read(); WidgetsBinding.instance.addPostFrameCallback((_) { final requestModel = GetTendersRequestModel(); - viewModel.getTenders(requestModel: requestModel); + viewModel.getTenders(requestModel: requestModel, reset: true); }); } diff --git a/lib/views/your_tenders/widgets/tenders_submitted.dart b/lib/views/your_tenders/widgets/tenders_submitted.dart index bed6366..9f2cf39 100644 --- a/lib/views/your_tenders/widgets/tenders_submitted.dart +++ b/lib/views/your_tenders/widgets/tenders_submitted.dart @@ -3,7 +3,6 @@ import 'package:provider/provider.dart'; import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/view_models/your_tenders_view_model.dart'; -import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart'; import 'package:tm_app/views/your_tenders/widgets/tender_card.dart'; import '../../../data/services/model/tender_approvals_response/tender_approvals_response.dart'; @@ -56,16 +55,12 @@ class _TendersSubmittedState extends State { return Consumer( builder: (context, viewModel, child) { if (widget.approvedTenders.data == null) { - return const Center( - child: Text(YourTendersStrings.noTendersSubmitted), - ); + return const Center(child: Text('No submitted projects yet.')); } final tenders = widget.approvedTenders.data!.tenders ?? []; if (tenders.isEmpty) { - return const Center( - child: Text(YourTendersStrings.noTendersSubmitted), - ); + return const Center(child: Text('No submitted projects yet.')); } final itemCount =