fatima_dev
Rand Alshammari 2 weeks ago
parent 3ceb98c045
commit f76b204c2d

@ -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 { extension DateTimeConversions on DateTime {
String getTimeAgo({bool numericDates = true, bool isArabic = false,}) { String getTimeAgo({
final date2 = DateTime.now(); bool numericDates = true,
final difference = date2.difference(this); bool isArabic = false,
}) {
final now = DateTime.now();
final difference = now.difference(this);
if ((difference.inDays / 7).floor() >= 2) { 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) { } 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) { } else if (difference.inDays >= 2) {
return '${difference.inDays} days ago'; return isArabic
? 'منذ ${difference.inDays} أيام'
: '${difference.inDays} days ago';
} else if (difference.inDays >= 1) { } 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) { } else if (difference.inHours >= 2) {
return '${difference.inHours} hours ago'; return isArabic
? 'منذ ${difference.inHours} ساعات'
: '${difference.inHours} hours ago';
} else if (difference.inHours >= 1) { } 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) { } else if (difference.inMinutes >= 2) {
return '${difference.inMinutes} min ago'; return isArabic
? 'منذ ${difference.inMinutes} دقائق'
: '${difference.inMinutes} min ago';
} else if (difference.inMinutes >= 1) { } 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) { } else if (difference.inSeconds >= 3) {
return '${difference.inSeconds} sec ago'; return isArabic
? 'منذ ${difference.inSeconds} ثوانٍ'
: '${difference.inSeconds} sec ago';
} else { } else {
return 'Just now'; return isArabic ? 'الآن' : 'Just now';
} }
} }
} }

