fatima_dev #6

Open
Fatimah wants to merge 4 commits from fatima_dev into faiz_development_common

@ -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}) { 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); 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';

@ -15,6 +15,7 @@ class AdDetailsModel {
// List<Null>? reserved; // List<Null>? reserved;
int? statusID; int? statusID;
String? statuslabel; String? statuslabel;
String? statuslabelN;
double? adsDurationPrice; double? adsDurationPrice;
double? adsDurationDiscount; double? adsDurationDiscount;
double? adsDurationDiscountPrice; double? adsDurationDiscountPrice;
@ -65,6 +66,7 @@ class AdDetailsModel {
// this.reserved, // this.reserved,
this.statusID, this.statusID,
this.statuslabel, this.statuslabel,
this.statuslabelN,
this.adsDurationPrice, this.adsDurationPrice,
this.adsDurationDiscount, this.adsDurationDiscount,
this.adsDurationDiscountPrice, this.adsDurationDiscountPrice,
@ -126,6 +128,7 @@ class AdDetailsModel {
} }
statusID = json['statusID']; statusID = json['statusID'];
statuslabel = json['statuslabel']; statuslabel = json['statuslabel'];
statuslabelN = json['statuslabelN'];
adsDurationPrice = json['adsDurationPrice']; adsDurationPrice = json['adsDurationPrice'];
adsDurationDiscount = json['adsDurationDiscount']; adsDurationDiscount = json['adsDurationDiscount'];
adsDurationDiscountPrice = json['adsDurationDiscountPrice']; adsDurationDiscountPrice = json['adsDurationDiscountPrice'];
@ -172,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;
@ -194,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;
@ -203,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,
@ -225,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,
@ -234,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'];
@ -266,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: [],
); );
} }

@ -21,8 +21,13 @@ class DateHelper {
return formatter.format(date); return formatter.format(date);
} }
static String formatAsTime(DateTime date) { // static String formatAsTime(DateTime date) {
final formatter = DateFormat.jm(); // final formatter = DateFormat.jm();
// return formatter.format(date);
// }
static String formatAsTime(DateTime date, {bool isArabic = false,}) {
final formatter = DateFormat.jm(
isArabic ? 'ar' : 'en',);
return formatter.format(date); return formatter.format(date);
} }
@ -36,8 +41,15 @@ class DateHelper {
return formatter.format(date); return formatter.format(date);
} }
static String formatAsDayMonthYear(DateTime? date) { // static String formatAsDayMonthYear(DateTime? date) {
final formatter = DateFormat('d MMM, y'); // final formatter = DateFormat('d MMM, y');
// return date != null ? formatter.format(date) : "N/A";
// }
static String formatAsDayMonthYear(DateTime? date,
{ bool isArabic = false,}) {
final formatter = DateFormat('d MMM, y',
isArabic ? 'ar' : 'en',
);
return date != null ? formatter.format(date) : "N/A"; return date != null ? formatter.format(date) : "N/A";
} }

@ -194,19 +194,20 @@ class AdVM extends BaseVM {
exploreAdsFilterOptions.clear(); exploreAdsFilterOptions.clear();
myAdsFilterOptions.clear(); myAdsFilterOptions.clear();
for (int i = 0; i < myAdsStatusEnums.length; i++) { for (int i = 0; i < myAdsStatusEnums.length; i++) {
myAdsFilterOptions.add(FilterListModel(title: myAdsStatusEnums[i].enumValueStr, isSelected: false, id: myAdsStatusEnums[i].enumValue)); myAdsFilterOptions.add(FilterListModel(title: myAdsStatusEnums[i].enumValueStr, titleN: myAdsStatusEnums[i].enumValueStrN, isSelected: false, id: myAdsStatusEnums[i].enumValue));
} }
myAdsFilterOptions.insert(0, FilterListModel(title: "All Ads", isSelected: true, id: 0)); myAdsFilterOptions.insert(0, FilterListModel(title: "All Ads", titleN: "جميع الاعلانات", isSelected: true, id: 0));
for (int i = 0; i < vehicleBrandsForFilters.length; i++) { for (int i = 0; i < vehicleBrandsForFilters.length; i++) {
exploreAdsFilterOptions.add(FilterListModel( exploreAdsFilterOptions.add(FilterListModel(
id: vehicleBrandsForFilters[i].id!, id: vehicleBrandsForFilters[i].id!,
title: "${vehicleBrandsForFilters[i].vehicleBrandDescription}", title: "${vehicleBrandsForFilters[i].vehicleBrandDescription}",
titleN: "${vehicleBrandsForFilters[i].vehicleBrandDescriptionN}",
iconUrl: vehicleBrandsForFilters[i].imageUrl ?? "", iconUrl: vehicleBrandsForFilters[i].imageUrl ?? "",
isSelected: false, isSelected: false,
)); ));
} }
exploreAdsFilterOptions.insert(0, FilterListModel(title: "All Ads", isSelected: true, id: 0)); exploreAdsFilterOptions.insert(0, FilterListModel(title: "All Ads", titleN: "جميع الاعلانات", isSelected: true, id: 0));
notifyListeners(); notifyListeners();
} }

