diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index d5d4066..5981f10 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -686,30 +686,89 @@ extension BranchServiceEnumStatusToInt on ServiceStatusEnum { } } +// extension DateTimeConversions on DateTime { +// String getTimeAgo({bool numericDates = true, bool isArabic = false,}) { +// final date2 = DateTime.now(); +// final difference = date2.difference(this); +// if ((difference.inDays / 7).floor() >= 2) { +// return DateHelper.formatAsDayMonthYear(this, isArabic: isArabic,); +// } else if ((difference.inDays / 7).floor() >= 1) { +// return (numericDates) ? '1 week ago' : 'Last week'; +// } else if (difference.inDays >= 2) { +// return '${difference.inDays} days ago'; +// } else if (difference.inDays >= 1) { +// return (numericDates) ? '1 day ago' : 'Yesterday'; +// } else if (difference.inHours >= 2) { +// return '${difference.inHours} hours ago'; +// } else if (difference.inHours >= 1) { +// return (numericDates) ? '1 hour ago' : 'An hour ago'; +// } else if (difference.inMinutes >= 2) { +// return '${difference.inMinutes} min ago'; +// } else if (difference.inMinutes >= 1) { +// return (numericDates) ? '1 min ago' : 'A min ago'; +// } else if (difference.inSeconds >= 3) { +// return '${difference.inSeconds} sec ago'; +// } else { +// return 'Just now'; +// } +// } +// } + extension DateTimeConversions on DateTime { - String getTimeAgo({bool numericDates = true, bool isArabic = false,}) { - final date2 = DateTime.now(); - final difference = date2.difference(this); + String getTimeAgo({ + bool numericDates = true, + bool isArabic = false, + }) { + final now = DateTime.now(); + final difference = now.difference(this); + if ((difference.inDays / 7).floor() >= 2) { - return DateHelper.formatAsDayMonthYear(this, isArabic: isArabic,); + return DateHelper.formatAsDayMonthYear( + this, + isArabic: isArabic, + ); } else if ((difference.inDays / 7).floor() >= 1) { - return (numericDates) ? '1 week ago' : 'Last week'; + if (isArabic) { + return numericDates ? 'منذ أسبوع' : 'الأسبوع الماضي'; + } + + return numericDates ? '1 week ago' : 'Last week'; } else if (difference.inDays >= 2) { - return '${difference.inDays} days ago'; + return isArabic + ? 'منذ ${difference.inDays} أيام' + : '${difference.inDays} days ago'; } else if (difference.inDays >= 1) { - return (numericDates) ? '1 day ago' : 'Yesterday'; + if (isArabic) { + return numericDates ? 'منذ يوم' : 'أمس'; + } + + return numericDates ? '1 day ago' : 'Yesterday'; } else if (difference.inHours >= 2) { - return '${difference.inHours} hours ago'; + return isArabic + ? 'منذ ${difference.inHours} ساعات' + : '${difference.inHours} hours ago'; } else if (difference.inHours >= 1) { - return (numericDates) ? '1 hour ago' : 'An hour ago'; + if (isArabic) { + return numericDates ? 'منذ ساعة' : 'قبل ساعة'; + } + + return numericDates ? '1 hour ago' : 'An hour ago'; } else if (difference.inMinutes >= 2) { - return '${difference.inMinutes} min ago'; + return isArabic + ? 'منذ ${difference.inMinutes} دقائق' + : '${difference.inMinutes} min ago'; } else if (difference.inMinutes >= 1) { - return (numericDates) ? '1 min ago' : 'A min ago'; + if (isArabic) { + return numericDates ? 'منذ دقيقة' : 'قبل دقيقة'; + } + + return numericDates ? '1 min ago' : 'A min ago'; } else if (difference.inSeconds >= 3) { - return '${difference.inSeconds} sec ago'; + return isArabic + ? 'منذ ${difference.inSeconds} ثوانٍ' + : '${difference.inSeconds} sec ago'; } else { - return 'Just now'; + return isArabic ? 'الآن' : 'Just now'; } } } diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 3f62126..4251fb8 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -441,6 +441,7 @@ class CodegenLoader extends AssetLoader{ "usedSparePart": "قطع غيار مستعملة", "hasYourCarHadAccident": "هل تعرضت سيارتك لأي حادث؟", "odometerReading": "قراءة عداد المسافات (كم)", + "canMileageIncrease": "هل يمكن زيادة المسافة المقطوعة عند الفحص؟", "currentlyInUse": "قيد الاستخدام حاليًا", "demand": "الطلب", "adDurationExpired": "انتهت مدة عرض الإعلان الخاص بك", @@ -1346,6 +1347,7 @@ static const Map _en_US = { "usedSparePart": "Used Spare Part", "hasYourCarHadAccident": "Has your car had any accident?", "odometerReading": "Odometer Reading (Km)", + "canMileageIncrease": "Can the mileage be increased when checking?", "currentlyInUse": "Currently in Use", "demand": "Demand", "adDurationExpired": "Your Ad Duration time is over", diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index eae7b40..7757fbb 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -406,6 +406,7 @@ abstract class LocaleKeys { static const usedSparePart = 'usedSparePart'; static const hasYourCarHadAccident = 'hasYourCarHadAccident'; static const odometerReading = 'odometerReading'; + static const canMileageIncrease = 'canMileageIncrease'; static const currentlyInUse = 'currentlyInUse'; static const demand = 'demand'; static const adDurationExpired = 'adDurationExpired'; diff --git a/lib/models/advertisment_models/ad_details_model.dart b/lib/models/advertisment_models/ad_details_model.dart index c63b3e0..fc0f612 100644 --- a/lib/models/advertisment_models/ad_details_model.dart +++ b/lib/models/advertisment_models/ad_details_model.dart @@ -175,6 +175,7 @@ class Vehicle { int? id; int? cityID; String? cityName; + String? cityNameN; double? demandAmount; bool? isActive; bool? isFinanceAvailable; @@ -197,6 +198,7 @@ class Vehicle { String? vehicleVIN; int? countryID; String? countryName; + String? countryNameN; String? currency; int? odometer; int? isInUsed; @@ -206,6 +208,7 @@ class Vehicle { {this.id, this.cityID, this.cityName, + this.cityNameN, this.demandAmount, this.isActive, this.isFinanceAvailable, @@ -228,6 +231,7 @@ class Vehicle { this.vehicleVIN, this.countryID, this.countryName, + this.countryNameN, this.currency, this.odometer, this.isInUsed, @@ -237,6 +241,7 @@ class Vehicle { id = json['id']; cityID = json['cityID']; cityName = json['cityName']; + cityNameN = json['cityNameN']; demandAmount = json['demandAmount']; isActive = json['isActive']; isFinanceAvailable = json['isFinanceAvailable']; @@ -269,6 +274,7 @@ class Vehicle { vehicleVIN = json['vehicleVIN']; countryID = json['countryID']; countryName = json['duration'] != null && json['duration']['country'] != null ? json['duration']['country']['label'] : null; + countryNameN = json['duration'] != null && json['duration']['country'] != null ? json['duration']['country']['label'] : null; currency = json['currency']; odometer = json['odometer']; isInUsed = json['isInUsed']; diff --git a/lib/models/provider_branches_models/branch_detail_model.dart b/lib/models/provider_branches_models/branch_detail_model.dart index ed745d9..fe91223 100644 --- a/lib/models/provider_branches_models/branch_detail_model.dart +++ b/lib/models/provider_branches_models/branch_detail_model.dart @@ -32,6 +32,7 @@ class BranchDetailModel { String? countryName; bool isExpanded = false; bool? isFavorite; + String? cityNameN; BranchDetailModel({ @@ -62,6 +63,7 @@ class BranchDetailModel { this.countryName, this.isFavorite, required this.isExpanded, + this.cityNameN, }); List populateBranchImages(value) { @@ -106,6 +108,7 @@ class BranchDetailModel { branchAuditTrial = json["branchAuditTrial"] == null ? [] : List.from(json["branchAuditTrial"]!.map((x) => BranchAuditTrial.fromJson(x))); isExpanded = false; isFavorite = false; + cityNameN = json["cityNameN"]; } } diff --git a/lib/models/requests_models/request_model.dart b/lib/models/requests_models/request_model.dart index 65f0745..9e3ccd9 100644 --- a/lib/models/requests_models/request_model.dart +++ b/lib/models/requests_models/request_model.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart'; import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; @@ -12,8 +14,11 @@ class RequestModel { ShippingRequestStatusEnum? shippingStatusEnum; SelfPickupRequestStatusEnum? selfPickupRequestStatusEnum; String cityName; + String cityNameN; String vehicleTypeName; + String vehicleTypeNameN; String countryName; + String countryNameN; String customerName; String customerID; String address; @@ -47,6 +52,7 @@ class RequestModel { int? modifiedBy; String? modifiedOn; List chatMessages; + String? requestStatusNameN; RequestModel({ required this.requestType, @@ -57,8 +63,11 @@ class RequestModel { required this.shippingStatusEnum, required this.selfPickupRequestStatusEnum, required this.cityName, + required this.cityNameN, required this.vehicleTypeName, + required this.vehicleTypeNameN, required this.countryName, + required this.countryNameN, required this.customerName, required this.customerID, required this.serviceProviders, @@ -92,6 +101,7 @@ class RequestModel { required this.modifiedBy, required this.modifiedOn, required this.chatMessages, + required this.requestStatusNameN, }); List populateRequestImages(value) { @@ -114,8 +124,11 @@ class RequestModel { shippingStatusEnum: json['shippingRequestStatus'] != null ? (json['shippingRequestStatus'] as int).toShippingStatusEnum() : ShippingRequestStatusEnum.pending, selfPickupRequestStatusEnum: json['selfPickupRequestStatus'] != null ? (json['selfPickupRequestStatus'] as int).toSelfPickupStatusEnum() : SelfPickupRequestStatusEnum.preparingToCollect, cityName: json["cityName"], + cityNameN: json["cityNameN"], vehicleTypeName: json["vehicleTypeName"], + vehicleTypeNameN: json["vehicleTypeNameN"], countryName: json["countryName"], + countryNameN: json["countryNameN"], customerName: json["customerName"] ?? "", address: json["address"] ?? "", additionalAddressDetails: json['additionalAddress'] ?? "", @@ -148,6 +161,7 @@ class RequestModel { createdOn: json["createdOn"], modifiedBy: json["modifiedBy"], modifiedOn: json["modifiedOn"], + requestStatusNameN: json["requestStatusNameN"], chatMessages: [], ); } diff --git a/lib/view_models/requests_view_model.dart b/lib/view_models/requests_view_model.dart index a1639d2..c373bac 100644 --- a/lib/view_models/requests_view_model.dart +++ b/lib/view_models/requests_view_model.dart @@ -216,7 +216,7 @@ class RequestsVM extends BaseVM { if (acceptedRequestsTypeFilterOptions.isEmpty) { for (int i = 0; i < myRequestsTypeEnum.length; i++) { - acceptedRequestsTypeFilterOptions.add(FilterListModel(title: myRequestsTypeEnum[i].enumValueStr, isSelected: false, id: myRequestsTypeEnum[i].enumValue)); + acceptedRequestsTypeFilterOptions.add(FilterListModel(title: myRequestsTypeEnum[i].enumValueStr, titleN: myRequestsTypeEnum[i].enumValueStrN, isSelected: false, id: myRequestsTypeEnum[i].enumValue)); } acceptedRequestsTypeFilterOptions[0].isSelected = true; } @@ -383,16 +383,16 @@ class RequestsVM extends BaseVM { if (requestsTypeFilterOptions.isEmpty || acceptedRequestsTypeFilterOptions.isEmpty) { for (int i = 0; i < myRequestsTypeEnum.length; i++) { - requestsTypeFilterOptions.add(FilterListModel(title: myRequestsTypeEnum[i].enumValueStr, isSelected: false, id: myRequestsTypeEnum[i].enumValue)); - acceptedRequestsTypeFilterOptions.add(FilterListModel(title: myRequestsTypeEnum[i].enumValueStr, isSelected: false, id: myRequestsTypeEnum[i].enumValue)); + requestsTypeFilterOptions.add(FilterListModel(title: myRequestsTypeEnum[i].enumValueStr,titleN: myRequestsTypeEnum[i].enumValueStrN, isSelected: false, id: myRequestsTypeEnum[i].enumValue)); + acceptedRequestsTypeFilterOptions.add(FilterListModel(title: myRequestsTypeEnum[i].enumValueStr, titleN: myRequestsTypeEnum[i].enumValueStrN, isSelected: false, id: myRequestsTypeEnum[i].enumValue)); } } // Initialize spare parts condition filters (All, New, Used) if (sparePartsConditionFilterOptions.isEmpty) { - sparePartsConditionFilterOptions.add(FilterListModel(title: "All", isSelected: true, id: 3)); // All - sparePartsConditionFilterOptions.add(FilterListModel(title: "New Spare Part", isSelected: false, id: 1)); // New - sparePartsConditionFilterOptions.add(FilterListModel(title: "Used Spare Part", isSelected: false, id: 2)); // Used + sparePartsConditionFilterOptions.add(FilterListModel(title: "All", titleN: "الكل", isSelected: true, id: 3)); // All + sparePartsConditionFilterOptions.add(FilterListModel(title: "New Spare Part", titleN: "قطعة غيار جديدة", isSelected: false, id: 1)); // New + sparePartsConditionFilterOptions.add(FilterListModel(title: "Used Spare Part",titleN: "قطعة غيار مستعملة", isSelected: false, id: 2)); // Used } if (vehicleBrands.isEmpty) { diff --git a/lib/views/advertisement/ad_creation_steps/vehicle_details_container.dart b/lib/views/advertisement/ad_creation_steps/vehicle_details_container.dart index 7461c5b..9bcd44e 100644 --- a/lib/views/advertisement/ad_creation_steps/vehicle_details_container.dart +++ b/lib/views/advertisement/ad_creation_steps/vehicle_details_container.dart @@ -25,6 +25,7 @@ class VehicleDetails extends StatelessWidget { @override Widget build(BuildContext context) { + bool isArabic = AppState().isArabic(context); return Consumer(builder: (BuildContext context, AdVM adVM, Widget? child) { String roleAppState = ""; String roleName = ""; @@ -56,7 +57,7 @@ class VehicleDetails extends StatelessWidget { builder: (context) { List vehicleBrandsDrop = []; for (var element in adVM.vehicleBrands) { - vehicleBrandsDrop.add(DropValue(element.id?.toInt() ?? 0, element.vehicleBrandDescription ?? "", "")); + vehicleBrandsDrop.add(DropValue(element.id?.toInt() ?? 0, isArabic ? element.vehicleBrandDescriptionN ?? "" : element.vehicleBrandDescription ?? "", "")); } return DropdownField( (DropValue value) => adVM.updateSelectionVehicleBrandId(SelectionModel(selectedId: value.id, selectedOption: value.value)), @@ -106,12 +107,16 @@ class VehicleDetails extends StatelessWidget { Builder(builder: (context) { List vehicleModelsDrop = []; for (var element in adVM.vehicleModels) { - vehicleModelsDrop.add(DropValue(element.id?.toInt() ?? 0, element.model ?? "", "")); + // vehicleModelsDrop.add(DropValue(element.id?.toInt() ?? 0, element.model ?? "", "")); + vehicleModelsDrop.add(DropValue(element.id?.toInt() ?? 0, isArabic ? (element.modelN ?? element.model ?? ""): (element.model ?? ""), "", + ), + ); } return DropdownField( (DropValue value) => adVM.updateSelectionVehicleModelId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleModelsDrop, - dropdownValue: adVM.vehicleModelId.selectedId != -1 ? DropValue(adVM.vehicleModelId.selectedId, adVM.vehicleModelId.selectedOption, "") : null, + // dropdownValue: adVM.vehicleModelId.selectedId != -1 ? DropValue(adVM.vehicleModelId.selectedId, adVM.vehicleModelId.selectedOption, "") : null, + dropdownValue: adVM.vehicleModelId.selectedId != -1 ? vehicleModelsDrop.firstWhere((item) => item.id == adVM.vehicleModelId.selectedId,) : null, hint: LocaleKeys.vehicleModel.tr(), errorValue: adVM.vehicleModelId.errorValue, ); @@ -135,13 +140,17 @@ class VehicleDetails extends StatelessWidget { Builder(builder: (context) { List vehicleColorsDrop = []; for (var element in adVM.vehicleColors) { - vehicleColorsDrop.add(DropValue(element.id?.toInt() ?? 0, element.color ?? "", "")); + // vehicleColorsDrop.add(DropValue(element.id?.toInt() ?? 0, element.color ?? "", "")); + vehicleColorsDrop.add(DropValue(element.id?.toInt() ?? 0, isArabic ? (element.colorN ?? element.color ?? ""): (element.color ?? ""), "", + ), + ); } return DropdownField( (DropValue value) => adVM.updateSelectionVehicleColorId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleColorsDrop, hint: LocaleKeys.vehicleColor.tr(), - dropdownValue: adVM.vehicleColorId.selectedId != -1 ? DropValue(adVM.vehicleColorId.selectedId, adVM.vehicleColorId.selectedOption, "") : null, + // dropdownValue: adVM.vehicleColorId.selectedId != -1 ? DropValue(adVM.vehicleColorId.selectedId, adVM.vehicleColorId.selectedOption, "") : null, + dropdownValue: adVM.vehicleColorId.selectedId != -1 ? vehicleColorsDrop.firstWhere((item) => item.id == adVM.vehicleColorId.selectedId,) : null, errorValue: adVM.vehicleColorId.errorValue, ); }), @@ -149,12 +158,14 @@ class VehicleDetails extends StatelessWidget { Builder(builder: (context) { List vehicleConditionsDrop = []; for (var element in adVM.vehicleConditions) { - vehicleConditionsDrop.add(DropValue(element.id?.toInt() ?? 0, element.condition ?? "", "")); + vehicleConditionsDrop.add(DropValue(element.id?.toInt() ?? 0, isArabic ? (element.conditionN ?? element.condition ?? ""): (element.condition ?? ""), "")); + // vehicleConditionsDrop.add(DropValue(element.id?.toInt() ?? 0, element.condition ?? "", "")); } return DropdownField( (DropValue value) => adVM.updateSelectionVehicleConditionId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleConditionsDrop, - dropdownValue: adVM.vehicleConditionId.selectedId != -1 ? DropValue(adVM.vehicleConditionId.selectedId, adVM.vehicleConditionId.selectedOption, "") : null, + dropdownValue: adVM.vehicleConditionId.selectedId != -1 ? vehicleConditionsDrop.firstWhere((item) => item.id == adVM.vehicleConditionId.selectedId,) : null, + // dropdownValue: adVM.vehicleConditionId.selectedId != -1 ? DropValue(adVM.vehicleConditionId.selectedId, adVM.vehicleConditionId.selectedOption, "") : null, hint: LocaleKeys.vehicleCondition.tr(), errorValue: adVM.vehicleConditionId.errorValue, ); @@ -163,13 +174,15 @@ class VehicleDetails extends StatelessWidget { Builder(builder: (context) { List vehicleCategoriesDrop = []; for (var element in adVM.vehicleCategories) { - vehicleCategoriesDrop.add(DropValue(element.id?.toInt() ?? 0, element.category ?? "", "")); + vehicleCategoriesDrop.add(DropValue(element.id?.toInt() ?? 0, isArabic ? (element.categoryN ?? element.category ?? ""): (element.category ?? ""), "")); + // vehicleCategoriesDrop.add(DropValue(element.id?.toInt() ?? 0, element.category ?? "", "")); } return DropdownField( (DropValue value) => adVM.updateSelectionVehicleCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleCategoriesDrop, hint: LocaleKeys.vehicleCategory.tr(), - dropdownValue: adVM.vehicleCategoryId.selectedId != -1 ? DropValue(adVM.vehicleCategoryId.selectedId, adVM.vehicleCategoryId.selectedOption, "") : null, + dropdownValue: adVM.vehicleCategoryId.selectedId != -1 ? vehicleCategoriesDrop.firstWhere((item) => item.id == adVM.vehicleCategoryId.selectedId,) : null, + // dropdownValue: adVM.vehicleCategoryId.selectedId != -1 ? DropValue(adVM.vehicleCategoryId.selectedId, adVM.vehicleCategoryId.selectedOption, "") : null, errorValue: adVM.vehicleCategoryId.errorValue, ); }), @@ -191,13 +204,15 @@ class VehicleDetails extends StatelessWidget { Builder(builder: (context) { List vehicleTransmissionsDrop = []; for (var element in adVM.vehicleTransmissions) { - vehicleTransmissionsDrop.add(DropValue(element.id?.toInt() ?? 0, element.transmission ?? "", "")); + vehicleTransmissionsDrop.add(DropValue(element.id?.toInt() ?? 0, isArabic ? (element.transmissionN ?? element.transmission ?? ""): (element.transmission ?? ""), "")); + // vehicleTransmissionsDrop.add(DropValue(element.id?.toInt() ?? 0, element.transmission ?? "", "")); } return DropdownField( (DropValue value) => adVM.updateSelectionVehicleTransmissionId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleTransmissionsDrop, hint: LocaleKeys.vehicleTransmission.tr(), - dropdownValue: adVM.vehicleTransmissionId.selectedId != -1 ? DropValue(adVM.vehicleTransmissionId.selectedId, adVM.vehicleTransmissionId.selectedOption, "") : null, + dropdownValue: adVM.vehicleTransmissionId.selectedId != -1 ? vehicleTransmissionsDrop.firstWhere((item) => item.id == adVM.vehicleTransmissionId.selectedId,) : null, + //dropdownValue: adVM.vehicleTransmissionId.selectedId != -1 ? DropValue(adVM.vehicleTransmissionId.selectedId, adVM.vehicleTransmissionId.selectedOption, "") : null, errorValue: adVM.vehicleTransmissionId.errorValue, ); }), @@ -206,12 +221,14 @@ class VehicleDetails extends StatelessWidget { Builder(builder: (context) { List vehicleCountriesDrop = []; for (var element in adVM.vehicleCountries) { - vehicleCountriesDrop.add(DropValue(element.id?.toInt() ?? 0, element.countryName ?? "", "")); + vehicleCountriesDrop.add(DropValue(element.id?.toInt() ?? 0, isArabic ? (element.countryNameN ?? element.countryName ?? ""): (element.countryName ?? ""), "")); + // vehicleCountriesDrop.add(DropValue(element.id?.toInt() ?? 0, element.countryName ?? "", "")); } return DropdownField( (DropValue value) => adVM.updateSelectionVehicleCountryId(SelectionModel(selectedOption: value.value, selectedId: value.id)), list: vehicleCountriesDrop, - dropdownValue: adVM.vehicleCountryId.selectedId != -1 ? DropValue(adVM.vehicleCountryId.selectedId, adVM.vehicleCountryId.selectedOption, "") : null, + dropdownValue: adVM.vehicleCountryId.selectedId != -1 ? vehicleCountriesDrop.firstWhere((item) => item.id == adVM.vehicleCountryId.selectedId,) : null, + // dropdownValue: adVM.vehicleCountryId.selectedId != -1 ? DropValue(adVM.vehicleCountryId.selectedId, adVM.vehicleCountryId.selectedOption, "") : null, hint: LocaleKeys.vehicleCountry.tr(), errorValue: adVM.vehicleCountryId.errorValue, ); @@ -227,12 +244,14 @@ class VehicleDetails extends StatelessWidget { Builder(builder: (context) { List vehicleCitiesDrop = []; for (var element in adVM.vehicleCities) { - vehicleCitiesDrop.add(DropValue(element.id?.toInt() ?? 0, element.cityName ?? "", "")); + vehicleCitiesDrop.add(DropValue(element.id?.toInt() ?? 0, isArabic ? (element.cityNameN ?? element.cityName ?? ""): (element.cityName ?? ""), "")); + // vehicleCitiesDrop.add(DropValue(element.id?.toInt() ?? 0, element.cityName ?? "", "")); } return DropdownField( (DropValue value) => adVM.updateSelectionVehicleCityId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleCitiesDrop, - dropdownValue: adVM.vehicleCityId.selectedId != -1 ? DropValue(adVM.vehicleCityId.selectedId, adVM.vehicleCityId.selectedOption, "") : null, + dropdownValue: adVM.vehicleCityId.selectedId != -1 ? vehicleCitiesDrop.firstWhere((item) => item.id == adVM.vehicleCityId.selectedId,) : null, + // dropdownValue: adVM.vehicleCityId.selectedId != -1 ? DropValue(adVM.vehicleCityId.selectedId, adVM.vehicleCityId.selectedOption, "") : null, hint: LocaleKeys.vehicleCity.tr(), errorValue: adVM.vehicleCityId.errorValue, ); diff --git a/lib/views/advertisement/ads_detail_view/ads_detail_view.dart b/lib/views/advertisement/ads_detail_view/ads_detail_view.dart index c7039e4..08f9860 100644 --- a/lib/views/advertisement/ads_detail_view/ads_detail_view.dart +++ b/lib/views/advertisement/ads_detail_view/ads_detail_view.dart @@ -117,7 +117,7 @@ class _AdsDetailViewState extends State { child: "${widget.adDetails.vehicle!.vehicleTitle} | ${isArabic ? widget.adDetails.vehicle!.color!.labelN : widget.adDetails.vehicle!.color!.label}|" " ${widget.adDetails.id}".toText(fontSize: 16, maxLines: 2), ), - (widget.adDetails.vehicle!.cityName ?? "").toText(fontSize: 10, color: MyColors.lightTextColor), + (isArabic ? widget.adDetails.vehicle!.cityNameN ?? "" : widget.adDetails.vehicle!.cityName ?? "").toText(fontSize: 10, color: MyColors.lightTextColor), ], ), Row( @@ -129,7 +129,7 @@ class _AdsDetailViewState extends State { "${isArabic? widget.adDetails.vehicle!.model!.labelN :widget.adDetails.vehicle!.model!.label}".toText(fontSize: 12), ], ), - (widget.adDetails.vehicle!.countryName ?? '').toText(fontSize: 10, color: MyColors.lightTextColor), + (isArabic ? widget.adDetails.vehicle!.countryNameN?? '' : widget.adDetails.vehicle!.countryName?? '').toText(fontSize: 10, color: MyColors.lightTextColor), ], ), Row( diff --git a/lib/views/advertisement/components/ads_list_widget.dart b/lib/views/advertisement/components/ads_list_widget.dart index 7b4ffc1..54eecab 100644 --- a/lib/views/advertisement/components/ads_list_widget.dart +++ b/lib/views/advertisement/components/ads_list_widget.dart @@ -349,8 +349,16 @@ class _AdCardState extends State { crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.start, children: [ - (widget.adDetails.vehicle!.cityName ?? "").toText(color: MyColors.lightTextColor), - widget.adDetails.createdOn != null ? DateTime.parse(widget.adDetails.createdOn!).getTimeAgo().toText(color: MyColors.lightTextColor) : const SizedBox(), + (isArabic? widget.adDetails.vehicle!.cityNameN ?? "" : widget.adDetails.vehicle!.cityName ?? "").toText(color: MyColors.lightTextColor), + // widget.adDetails.createdOn != null ? DateTime.parse(widget.adDetails.createdOn!).getTimeAgo().toText(color: MyColors.lightTextColor) : const SizedBox(), + widget.adDetails.createdOn != null + ? DateFormat( + 'd MMM, y', + isArabic ? 'ar' : 'en', + ) + .format(DateTime.parse(widget.adDetails.createdOn!)) + .toText(color: MyColors.lightTextColor) + : const SizedBox(), ], ), ], diff --git a/lib/views/advertisement/create_ad_view.dart b/lib/views/advertisement/create_ad_view.dart index f06e88a..38e3168 100644 --- a/lib/views/advertisement/create_ad_view.dart +++ b/lib/views/advertisement/create_ad_view.dart @@ -73,6 +73,7 @@ class BuildFooterButton extends StatelessWidget { @override Widget build(BuildContext context) { + final isArabic = AppState().isArabic(context); return Consumer( builder: (BuildContext context, AdVM adVm, Widget? child) { switch (adVm.currentProgressStep) { @@ -83,7 +84,8 @@ class BuildFooterButton extends StatelessWidget { child: ShowFillButton( txtColor: MyColors.black, maxHeight: 55, - title: "Save As Draft", + // title: "Save As Draft", + title: isArabic ? "حفظ كمسودة" : "Save As Draft", onPressed: () async { await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.vehicleDetails, bypassValidation: true); adVm.isDraftEditEnabled = false; @@ -118,7 +120,8 @@ class BuildFooterButton extends StatelessWidget { child: ShowFillButton( txtColor: MyColors.black, maxHeight: 55, - title: "Save As Draft", + // title: "Save As Draft", + title: isArabic ? "حفظ كمسودة" : "Save As Draft", onPressed: () async { await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.damageParts, bypassValidation: true); adVm.isDraftEditEnabled = false; @@ -153,7 +156,8 @@ class BuildFooterButton extends StatelessWidget { child: ShowFillButton( txtColor: MyColors.black, maxHeight: 55, - title: "Save As Draft", + // title: "Save As Draft", + title: isArabic ? "حفظ كمسودة" : "Save As Draft", onPressed: () async { await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.adDuration, bypassValidation: true); adVm.isDraftEditEnabled = false; @@ -188,7 +192,8 @@ class BuildFooterButton extends StatelessWidget { child: ShowFillButton( txtColor: MyColors.black, maxHeight: 55, - title: "Save As Draft", + //title: "Save As Draft", + title: isArabic ? "حفظ كمسودة" : "Save As Draft", onPressed: () async { await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.reviewAd, bypassValidation: true); adVm.isDraftEditEnabled = false; diff --git a/lib/views/requests/request_detail_page.dart b/lib/views/requests/request_detail_page.dart index 5efe370..78671be 100644 --- a/lib/views/requests/request_detail_page.dart +++ b/lib/views/requests/request_detail_page.dart @@ -29,6 +29,7 @@ class RequestDetailPage extends StatelessWidget { const RequestDetailPage({super.key, required this.requestDetailPageArguments}); Widget buildRequestDetailsContainer(BuildContext context) { + bool isArabic = AppState().isArabic(context); final requestDetail = requestDetailPageArguments.requestModel; return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -42,7 +43,7 @@ class RequestDetailPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - requestDetail.vehicleTypeName.toText(fontSize: 16, letterSpacing: -0.64), + isArabic ? requestDetail.vehicleTypeNameN.toText(fontSize: 16, letterSpacing: -0.64) : requestDetail.vehicleTypeName.toText(fontSize: 16, letterSpacing: -0.64), showItem("${LocaleKeys.brand.tr()}: ", requestDetail.brand), showItem("${LocaleKeys.model.tr()}: ", requestDetail.model), showItem("${LocaleKeys.year.tr()}: ", "${requestDetail.year}"), @@ -53,13 +54,21 @@ class RequestDetailPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.start, children: [ - "${requestDetail.city ?? ""} ${requestDetail.countryName}".toText( + "${isArabic ? requestDetail.cityNameN : requestDetail.city} " + "${isArabic ? requestDetail.countryNameN : requestDetail.countryName}" + .toText( color: MyColors.lightTextColor, ), + // "${requestDetail.city ?? ""} ${requestDetail.countryName}".toText( + // color: MyColors.lightTextColor, + // ), if (requestDetail.createdOn != null) ...[ - DateTime.parse(requestDetail.createdOn!).getTimeAgo().toText( - color: MyColors.lightTextColor, - ), + // DateTime.parse(requestDetail.createdOn!).getTimeAgo().toText( + // color: MyColors.lightTextColor, + // ), + DateTime.parse(requestDetail.createdOn!).getTimeAgo(isArabic: isArabic) + .toText(color: MyColors.lightTextColor, + ), ], ], ), diff --git a/lib/views/requests/widget/request_item.dart b/lib/views/requests/widget/request_item.dart index e3f15e1..138b246 100644 --- a/lib/views/requests/widget/request_item.dart +++ b/lib/views/requests/widget/request_item.dart @@ -21,6 +21,7 @@ class RequestItem extends StatelessWidget { @override Widget build(BuildContext context) { + final isArabic = AppState().isArabic(context); String imageUrl = ""; if (request.requestImages != null && request.requestImages!.isNotEmpty) { imageUrl = request.requestImages!.first.imageUrl ?? ""; @@ -42,9 +43,20 @@ class RequestItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ if (shouldShowStatuses) ...[ + // Utils.statusContainerChip( + // text: request.requestStatusName.toLowerCase() == "InProgress".toLowerCase() ? "In Progress" : request.requestStatusName, + // chipColor: Utils.getChipColorByRequestStatus(request.requestStatus)), Utils.statusContainerChip( - text: request.requestStatusName.toLowerCase() == "InProgress".toLowerCase() ? "In Progress" : request.requestStatusName, - chipColor: Utils.getChipColorByRequestStatus(request.requestStatus)), + text: isArabic + ? (request.requestStatusNameN?.isNotEmpty == true + ? request.requestStatusNameN! + : request.requestStatusName) + : (request.requestStatusName.toLowerCase() == "inprogress" + ? "In Progress" + : request.requestStatusName), + chipColor: + Utils.getChipColorByRequestStatus(request.requestStatus), + ), ], 6.height, "${request.brand} ${request.model} | ${request.id}".toText(fontSize: 16, letterSpacing: -0.64), @@ -61,7 +73,7 @@ class RequestItem extends StatelessWidget { showItem("${LocaleKeys.year.tr()}:", "${request.year}"), ], if (request.vehicleTypeName.isNotEmpty) ...[ - showItem("${LocaleKeys.vehicleType.tr()}:", request.vehicleTypeName), + showItem("${LocaleKeys.vehicleType.tr()}:", isArabic ? request.vehicleTypeNameN :request.vehicleTypeName), ], showItem("${LocaleKeys.description.tr()}:", request.description), ], @@ -86,9 +98,21 @@ class RequestItem extends StatelessWidget { ), ], 2.height, - request.cityName.toText(color: MyColors.lightTextColor, letterSpacing: -0.4, fontSize: 10), + // request.cityName.toText(color: MyColors.lightTextColor, letterSpacing: -0.4, fontSize: 10), + // if (request.createdOn != null) ...[ + // DateTime.parse(request.createdOn!).getTimeAgo().toText(color: MyColors.lightTextColor, letterSpacing: -0.4, fontSize: 10), + // ], + (isArabic + ? (request.cityNameN?.isNotEmpty == true ? request.cityNameN! : request.cityName) : request.cityName).toText(color: MyColors.lightTextColor, + letterSpacing: -0.4, + fontSize: 10, + ), if (request.createdOn != null) ...[ - DateTime.parse(request.createdOn!).getTimeAgo().toText(color: MyColors.lightTextColor, letterSpacing: -0.4, fontSize: 10), + DateTime.parse(request.createdOn!).getTimeAgo(isArabic: isArabic).toText( + color: MyColors.lightTextColor, + letterSpacing: -0.4, + fontSize: 10, + ), ], ], ) diff --git a/lib/views/setting_options/widgets/custom_setting_options_tile.dart b/lib/views/setting_options/widgets/custom_setting_options_tile.dart index 1d6cef1..417b78b 100644 --- a/lib/views/setting_options/widgets/custom_setting_options_tile.dart +++ b/lib/views/setting_options/widgets/custom_setting_options_tile.dart @@ -7,6 +7,8 @@ import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import '../../../classes/app_state.dart'; + class CustomSettingOptionsTile extends StatelessWidget { final Widget leadingWidget; final String titleText; @@ -31,6 +33,7 @@ class CustomSettingOptionsTile extends StatelessWidget { @override Widget build(BuildContext context) { + final isArabic = AppState().isArabic(context); return Column( children: [ Row( @@ -56,10 +59,20 @@ class CustomSettingOptionsTile extends StatelessWidget { ], ), isForLanguage - ? LocaleKeys.english.tr().toText(fontSize: 12, isUnderLine: true, color: MyColors.primaryColor) + ? (isArabic ? "English": "عربي") + .toText( + fontSize: 12, + isUnderLine: true, + color: MyColors.primaryColor, + ) : showTrailingArrow - ? const Icon(Icons.arrow_forward, size: 18) - : const SizedBox() + ? const Icon(Icons.arrow_forward, size: 18) + : const SizedBox(), + // isForLanguage + // ? LocaleKeys.english.tr().toText(fontSize: 12, isUnderLine: true, color: MyColors.primaryColor) + // : showTrailingArrow + // ? const Icon(Icons.arrow_forward, size: 18) + // : const SizedBox() ], ).onPress(onTap), subTitle != null ? 3.height : 5.height, diff --git a/lib/widgets/common_widgets/filters_list.dart b/lib/widgets/common_widgets/filters_list.dart index e9bd1e0..6eb0ac9 100644 --- a/lib/widgets/common_widgets/filters_list.dart +++ b/lib/widgets/common_widgets/filters_list.dart @@ -69,15 +69,21 @@ class FiltersList extends StatelessWidget { ], // Text displayed in the chip (isArabic - ? (filterList[index].titleN ?? filterList[index].title) - : filterList[index].title) - .tr() - .toText( - // filterList[index].title.tr().toText( - fontSize: 13, - letterSpacing: -0.14, - color: filterList[index].isSelected ? MyColors.white : null, - ), + ? (filterList[index].titleN.isNotEmpty ? filterList[index].titleN : filterList[index].title) : filterList[index].title).toText( + fontSize: 13, + letterSpacing: -0.14, + color: filterList[index].isSelected ? MyColors.white : null, + ) + // (isArabic + // ? (filterList[index].titleN ?? filterList[index].title) + // : filterList[index].title) + // .tr() + // .toText( + // // filterList[index].title.tr().toText( + // fontSize: 13, + // letterSpacing: -0.14, + // color: filterList[index].isSelected ? MyColors.white : null, + // ), ], ), ),