@ -441,6 +441,7 @@ class CodegenLoader extends AssetLoader{
"usedSparePart": "قطع غيار مستعملة", "usedSparePart": "قطع غيار مستعملة",
"hasYourCarHadAccident": "هل تعرضت سيارتك لأي حادث؟", "hasYourCarHadAccident": "هل تعرضت سيارتك لأي حادث؟",
"odometerReading": "قراءة عداد المسافات (كم)", "odometerReading": "قراءة عداد المسافات (كم)",
"canMileageIncrease": "هل يمكن زيادة المسافة المقطوعة عند الفحص؟",
"currentlyInUse": "قيد الاستخدام حاليًا", "currentlyInUse": "قيد الاستخدام حاليًا",
"demand": "الطلب", "demand": "الطلب",
"adDurationExpired": "انتهت مدة عرض الإعلان الخاص بك", "adDurationExpired": "انتهت مدة عرض الإعلان الخاص بك",
@ -1346,6 +1347,7 @@ static const Map<String,dynamic> _en_US = {
"usedSparePart": "Used Spare Part", "usedSparePart": "Used Spare Part",
"hasYourCarHadAccident": "Has your car had any accident?", "hasYourCarHadAccident": "Has your car had any accident?",
"odometerReading": "Odometer Reading (Km)", "odometerReading": "Odometer Reading (Km)",
"canMileageIncrease": "Can the mileage be increased when checking?",
"currentlyInUse": "Currently in Use", "currentlyInUse": "Currently in Use",
"demand": "Demand", "demand": "Demand",
"adDurationExpired": "Your Ad Duration time is over", "adDurationExpired": "Your Ad Duration time is over",

@ -406,6 +406,7 @@ abstract class LocaleKeys {
static const usedSparePart = 'usedSparePart'; static const usedSparePart = 'usedSparePart';
static const hasYourCarHadAccident = 'hasYourCarHadAccident'; static const hasYourCarHadAccident = 'hasYourCarHadAccident';
static const odometerReading = 'odometerReading'; static const odometerReading = 'odometerReading';
static const canMileageIncrease = 'canMileageIncrease';
static const currentlyInUse = 'currentlyInUse'; static const currentlyInUse = 'currentlyInUse';
static const demand = 'demand'; static const demand = 'demand';
static const adDurationExpired = 'adDurationExpired'; static const adDurationExpired = 'adDurationExpired';

@ -175,6 +175,7 @@ class Vehicle {
int? id; int? id;
int? cityID; int? cityID;
String? cityName; String? cityName;
String? cityNameN;
double? demandAmount; double? demandAmount;
bool? isActive; bool? isActive;
bool? isFinanceAvailable; bool? isFinanceAvailable;
@ -197,6 +198,7 @@ class Vehicle {
String? vehicleVIN; String? vehicleVIN;
int? countryID; int? countryID;
String? countryName; String? countryName;
String? countryNameN;
String? currency; String? currency;
int? odometer; int? odometer;
int? isInUsed; int? isInUsed;
@ -206,6 +208,7 @@ class Vehicle {
{this.id, {this.id,
this.cityID, this.cityID,
this.cityName, this.cityName,
this.cityNameN,
this.demandAmount, this.demandAmount,
this.isActive, this.isActive,
this.isFinanceAvailable, this.isFinanceAvailable,
@ -228,6 +231,7 @@ class Vehicle {
this.vehicleVIN, this.vehicleVIN,
this.countryID, this.countryID,
this.countryName, this.countryName,
this.countryNameN,
this.currency, this.currency,
this.odometer, this.odometer,
this.isInUsed, this.isInUsed,
@ -237,6 +241,7 @@ class Vehicle {
id = json['id']; id = json['id'];
cityID = json['cityID']; cityID = json['cityID'];
cityName = json['cityName']; cityName = json['cityName'];
cityNameN = json['cityNameN'];
demandAmount = json['demandAmount']; demandAmount = json['demandAmount'];
isActive = json['isActive']; isActive = json['isActive'];
isFinanceAvailable = json['isFinanceAvailable']; isFinanceAvailable = json['isFinanceAvailable'];
@ -269,6 +274,7 @@ class Vehicle {
vehicleVIN = json['vehicleVIN']; vehicleVIN = json['vehicleVIN'];
countryID = json['countryID']; countryID = json['countryID'];
countryName = json['duration'] != null && json['duration']['country'] != null ? json['duration']['country']['label'] : null; 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']; currency = json['currency'];
odometer = json['odometer']; odometer = json['odometer'];
isInUsed = json['isInUsed']; isInUsed = json['isInUsed'];

@ -32,6 +32,7 @@ class BranchDetailModel {
String? countryName; String? countryName;
bool isExpanded = false; bool isExpanded = false;
bool? isFavorite; bool? isFavorite;
String? cityNameN;
BranchDetailModel({ BranchDetailModel({
@ -62,6 +63,7 @@ class BranchDetailModel {
this.countryName, this.countryName,
this.isFavorite, this.isFavorite,
required this.isExpanded, required this.isExpanded,
this.cityNameN,
}); });
List<GenericImageModel> populateBranchImages(value) { List<GenericImageModel> populateBranchImages(value) {
@ -106,6 +108,7 @@ class BranchDetailModel {
branchAuditTrial = json["branchAuditTrial"] == null ? [] : List<BranchAuditTrial>.from(json["branchAuditTrial"]!.map((x) => BranchAuditTrial.fromJson(x))); branchAuditTrial = json["branchAuditTrial"] == null ? [] : List<BranchAuditTrial>.from(json["branchAuditTrial"]!.map((x) => BranchAuditTrial.fromJson(x)));
isExpanded = false; isExpanded = false;
isFavorite = false; isFavorite = false;
cityNameN = json["cityNameN"];
} }
} }

@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:mc_common_app/extensions/string_extensions.dart'; 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/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; import 'package:mc_common_app/models/chat_models/chat_message_model.dart';
@ -12,8 +14,11 @@ class RequestModel {
ShippingRequestStatusEnum? shippingStatusEnum; ShippingRequestStatusEnum? shippingStatusEnum;
SelfPickupRequestStatusEnum? selfPickupRequestStatusEnum; SelfPickupRequestStatusEnum? selfPickupRequestStatusEnum;
String cityName; String cityName;
String cityNameN;
String vehicleTypeName; String vehicleTypeName;
String vehicleTypeNameN;
String countryName; String countryName;
String countryNameN;
String customerName; String customerName;
String customerID; String customerID;
String address; String address;
@ -47,6 +52,7 @@ class RequestModel {
int? modifiedBy; int? modifiedBy;
String? modifiedOn; String? modifiedOn;
List<ChatMessageModel> chatMessages; List<ChatMessageModel> chatMessages;
String? requestStatusNameN;
RequestModel({ RequestModel({
required this.requestType, required this.requestType,
@ -57,8 +63,11 @@ class RequestModel {
required this.shippingStatusEnum, required this.shippingStatusEnum,
required this.selfPickupRequestStatusEnum, required this.selfPickupRequestStatusEnum,
required this.cityName, required this.cityName,
required this.cityNameN,
required this.vehicleTypeName, required this.vehicleTypeName,
required this.vehicleTypeNameN,
required this.countryName, required this.countryName,
required this.countryNameN,
required this.customerName, required this.customerName,
required this.customerID, required this.customerID,
required this.serviceProviders, required this.serviceProviders,
@ -92,6 +101,7 @@ class RequestModel {
required this.modifiedBy, required this.modifiedBy,
required this.modifiedOn, required this.modifiedOn,
required this.chatMessages, required this.chatMessages,
required this.requestStatusNameN,
}); });
List<GenericImageModel> populateRequestImages(value) { List<GenericImageModel> populateRequestImages(value) {
@ -114,8 +124,11 @@ class RequestModel {
shippingStatusEnum: json['shippingRequestStatus'] != null ? (json['shippingRequestStatus'] as int).toShippingStatusEnum() : ShippingRequestStatusEnum.pending, shippingStatusEnum: json['shippingRequestStatus'] != null ? (json['shippingRequestStatus'] as int).toShippingStatusEnum() : ShippingRequestStatusEnum.pending,
selfPickupRequestStatusEnum: json['selfPickupRequestStatus'] != null ? (json['selfPickupRequestStatus'] as int).toSelfPickupStatusEnum() : SelfPickupRequestStatusEnum.preparingToCollect, selfPickupRequestStatusEnum: json['selfPickupRequestStatus'] != null ? (json['selfPickupRequestStatus'] as int).toSelfPickupStatusEnum() : SelfPickupRequestStatusEnum.preparingToCollect,
cityName: json["cityName"], cityName: json["cityName"],
cityNameN: json["cityNameN"],
vehicleTypeName: json["vehicleTypeName"], vehicleTypeName: json["vehicleTypeName"],
vehicleTypeNameN: json["vehicleTypeNameN"],
countryName: json["countryName"], countryName: json["countryName"],
countryNameN: json["countryNameN"],
customerName: json["customerName"] ?? "", customerName: json["customerName"] ?? "",
address: json["address"] ?? "", address: json["address"] ?? "",
additionalAddressDetails: json['additionalAddress'] ?? "", additionalAddressDetails: json['additionalAddress'] ?? "",
@ -148,6 +161,7 @@ class RequestModel {
createdOn: json["createdOn"], createdOn: json["createdOn"],
modifiedBy: json["modifiedBy"], modifiedBy: json["modifiedBy"],
modifiedOn: json["modifiedOn"], modifiedOn: json["modifiedOn"],
requestStatusNameN: json["requestStatusNameN"],
chatMessages: [], chatMessages: [],
); );
} }

@ -216,7 +216,7 @@ class RequestsVM extends BaseVM {
if (acceptedRequestsTypeFilterOptions.isEmpty) { if (acceptedRequestsTypeFilterOptions.isEmpty) {
for (int i = 0; i < myRequestsTypeEnum.length; i++) { 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; acceptedRequestsTypeFilterOptions[0].isSelected = true;
} }
@ -383,16 +383,16 @@ class RequestsVM extends BaseVM {
if (requestsTypeFilterOptions.isEmpty || acceptedRequestsTypeFilterOptions.isEmpty) { if (requestsTypeFilterOptions.isEmpty || acceptedRequestsTypeFilterOptions.isEmpty) {
for (int i = 0; i < myRequestsTypeEnum.length; i++) { for (int i = 0; i < myRequestsTypeEnum.length; i++) {
requestsTypeFilterOptions.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, 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) // Initialize spare parts condition filters (All, New, Used)
if (sparePartsConditionFilterOptions.isEmpty) { if (sparePartsConditionFilterOptions.isEmpty) {
sparePartsConditionFilterOptions.add(FilterListModel(title: "All", isSelected: true, id: 3)); // All sparePartsConditionFilterOptions.add(FilterListModel(title: "All", titleN: "الكل", isSelected: true, id: 3)); // All
sparePartsConditionFilterOptions.add(FilterListModel(title: "New Spare Part", isSelected: false, id: 1)); // New sparePartsConditionFilterOptions.add(FilterListModel(title: "New Spare Part", titleN: "قطعة غيار جديدة", isSelected: false, id: 1)); // New
sparePartsConditionFilterOptions.add(FilterListModel(title: "Used Spare Part", isSelected: false, id: 2)); // Used sparePartsConditionFilterOptions.add(FilterListModel(title: "Used Spare Part",titleN: "قطعة غيار مستعملة", isSelected: false, id: 2)); // Used
} }
if (vehicleBrands.isEmpty) { if (vehicleBrands.isEmpty) {

@ -25,6 +25,7 @@ class VehicleDetails extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
bool isArabic = AppState().isArabic(context);
return Consumer(builder: (BuildContext context, AdVM adVM, Widget? child) { return Consumer(builder: (BuildContext context, AdVM adVM, Widget? child) {
String roleAppState = ""; String roleAppState = "";
String roleName = ""; String roleName = "";
@ -56,7 +57,7 @@ class VehicleDetails extends StatelessWidget {
builder: (context) { builder: (context) {
List<DropValue> vehicleBrandsDrop = []; List<DropValue> vehicleBrandsDrop = [];
for (var element in adVM.vehicleBrands) { 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( return DropdownField(
(DropValue value) => adVM.updateSelectionVehicleBrandId(SelectionModel(selectedId: value.id, selectedOption: value.value)), (DropValue value) => adVM.updateSelectionVehicleBrandId(SelectionModel(selectedId: value.id, selectedOption: value.value)),
@ -106,12 +107,16 @@ class VehicleDetails extends StatelessWidget {
Builder(builder: (context) { Builder(builder: (context) {
List<DropValue> vehicleModelsDrop = []; List<DropValue> vehicleModelsDrop = [];
for (var element in adVM.vehicleModels) { 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( return DropdownField(
(DropValue value) => adVM.updateSelectionVehicleModelId(SelectionModel(selectedId: value.id, selectedOption: value.value)), (DropValue value) => adVM.updateSelectionVehicleModelId(SelectionModel(selectedId: value.id, selectedOption: value.value)),
list: vehicleModelsDrop, 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(), hint: LocaleKeys.vehicleModel.tr(),
errorValue: adVM.vehicleModelId.errorValue, errorValue: adVM.vehicleModelId.errorValue,
); );
@ -135,13 +140,17 @@ class VehicleDetails extends StatelessWidget {
Builder(builder: (context) { Builder(builder: (context) {
List<DropValue> vehicleColorsDrop = []; List<DropValue> vehicleColorsDrop = [];
for (var element in adVM.vehicleColors) { 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( return DropdownField(
(DropValue value) => adVM.updateSelectionVehicleColorId(SelectionModel(selectedId: value.id, selectedOption: value.value)), (DropValue value) => adVM.updateSelectionVehicleColorId(SelectionModel(selectedId: value.id, selectedOption: value.value)),
list: vehicleColorsDrop, list: vehicleColorsDrop,
hint: LocaleKeys.vehicleColor.tr(), 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, errorValue: adVM.vehicleColorId.errorValue,
); );
}), }),
@ -149,12 +158,14 @@ class VehicleDetails extends StatelessWidget {
Builder(builder: (context) { Builder(builder: (context) {
List<DropValue> vehicleConditionsDrop = []; List<DropValue> vehicleConditionsDrop = [];
for (var element in adVM.vehicleConditions) { 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( return DropdownField(
(DropValue value) => adVM.updateSelectionVehicleConditionId(SelectionModel(selectedId: value.id, selectedOption: value.value)), (DropValue value) => adVM.updateSelectionVehicleConditionId(SelectionModel(selectedId: value.id, selectedOption: value.value)),
list: vehicleConditionsDrop, 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(), hint: LocaleKeys.vehicleCondition.tr(),
errorValue: adVM.vehicleConditionId.errorValue, errorValue: adVM.vehicleConditionId.errorValue,
); );
@ -163,13 +174,15 @@ class VehicleDetails extends StatelessWidget {
Builder(builder: (context) { Builder(builder: (context) {
List<DropValue> vehicleCategoriesDrop = []; List<DropValue> vehicleCategoriesDrop = [];
for (var element in adVM.vehicleCategories) { 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( return DropdownField(
(DropValue value) => adVM.updateSelectionVehicleCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value)), (DropValue value) => adVM.updateSelectionVehicleCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value)),
list: vehicleCategoriesDrop, list: vehicleCategoriesDrop,
hint: LocaleKeys.vehicleCategory.tr(), 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, errorValue: adVM.vehicleCategoryId.errorValue,
); );
}), }),
@ -191,13 +204,15 @@ class VehicleDetails extends StatelessWidget {
Builder(builder: (context) { Builder(builder: (context) {
List<DropValue> vehicleTransmissionsDrop = []; List<DropValue> vehicleTransmissionsDrop = [];
for (var element in adVM.vehicleTransmissions) { 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( return DropdownField(
(DropValue value) => adVM.updateSelectionVehicleTransmissionId(SelectionModel(selectedId: value.id, selectedOption: value.value)), (DropValue value) => adVM.updateSelectionVehicleTransmissionId(SelectionModel(selectedId: value.id, selectedOption: value.value)),
list: vehicleTransmissionsDrop, list: vehicleTransmissionsDrop,
hint: LocaleKeys.vehicleTransmission.tr(), 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, errorValue: adVM.vehicleTransmissionId.errorValue,
); );
}), }),
@ -206,12 +221,14 @@ class VehicleDetails extends StatelessWidget {
Builder(builder: (context) { Builder(builder: (context) {
List<DropValue> vehicleCountriesDrop = []; List<DropValue> vehicleCountriesDrop = [];
for (var element in adVM.vehicleCountries) { 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( return DropdownField(
(DropValue value) => adVM.updateSelectionVehicleCountryId(SelectionModel(selectedOption: value.value, selectedId: value.id)), (DropValue value) => adVM.updateSelectionVehicleCountryId(SelectionModel(selectedOption: value.value, selectedId: value.id)),
list: vehicleCountriesDrop, 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(), hint: LocaleKeys.vehicleCountry.tr(),
errorValue: adVM.vehicleCountryId.errorValue, errorValue: adVM.vehicleCountryId.errorValue,
); );
@ -227,12 +244,14 @@ class VehicleDetails extends StatelessWidget {
Builder(builder: (context) { Builder(builder: (context) {
List<DropValue> vehicleCitiesDrop = []; List<DropValue> vehicleCitiesDrop = [];
for (var element in adVM.vehicleCities) { 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( return DropdownField(
(DropValue value) => adVM.updateSelectionVehicleCityId(SelectionModel(selectedId: value.id, selectedOption: value.value)), (DropValue value) => adVM.updateSelectionVehicleCityId(SelectionModel(selectedId: value.id, selectedOption: value.value)),
list: vehicleCitiesDrop, 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(), hint: LocaleKeys.vehicleCity.tr(),
errorValue: adVM.vehicleCityId.errorValue, errorValue: adVM.vehicleCityId.errorValue,
); );

@ -117,7 +117,7 @@ class _AdsDetailViewState extends State<AdsDetailView> {
child: "${widget.adDetails.vehicle!.vehicleTitle} | ${isArabic ? widget.adDetails.vehicle!.color!.labelN : widget.adDetails.vehicle!.color!.label}|" 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.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( Row(
@ -129,7 +129,7 @@ class _AdsDetailViewState extends State<AdsDetailView> {
"${isArabic? widget.adDetails.vehicle!.model!.labelN :widget.adDetails.vehicle!.model!.label}".toText(fontSize: 12), "${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( Row(

@ -349,8 +349,16 @@ class _AdCardState extends State<AdCard> {
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
(widget.adDetails.vehicle!.cityName ?? "").toText(color: MyColors.lightTextColor), (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 ? 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(),
], ],
), ),
], ],

@ -73,6 +73,7 @@ class BuildFooterButton extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isArabic = AppState().isArabic(context);
return Consumer( return Consumer(
builder: (BuildContext context, AdVM adVm, Widget? child) { builder: (BuildContext context, AdVM adVm, Widget? child) {
switch (adVm.currentProgressStep) { switch (adVm.currentProgressStep) {
@ -83,7 +84,8 @@ class BuildFooterButton extends StatelessWidget {
child: ShowFillButton( child: ShowFillButton(
txtColor: MyColors.black, txtColor: MyColors.black,
maxHeight: 55, maxHeight: 55,
title: "Save As Draft", // title: "Save As Draft",
title: isArabic ? "حفظ كمسودة" : "Save As Draft",
onPressed: () async { onPressed: () async {
await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.vehicleDetails, bypassValidation: true); await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.vehicleDetails, bypassValidation: true);
adVm.isDraftEditEnabled = false; adVm.isDraftEditEnabled = false;
@ -118,7 +120,8 @@ class BuildFooterButton extends StatelessWidget {
child: ShowFillButton( child: ShowFillButton(
txtColor: MyColors.black, txtColor: MyColors.black,
maxHeight: 55, maxHeight: 55,
title: "Save As Draft", // title: "Save As Draft",
title: isArabic ? "حفظ كمسودة" : "Save As Draft",
onPressed: () async { onPressed: () async {
await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.damageParts, bypassValidation: true); await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.damageParts, bypassValidation: true);
adVm.isDraftEditEnabled = false; adVm.isDraftEditEnabled = false;
@ -153,7 +156,8 @@ class BuildFooterButton extends StatelessWidget {
child: ShowFillButton( child: ShowFillButton(
txtColor: MyColors.black, txtColor: MyColors.black,
maxHeight: 55, maxHeight: 55,
title: "Save As Draft", // title: "Save As Draft",
title: isArabic ? "حفظ كمسودة" : "Save As Draft",
onPressed: () async { onPressed: () async {
await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.adDuration, bypassValidation: true); await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.adDuration, bypassValidation: true);
adVm.isDraftEditEnabled = false; adVm.isDraftEditEnabled = false;
@ -188,7 +192,8 @@ class BuildFooterButton extends StatelessWidget {
child: ShowFillButton( child: ShowFillButton(
txtColor: MyColors.black, txtColor: MyColors.black,
maxHeight: 55, maxHeight: 55,
title: "Save As Draft", //title: "Save As Draft",
title: isArabic ? "حفظ كمسودة" : "Save As Draft",
onPressed: () async { onPressed: () async {
await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.reviewAd, bypassValidation: true); await adVm.saveAdAsDraft(context: context, stepNoEnum: AdCreationStepsEnum.reviewAd, bypassValidation: true);
adVm.isDraftEditEnabled = false; adVm.isDraftEditEnabled = false;

@ -29,6 +29,7 @@ class RequestDetailPage extends StatelessWidget {
const RequestDetailPage({super.key, required this.requestDetailPageArguments}); const RequestDetailPage({super.key, required this.requestDetailPageArguments});
Widget buildRequestDetailsContainer(BuildContext context) { Widget buildRequestDetailsContainer(BuildContext context) {
bool isArabic = AppState().isArabic(context);
final requestDetail = requestDetailPageArguments.requestModel; final requestDetail = requestDetailPageArguments.requestModel;
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -42,7 +43,7 @@ class RequestDetailPage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ 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.brand.tr()}: ", requestDetail.brand),
showItem("${LocaleKeys.model.tr()}: ", requestDetail.model), showItem("${LocaleKeys.model.tr()}: ", requestDetail.model),
showItem("${LocaleKeys.year.tr()}: ", "${requestDetail.year}"), showItem("${LocaleKeys.year.tr()}: ", "${requestDetail.year}"),
@ -53,12 +54,20 @@ class RequestDetailPage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
"${requestDetail.city ?? ""} ${requestDetail.countryName}".toText( "${isArabic ? requestDetail.cityNameN : requestDetail.city} "
"${isArabic ? requestDetail.countryNameN : requestDetail.countryName}"
.toText(
color: MyColors.lightTextColor, color: MyColors.lightTextColor,
), ),
// "${requestDetail.city ?? ""} ${requestDetail.countryName}".toText(
// color: MyColors.lightTextColor,
// ),
if (requestDetail.createdOn != null) ...[ if (requestDetail.createdOn != null) ...[
DateTime.parse(requestDetail.createdOn!).getTimeAgo().toText( // DateTime.parse(requestDetail.createdOn!).getTimeAgo().toText(
color: MyColors.lightTextColor, // color: MyColors.lightTextColor,
// ),
DateTime.parse(requestDetail.createdOn!).getTimeAgo(isArabic: isArabic)
.toText(color: MyColors.lightTextColor,
), ),
], ],
], ],

@ -21,6 +21,7 @@ class RequestItem extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isArabic = AppState().isArabic(context);
String imageUrl = ""; String imageUrl = "";
if (request.requestImages != null && request.requestImages!.isNotEmpty) { if (request.requestImages != null && request.requestImages!.isNotEmpty) {
imageUrl = request.requestImages!.first.imageUrl ?? ""; imageUrl = request.requestImages!.first.imageUrl ?? "";
@ -42,9 +43,20 @@ class RequestItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (shouldShowStatuses) ...[ if (shouldShowStatuses) ...[
// Utils.statusContainerChip(
// text: request.requestStatusName.toLowerCase() == "InProgress".toLowerCase() ? "In Progress" : request.requestStatusName,
// chipColor: Utils.getChipColorByRequestStatus(request.requestStatus)),
Utils.statusContainerChip( Utils.statusContainerChip(
text: request.requestStatusName.toLowerCase() == "InProgress".toLowerCase() ? "In Progress" : request.requestStatusName, text: isArabic
chipColor: Utils.getChipColorByRequestStatus(request.requestStatus)), ? (request.requestStatusNameN?.isNotEmpty == true
? request.requestStatusNameN!
: request.requestStatusName)
: (request.requestStatusName.toLowerCase() == "inprogress"
? "In Progress"
: request.requestStatusName),
chipColor:
Utils.getChipColorByRequestStatus(request.requestStatus),
),
], ],
6.height, 6.height,
"${request.brand} ${request.model} | ${request.id}".toText(fontSize: 16, letterSpacing: -0.64), "${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}"), showItem("${LocaleKeys.year.tr()}:", "${request.year}"),
], ],
if (request.vehicleTypeName.isNotEmpty) ...[ 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), showItem("${LocaleKeys.description.tr()}:", request.description),
], ],
@ -86,9 +98,21 @@ class RequestItem extends StatelessWidget {
), ),
], ],
2.height, 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) ...[ 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,
),
], ],
], ],
) )

@ -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/theme/colors.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import '../../../classes/app_state.dart';
class CustomSettingOptionsTile extends StatelessWidget { class CustomSettingOptionsTile extends StatelessWidget {
final Widget leadingWidget; final Widget leadingWidget;
final String titleText; final String titleText;
@ -31,6 +33,7 @@ class CustomSettingOptionsTile extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isArabic = AppState().isArabic(context);
return Column( return Column(
children: [ children: [
Row( Row(
@ -56,10 +59,20 @@ class CustomSettingOptionsTile extends StatelessWidget {
], ],
), ),
isForLanguage isForLanguage
? LocaleKeys.english.tr().toText(fontSize: 12, isUnderLine: true, color: MyColors.primaryColor) ? (isArabic ? "English": "عربي")
.toText(
fontSize: 12,
isUnderLine: true,
color: MyColors.primaryColor,
)
: showTrailingArrow : showTrailingArrow
? const Icon(Icons.arrow_forward, size: 18) ? const Icon(Icons.arrow_forward, size: 18)
: const SizedBox() : 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), ).onPress(onTap),
subTitle != null ? 3.height : 5.height, subTitle != null ? 3.height : 5.height,

@ -69,15 +69,21 @@ class FiltersList extends StatelessWidget {
], ],
// Text displayed in the chip // Text displayed in the chip
(isArabic (isArabic
? (filterList[index].titleN ?? filterList[index].title) ? (filterList[index].titleN.isNotEmpty ? filterList[index].titleN : filterList[index].title) : filterList[index].title).toText(
: filterList[index].title)
.tr()
.toText(
// filterList[index].title.tr().toText(
fontSize: 13, fontSize: 13,
letterSpacing: -0.14, letterSpacing: -0.14,
color: filterList[index].isSelected ? MyColors.white : null, 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,
// ),
], ],
), ),
), ),

Loading…
Cancel
Save