@ -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(
@ -148,7 +148,9 @@ class _AdsDetailViewState extends State<AdsDetailView> {
"${widget.adDetails.vehicle!.mileage!.mileageEnd} ${LocaleKeys.km.tr()}".toText(fontSize: 12), "${widget.adDetails.vehicle!.mileage!.mileageEnd} ${LocaleKeys.km.tr()}".toText(fontSize: 12),
], ],
), ),
widget.adDetails.createdOn != null ? DateTime.parse(widget.adDetails.createdOn!).getTimeAgo().toText(fontSize: 10, color: MyColors.lightTextColor) : const SizedBox(), widget.adDetails.createdOn != null
? DateTime.parse(widget.adDetails.createdOn!).getTimeAgo(isArabic: isArabic).toText(fontSize: 10,color: MyColors.lightTextColor,): const SizedBox(),
//widget.adDetails.createdOn != null ? DateTime.parse(widget.adDetails.createdOn!).getTimeAgo().toText(fontSize: 10, color: MyColors.lightTextColor) : const SizedBox(),
], ],
), ),
Row( Row(
@ -384,12 +386,26 @@ class _AdsDetailViewState extends State<AdsDetailView> {
Widget buildAdStartEndDates() { Widget buildAdStartEndDates() {
String startDate = ""; String startDate = "";
String endDate = ""; String endDate = "";
bool isArabic = AppState().isArabic(context);
if (widget.adDetails.startdate != null) { final atText = isArabic ? "الساعة" : "at";
startDate = "${DateHelper.formatAsDayMonthYear(DateTime.parse(widget.adDetails.startdate!))} at ${DateHelper.formatAsTime(DateTime.parse(widget.adDetails.startdate!))}";
// if (widget.adDetails.startdate != null) {
// startDate = "${DateHelper.formatAsDayMonthYear(DateTime.parse(widget.adDetails.startdate!))} at ${DateHelper.formatAsTime(DateTime.parse(widget.adDetails.startdate!))}";
// }
// if (widget.adDetails.enddate != null) {
// endDate = "${DateHelper.formatAsDayMonthYear(DateTime.parse(widget.adDetails.enddate!))} at ${DateHelper.formatAsTime(DateTime.parse(widget.adDetails.enddate!))}";
// }
if (widget.adDetails.startdate != null) {startDate = "${DateHelper.formatAsDayMonthYear(DateTime.parse(widget.adDetails.startdate!),
isArabic: isArabic,)} $atText ${DateHelper.formatAsTime(
DateTime.parse(widget.adDetails.startdate!),
isArabic: isArabic,
)}";
} }
if (widget.adDetails.enddate != null) { if (widget.adDetails.enddate != null) {endDate = "${DateHelper.formatAsDayMonthYear(DateTime.parse(widget.adDetails.enddate!),
endDate = "${DateHelper.formatAsDayMonthYear(DateTime.parse(widget.adDetails.enddate!))} at ${DateHelper.formatAsTime(DateTime.parse(widget.adDetails.enddate!))}"; isArabic: isArabic,)} $atText ${DateHelper.formatAsTime(
DateTime.parse(widget.adDetails.enddate!),
isArabic: isArabic,
)}";
} }
return Column( return Column(
children: [ children: [

@ -275,10 +275,31 @@ class _AdCardState extends State<AdCard> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
if (isAdsFragment && widget.adDetails.adPostStatus! == AdPostStatus.sold && widget.adDetails.statuslabel != null && widget.adDetails.statuslabel!.isNotEmpty) ...[ // if (isAdsFragment && adDetails.adPostStatus! == AdPostStatus.sold && adDetails.statuslabel != null && adDetails.statuslabel!.isNotEmpty) ...[
Utils.statusContainerChip(text: widget.adDetails.statuslabel ?? "", chipColor: Utils.getChipColorByAdStatus(widget.adDetails.adPostStatus!)), // Utils.statusContainerChip(text: adDetails.statuslabel ?? "", chipColor: Utils.getChipColorByAdStatus(adDetails.adPostStatus!)),
] else if (isAdsFragment && !context.read<AdVM>().isExploreAdsTapped && widget.adDetails.statuslabel != null && widget.adDetails.statuslabel!.isNotEmpty) ...[ // ] else if (isAdsFragment && !context.read<AdVM>().isExploreAdsTapped && adDetails.statuslabel != null && adDetails.statuslabel!.isNotEmpty) ...[
Utils.statusContainerChip(text: widget.adDetails.statuslabel ?? "", chipColor: Utils.getChipColorByAdStatus(widget.adDetails.adPostStatus!)), // Utils.statusContainerChip(text: adDetails.statuslabel ?? "", chipColor: Utils.getChipColorByAdStatus(adDetails.adPostStatus!)),
// ],
if (isAdsFragment &&
widget.adDetails.adPostStatus! == AdPostStatus.sold &&
widget.adDetails.statuslabel != null &&
widget.adDetails.statuslabel!.isNotEmpty) ...[
Utils.statusContainerChip(
text: isArabic
? (widget.adDetails.statuslabelN ?? "")
: (widget.adDetails.statuslabel ?? ""),
chipColor: Utils.getChipColorByAdStatus(widget.adDetails.adPostStatus!),
),
] else if (isAdsFragment &&
!context.read<AdVM>().isExploreAdsTapped &&
widget.adDetails.statuslabel != null &&
widget.adDetails.statuslabel!.isNotEmpty) ...[
Utils.statusContainerChip(
text: isArabic
? (widget.adDetails.statuslabelN ?? "")
: (widget.adDetails.statuslabel ?? ""),
chipColor: Utils.getChipColorByAdStatus(widget.adDetails.adPostStatus!),
),
], ],
// Show Accident Free chip for explore ads when isAccidentFree is true // Show Accident Free chip for explore ads when isAccidentFree is true
if (isAdsFragment && context.read<AdVM>().isExploreAdsTapped && widget.adDetails.vehicle?.isAccidentFree == true) ...[ if (isAdsFragment && context.read<AdVM>().isExploreAdsTapped && widget.adDetails.vehicle?.isAccidentFree == true) ...[
@ -328,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;

@ -70,13 +70,14 @@ class SelectAdTypeView extends StatelessWidget {
children: [ children: [
Expanded( Expanded(
child: Consumer(builder: (BuildContext context, AdVM adVM, Widget? child) { child: Consumer(builder: (BuildContext context, AdVM adVM, Widget? child) {
final isArabic = AppState().isArabic(context);
return ListView.separated( return ListView.separated(
itemCount: adVM.vehicleTypes.length, itemCount: adVM.vehicleTypes.length,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
VehicleTypeModel vehicleTypeModel = adVM.vehicleTypes[index]; VehicleTypeModel vehicleTypeModel = adVM.vehicleTypes[index];
return InkWell( return InkWell(
onTap: () async { onTap: () async {
adVM.updateSelectionVehicleTypeId(SelectionModel(selectedId: vehicleTypeModel.id!, selectedOption: vehicleTypeModel.vehicleTypeName ?? "", errorValue: "")); adVM.updateSelectionVehicleTypeId(SelectionModel(selectedId: vehicleTypeModel.id!, selectedOption: isArabic ? vehicleTypeModel.vehicleTypeNameN ?? "" : vehicleTypeModel.vehicleTypeName ?? "", errorValue: ""));
if (adVM.isAdEditEnabled) { if (adVM.isAdEditEnabled) {
adVM.autoFillSelectedVehicleAdsDetails(context); adVM.autoFillSelectedVehicleAdsDetails(context);
} }
@ -113,7 +114,9 @@ class SelectAdTypeView extends StatelessWidget {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
vehicleTypeModel.vehicleTypeName.toString().toText(fontSize: 18), isArabic ? vehicleTypeModel.vehicleTypeNameN.toString().toText(fontSize: 18)
: vehicleTypeModel.vehicleTypeName.toString().toText(fontSize: 18),
// vehicleTypeModel.vehicleTypeName.toString().toText(fontSize: 18),
getVehicleAdTypeIcon(vehicleTypeModel.vehicleTypeEnum!), getVehicleAdTypeIcon(vehicleTypeModel.vehicleTypeEnum!),
], ],
), ),

@ -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,13 +54,21 @@ 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,

@ -15,6 +15,8 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../classes/app_state.dart';
class ForgetPasswordPage extends StatefulWidget { class ForgetPasswordPage extends StatefulWidget {
const ForgetPasswordPage({Key? key}) : super(key: key); const ForgetPasswordPage({Key? key}) : super(key: key);
@ -133,11 +135,19 @@ class _ForgetPasswordPageState extends State<ForgetPasswordPage> {
} }
Widget getCountry() { Widget getCountry() {
bool isArabic = AppState().isArabic(context);
if (_country != null) { if (_country != null) {
List<DropValue> dropList = []; List<DropValue> dropList = [];
_country!.data?.forEach( _country!.data?.forEach(
(element) { (element) {
dropList.add(DropValue(element.id ?? 0, "${element.countryName ?? ""} ${element.countryCode ?? ""}", element.countryCode ?? "")); // dropList.add(DropValue(element.id ?? 0, "${element.countryName ?? ""} ${element.countryCode ?? ""}", element.countryCode ?? ""));
dropList.add(
DropValue(
element.id ?? 0,
"${isArabic ? (element.countryNameN ?? element.countryName ?? "") : (element.countryName ?? "")} ${element.countryCode ?? ""}",
element.countryCode ?? "",
),
);
}, },
); );
return Padding( return Padding(

@ -179,15 +179,48 @@ class _LoginWithPasswordState extends State<LoginWithPassword> {
); );
} }
// Widget getCountry(BuildContext context) {
// if (_country != null) {
// List<DropValue> dropList = [];
// _country!.data?.forEach((element) {
// dropList.add(DropValue(element.id ?? 0, "${element.countryName ?? ""} ${element.countryCode ?? ""}", element.countryCode ?? ""));
// });
// return DropdownField(
// dropdownValue: tempCountry,
// (DropValue value) {
// countryCode = value.subValue;
// tempCountry = value;
// setState(() {});
// },
// list: dropList,
// hint: LocaleKeys.selectCountryCode.tr(),
// );
// } else {
// return const Center(
// child: CircularProgressIndicator(),
// );
// }
// }
Widget getCountry(BuildContext context) { Widget getCountry(BuildContext context) {
bool isArabic = AppState().isArabic(context);
if (_country != null) { if (_country != null) {
List<DropValue> dropList = []; List<DropValue> dropList = [];
_country!.data?.forEach((element) { _country!.data?.forEach((element) {
dropList.add(DropValue(element.id ?? 0, "${element.countryName ?? ""} ${element.countryCode ?? ""}", element.countryCode ?? "")); dropList.add(
DropValue(
element.id ?? 0,
"${isArabic ? (element.countryNameN ?? element.countryName ?? "") : (element.countryName ?? "")} ${element.countryCode ?? ""}",
element.countryCode ?? "",
),
);
}); });
return DropdownField( return DropdownField(
dropdownValue: tempCountry, dropdownValue: tempCountry,
(DropValue value) { (DropValue value) {
countryCode = value.subValue; countryCode = value.subValue;
tempCountry = value; tempCountry = value;
setState(() {}); setState(() {});

@ -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) fontSize: 13,
.tr() letterSpacing: -0.14,
.toText( color: filterList[index].isSelected ? MyColors.white : null,
// filterList[index].title.tr().toText( )
fontSize: 13, // (isArabic
letterSpacing: -0.14, // ? (filterList[index].titleN ?? filterList[index].title)
color: filterList[index].isSelected ? MyColors.white : null, // : filterList[index].title)
), // .tr()
// .toText(
// // filterList[index].title.tr().toText(
// fontSize: 13,
// letterSpacing: -0.14,
// color: filterList[index].isSelected ? MyColors.white : null,
// ),
], ],
), ),
), ),

@ -93,10 +93,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.1"
clock: clock:
dependency: transitive dependency: transitive
description: description:
@ -817,26 +817,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.17" version: "0.12.19"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.1" version: "0.13.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.16.0" version: "1.18.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -1286,10 +1286,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.6" version: "0.7.11"
timezone: timezone:
dependency: transitive dependency: transitive
description: description:
@ -1483,5 +1483,5 @@ packages:
source: hosted source: hosted
version: "6.5.0" version: "6.5.0"
sdks: sdks:
dart: ">=3.8.0-0 <4.0.0" dart: ">=3.10.0-0 <4.0.0"
flutter: ">=3.24.0" flutter: ">=3.24.0"

Loading…
Cancel
Save