From fcd5436fb70f2ff7b9db1d24bb6e9c174a7207c2 Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" <> Date: Sun, 14 Jul 2024 14:40:02 +0300 Subject: [PATCH] Localization 1 --- assets/langs/ar-SA.json | 73 ++++++++- assets/langs/en-US.json | 148 +++++++++++++----- lib/generated/codegen_loader.g.dart | 146 ++++++++++++++++- lib/generated/locale_keys.g.dart | 71 +++++++++ lib/main.dart | 5 +- lib/utils/app_permission_handler.dart | 7 +- .../ad_duration_container.dart | 25 +-- .../ad_review_containers.dart | 64 ++++---- .../damage_parts_container.dart | 4 +- .../vehicle_details_container.dart | 42 ++--- 10 files changed, 476 insertions(+), 109 deletions(-) diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 5fb1e45..a40d024 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -280,5 +280,76 @@ "pleaseSelectStartTime": "يرجى تحديد وقت بدء الوردية", "pleaseSelectEndTime": "يرجى تحديد وقت انتهاء الوردية", "pleaseSelectSlotTime": "يرجى تحديد وقت الفتحة", - "pleaseSelectAppointmentPerSlot": "يرجى تحديد موعد لكل فتحة" + "pleaseSelectAppointmentPerSlot": "يرجى تحديد موعد لكل فتحة", + "exploreAds": "استكشاف الإعلانات", + "myAds": "إعلاناتي", + "noAppointmentstoShow": "لا توجد مواعيد لعرضها", + "myRecommendedAds": "الإعلانات الموصى بها لي", + "model": "الموديل", + "chooseImageSource": "اختر مصدر الصورة", + "camera": "الكاميرا", + "gallery": "المعرض", + "imageIsDeleted": "تم حذف الصورة", + "myRequests": "طلباتي", + "branchDetail": "تفاصيل الفرع", + "time": "الوقت", + "openMapLocation": "فتح موقع الخريطة", + "providerProfile": "ملف المزود", + "servicesOffer": "الخدمات المقدمة", + "noServicesAvailable": "لا تتوفر خدمات", + "bookAppointment": "حجز موعد", + "allowingHomeService": "السماح بخدمة منزلية", + "homeServiceRange": "نطاق الخدمة المنزلية", + "chargesPerKM": "الرسوم لكل كيلومتر", + "providerDetails": "تفاصيل المزود", + "someDescriptionExperienceandtheirReputation": "بعض الوصف عن المزود وسنوات خبرتهم وسمعتهم", + "availableforAppointment": "متاح للموعد", + "allowingWorkshopService": "السماح بخدمة ورشة العمل", + "serviceAmount": "مبلغ الخدمة", + "youNeedStoragePermissionFiles": "تحتاج إلى منح إذن التخزين لاختيار الملفات.", + "settingDeniedPermanently": "تم رفض هذا الإذن بشكل دائم، يرجى الذهاب إلى الإعدادات والسماح.", + "openAppSetting": "افتح إعدادات التطبيق", + "adDuration": "مدة الإعلان", + "startDate": "تاريخ البدء", + "contactDetails": "تفاصيل الاتصال", + "showyournumbertoBuyers": "هل تريد إظهار رقمك للمشترين؟", + "isNumberRegisteredWhatsApp": "هل هذا الرقم مسجل على واتساب؟", + "selectSpecialServices": "اختر الخدمات الخاصة", + "vehicleDetails": "تفاصيل المركبة", + "vehicleModel": "طراز المركبة", + "vehicleColor": "لون المركبة", + "vehicleCategory": "فئة المركبة", + "vehicleTransmission": "نقل المركبة", + "vehicleCountry": "بلد المركبة", + "vehicleAmount": "مبلغ المركبة", + "vehicleTitle": "عنوان المركبة", + "financeAvailable": "التمويل متاح", + "vehiclePictures": "صور المركبة", + "vehiclePart": "جزء المركبة", + "damagePartPictures": "صور الأجزاء المتضررة", + "vehicleDamagePart": "جزء المركبة المتضرر", + "duration": "المدة", + "specialServices": "الخدمات الخاصة", + "specialService": "خدمة خاصة", + "adContactDetails": "تفاصيل الاتصال بالإعلان", + "onWhatsAp": "على واتساب", + "reserveAdPriceInfo": "معلومات سعر الإعلان المحجوز", + "addDamagePart": "إضافة جزء متضرر", + "vehicleType": "نوع المركبة", + "vehicleYear": "سنة المركبة", + "vehicleCondition": "حالة المركبة", + "vehicleMileage": "عدد الأميال للمركبة", + "sellerType": "نوع البائع", + "vehicleCity": "مدينة المركبة", + "vehicleVIN": "رقم تعريف المركبة (VIN)", + "warrantyAvailable": "الضمان متاح", + "years": "سنوات", + "vehicleDetail": "تفاصيل المركبة", + "vehicleBrand": "ماركة المركبة", + "vehicleModelYear": "سنة طراز المركبة", + "vehicleSellerType": "نوع بائع المركبة", + "demandAmount": "المبلغ المطلوب", + "warrantyAvailableYears": "الضمان متاح (عدد السنوات)", + "vehicleDescription": "وصف المركبة", + "attachImage": "إرفاق صورة" } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 4ffa51e..464157e 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -187,7 +187,7 @@ "updateBranch": "Update Branch", "branches": "Branches", "requests": "Requests", - "noBranchFound" : "No Branch Found", + "noBranchFound": "No Branch Found", "pickAddress": "Pick Address", "pickLocation": "Pick Location", "chooseCity": "Select City", @@ -202,61 +202,61 @@ "completeProfile2": "Complete Profile 2/3", "completeProfile3": "Complete Profile 3/3", "provider": "Provider", - "noRequeststoShow" : "No Requests to Show", + "noRequeststoShow": "No Requests to Show", "myBranches": "My Branches", - "mergeAppointments" : "Merge Appointments", - "addService" : "Add Service", - "selectServicestoAdd" : "Select services you want to add", + "mergeAppointments": "Merge Appointments", + "addService": "Add Service", + "selectServicestoAdd": "Select services you want to add", "noServiceFound": "No Service Found", - "selectItems" : "Select Items", - "noItemSelectedYet" : "No Item Selected Yet", - "totalAdditionalAmount" : "Total Additional Amount", + "selectItems": "Select Items", + "noItemSelectedYet": "No Item Selected Yet", + "totalAdditionalAmount": "Total Additional Amount", "sar": "SAR", - "cancel" : "Cancel", - "add" : "Add", - "itemsAddedSuccessfully" : "Items are added Successfully", - "pleaseSelectItems" : "Please select items", - "totalAmount" : "Total Amount", - "searchItems" : "Search Items", + "cancel": "Cancel", + "add": "Add", + "itemsAddedSuccessfully": "Items are added Successfully", + "pleaseSelectItems": "Please select items", + "totalAmount": "Total Amount", + "searchItems": "Search Items", "addSelectedItems": "Add Selected Items", "collectMoneyBefore": "Do you want to collect the money before providing services?", "yes": "Yes", - "no" : "No", - "reason" : "Reason", + "no": "No", + "reason": "Reason", "typeHere": "Type Here...", - "pleaseSelectReason" : "Please Select Reason", - "noAppointmentFound" : "No Appointment Found", - "slotsOverview" : "Slots Overview", - "empty" : "Empty", - "occupied" : "Occupied", - "totalSlots" : "Total Slots", - "selectAppointments" : "Select Appointments", - "appointmentMergeSuccessfully" : "Appointment Merge is Successfully done", - "updateAppointment" : "Update Appointment", - "addNewService" : "Add New Service", - "waitingPaymentfromtheCustomer" : "Waiting for the payment from the customer", - "appointmentisCompleted" : "Appointment is completed", + "pleaseSelectReason": "Please Select Reason", + "noAppointmentFound": "No Appointment Found", + "slotsOverview": "Slots Overview", + "empty": "Empty", + "occupied": "Occupied", + "totalSlots": "Total Slots", + "selectAppointments": "Select Appointments", + "appointmentMergeSuccessfully": "Appointment Merge is Successfully done", + "updateAppointment": "Update Appointment", + "addNewService": "Add New Service", + "waitingPaymentfromtheCustomer": "Waiting for the payment from the customer", + "appointmentisCompleted": "Appointment is completed", "workStart": "Work Start", "payNow": "Pay Now", - "arrived" : "Arrived", + "arrived": "Arrived", "payLater": "Pay Later", - "complete" : "Complete", - "makeAnOffer" : "Make an offer", + "complete": "Complete", + "makeAnOffer": "Make an offer", "enterAmount": "Enter amount", "submit": "Submit", "viewChat": "View Chat", - "requestDetail" : "Request Detail", + "requestDetail": "Request Detail", "sendOffer": "Send Offer", "offer": "Offer", "sendPriceOffer": "Send Price Offer", - "comment" : "Comment", + "comment": "Comment", "sendOTP": "Send OTP", "noUserAddedYet": "No User Added Yet", - "assignDealerUser" : "Assign Dealer User", + "assignDealerUser": "Assign Dealer User", "createNewUser": "Create New User", "dealerUser": "Dealer User", "setorEditBranchSchedule": "Set or Edit Branch Schedule", - "addServices" : "Add Services", + "addServices": "Add Services", "noServiceAddedYet": "No Service Added Yet", "selectDays": "Select Days", "addSelectedDays": "Add Selected Days", @@ -274,11 +274,83 @@ "create": "Create", "pleaseEnterValidScheduleName": "Please enter valid schedule Name", "pleaseSelectServices": "Please select Services", - "pleaseSelectStartDate" : "Please select start date", + "pleaseSelectStartDate": "Please select start date", "pleaseSelectEndDate": "Please select end date", "pleaseSelectOffDays": "Please Select off Days", - "pleaseSelectStartTime" : "Please select start time", + "pleaseSelectStartTime": "Please select start time", "pleaseSelectEndTime": "Please select end time", "pleaseSelectSlotTime": "Please select slot time", - "pleaseSelectAppointmentPerSlot": "Please select appointment per slot" + "pleaseSelectAppointmentPerSlot": "Please select appointment per slot", + "exploreAds": "Explore Ads", + "myAds": "My Ads", + "noAppointmentstoShow": "No Appointments to show", + "myRecommendedAds": "My Recommended Ads", + "model": "Model", + "chooseImageSource": "Choose image source", + "camera": "Camera", + "gallery": "Gallery", + "imageIsDeleted": "Image is Deleted", + "myRequests": "My Requests", + "branchDetail": "Branch Detail", + "time": "Time", + "openMapLocation": "Open Map Location", + "providerProfile": "Provider Profile", + "servicesOffer": "Services Offer", + "noServicesAvailable": "No Services Available", + "bookAppointment": "Book Appointment", + "allowingHomeService": "Allowing home service", + "homeServiceRange": "Home service range", + "chargesPerKM": "Charges per KM", + "providerDetails": "Provider Details", + "someDescriptionExperienceandtheirReputation": "Some description about the provider and their years of experience and their reputation", + "availableforAppointment": "Available for appointment", + "allowingWorkshopService": "Allowing Workshop service", + "serviceAmount": "Service Amount", + "youNeedStoragePermissionFiles.": "You need to give storage permission to select files.", + "settingDeniedPermanently": "This permission was denied permanently, Please go to settings and allow. ", + "openAppSetting": "Open App Setting", + "adDuration": "Ad Duration", + "startDate": "Start Date", + "contactDetails": "Contact Details", + "showyournumbertoBuyers": "Do you want to show your number to the buyers?", + "isNumberRegisteredWhatsApp": "Is this number registered on WhatsApp?", + "selectSpecialServices": "Select Special Services", + "vehicleDetails": "Vehicle Details", + "vehicleModel": "Vehicle Model", + "vehicleColor": "Vehicle Color", + "vehicleCategory": "Vehicle Category", + "vehicleTransmission": "Vehicle Transmission", + "vehicleCountry": "Vehicle Country", + "vehicleAmount": "Vehicle Amount", + "vehicleTitle": "Vehicle Title", + "financeAvailable": "Finance Available", + "vehiclePictures": "Vehicle Pictures", + "vehiclePart": "Vehicle Part", + "damagePartPictures": "Damage Part Pictures", + "vehicleDamagePart": "Vehicle Damage Part", + "duration": "Duration", + "specialServices": "Special Services", + "specialService": "Special Service", + "adContactDetails": "Ad Contact Details", + "onWhatsAp": "On WhatsAp", + "reserveAdPriceInfo": "Reserve Ad Price Info", + "addDamagePart": "Add Damage Part", + "vehicleType": "Vehicle Type", + "vehicleYear": "Vehicle Year", + "vehicleCondition": "Vehicle Condition", + "vehicleMileage": "Vehicle Mileage", + "sellerType": "Seller Type", + "vehicleCity": "Vehicle City", + "vehicleVIN": "Vehicle VIN", + "warrantyAvailable": "Warranty Available", + "years": "Years", + "vehicleDetail": "Vehicle Detail", + "vehicleBrand": "Vehicle Brand", + "vehicleModelYear": "Vehicle Model Year", + "vehicleSellerType": "Vehicle Seller Type", + "demandAmount": "Demand Amount", + "warrantyAvailableYears": "Warranty Available (No. of Years)", + "vehicleDescription": "Vehicle Description", + "attachImage": "Attach Image" + } \ No newline at end of file diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 005f7f8..24a2a1b 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -296,7 +296,78 @@ class CodegenLoader extends AssetLoader{ "pleaseSelectStartTime": "يرجى تحديد وقت بدء الوردية", "pleaseSelectEndTime": "يرجى تحديد وقت انتهاء الوردية", "pleaseSelectSlotTime": "يرجى تحديد وقت الفتحة", - "pleaseSelectAppointmentPerSlot": "يرجى تحديد موعد لكل فتحة" + "pleaseSelectAppointmentPerSlot": "يرجى تحديد موعد لكل فتحة", + "exploreAds": "استكشاف الإعلانات", + "myAds": "إعلاناتي", + "noAppointmentstoShow": "لا توجد مواعيد لعرضها", + "myRecommendedAds": "الإعلانات الموصى بها لي", + "model": "الموديل", + "chooseImageSource": "اختر مصدر الصورة", + "camera": "الكاميرا", + "gallery": "المعرض", + "imageIsDeleted": "تم حذف الصورة", + "myRequests": "طلباتي", + "branchDetail": "تفاصيل الفرع", + "time": "الوقت", + "openMapLocation": "فتح موقع الخريطة", + "providerProfile": "ملف المزود", + "servicesOffer": "الخدمات المقدمة", + "noServicesAvailable": "لا تتوفر خدمات", + "bookAppointment": "حجز موعد", + "allowingHomeService": "السماح بخدمة منزلية", + "homeServiceRange": "نطاق الخدمة المنزلية", + "chargesPerKM": "الرسوم لكل كيلومتر", + "providerDetails": "تفاصيل المزود", + "someDescriptionExperienceandtheirReputation": "بعض الوصف عن المزود وسنوات خبرتهم وسمعتهم", + "availableforAppointment": "متاح للموعد", + "allowingWorkshopService": "السماح بخدمة ورشة العمل", + "serviceAmount": "مبلغ الخدمة", + "youNeedStoragePermissionFiles": "تحتاج إلى منح إذن التخزين لاختيار الملفات.", + "settingDeniedPermanently": "تم رفض هذا الإذن بشكل دائم، يرجى الذهاب إلى الإعدادات والسماح.", + "openAppSetting": "افتح إعدادات التطبيق", + "adDuration": "مدة الإعلان", + "startDate": "تاريخ البدء", + "contactDetails": "تفاصيل الاتصال", + "showyournumbertoBuyers": "هل تريد إظهار رقمك للمشترين؟", + "isNumberRegisteredWhatsApp": "هل هذا الرقم مسجل على واتساب؟", + "selectSpecialServices": "اختر الخدمات الخاصة", + "vehicleDetails": "تفاصيل المركبة", + "vehicleModel": "طراز المركبة", + "vehicleColor": "لون المركبة", + "vehicleCategory": "فئة المركبة", + "vehicleTransmission": "نقل المركبة", + "vehicleCountry": "بلد المركبة", + "vehicleAmount": "مبلغ المركبة", + "vehicleTitle": "عنوان المركبة", + "financeAvailable": "التمويل متاح", + "vehiclePictures": "صور المركبة", + "vehiclePart": "جزء المركبة", + "damagePartPictures": "صور الأجزاء المتضررة", + "vehicleDamagePart": "جزء المركبة المتضرر", + "duration": "المدة", + "specialServices": "الخدمات الخاصة", + "specialService": "خدمة خاصة", + "adContactDetails": "تفاصيل الاتصال بالإعلان", + "onWhatsAp": "على واتساب", + "reserveAdPriceInfo": "معلومات سعر الإعلان المحجوز", + "addDamagePart": "إضافة جزء متضرر", + "vehicleType": "نوع المركبة", + "vehicleYear": "سنة المركبة", + "vehicleCondition": "حالة المركبة", + "vehicleMileage": "عدد الأميال للمركبة", + "sellerType": "نوع البائع", + "vehicleCity": "مدينة المركبة", + "vehicleVIN": "رقم تعريف المركبة (VIN)", + "warrantyAvailable": "الضمان متاح", + "years": "سنوات", + "vehicleDetail": "تفاصيل المركبة", + "vehicleBrand": "ماركة المركبة", + "vehicleModelYear": "سنة طراز المركبة", + "vehicleSellerType": "نوع بائع المركبة", + "demandAmount": "المبلغ المطلوب", + "warrantyAvailableYears": "الضمان متاح (عدد السنوات)", + "vehicleDescription": "وصف المركبة", + "attachImage": "إرفاق صورة" }; static const Map en_US = { "firstTimeLogIn": "First Time Log In", @@ -580,7 +651,78 @@ static const Map en_US = { "pleaseSelectStartTime": "Please select start time", "pleaseSelectEndTime": "Please select end time", "pleaseSelectSlotTime": "Please select slot time", - "pleaseSelectAppointmentPerSlot": "Please select appointment per slot" + "pleaseSelectAppointmentPerSlot": "Please select appointment per slot", + "exploreAds": "Explore Ads", + "myAds": "My Ads", + "noAppointmentstoShow": "No Appointments to show", + "myRecommendedAds": "My Recommended Ads", + "model": "Model", + "chooseImageSource": "Choose image source", + "camera": "Camera", + "gallery": "Gallery", + "imageIsDeleted": "Image is Deleted", + "myRequests": "My Requests", + "branchDetail": "Branch Detail", + "time": "Time", + "openMapLocation": "Open Map Location", + "providerProfile": "Provider Profile", + "servicesOffer": "Services Offer", + "noServicesAvailable": "No Services Available", + "bookAppointment": "Book Appointment", + "allowingHomeService": "Allowing home service", + "homeServiceRange": "Home service range", + "chargesPerKM": "Charges per KM", + "providerDetails": "Provider Details", + "someDescriptionExperienceandtheirReputation": "Some description about the provider and their years of experience and their reputation", + "availableforAppointment": "Available for appointment", + "allowingWorkshopService": "Allowing Workshop service", + "serviceAmount": "Service Amount", + "youNeedStoragePermissionFiles.": "You need to give storage permission to select files.", + "settingDeniedPermanently": "This permission was denied permanently, Please go to settings and allow. ", + "openAppSetting": "Open App Setting", + "adDuration": "Ad Duration", + "startDate": "Start Date", + "contactDetails": "Contact Details", + "showyournumbertoBuyers": "Do you want to show your number to the buyers?", + "isNumberRegisteredWhatsApp": "Is this number registered on WhatsApp?", + "selectSpecialServices": "Select Special Services", + "vehicleDetails": "Vehicle Details", + "vehicleModel": "Vehicle Model", + "vehicleColor": "Vehicle Color", + "vehicleCategory": "Vehicle Category", + "vehicleTransmission": "Vehicle Transmission", + "vehicleCountry": "Vehicle Country", + "vehicleAmount": "Vehicle Amount", + "vehicleTitle": "Vehicle Title", + "financeAvailable": "Finance Available", + "vehiclePictures": "Vehicle Pictures", + "vehiclePart": "Vehicle Part", + "damagePartPictures": "Damage Part Pictures", + "vehicleDamagePart": "Vehicle Damage Part", + "duration": "Duration", + "specialServices": "Special Services", + "specialService": "Special Service", + "adContactDetails": "Ad Contact Details", + "onWhatsAp": "On WhatsAp", + "reserveAdPriceInfo": "Reserve Ad Price Info", + "addDamagePart": "Add Damage Part", + "vehicleType": "Vehicle Type", + "vehicleYear": "Vehicle Year", + "vehicleCondition": "Vehicle Condition", + "vehicleMileage": "Vehicle Mileage", + "sellerType": "Seller Type", + "vehicleCity": "Vehicle City", + "vehicleVIN": "Vehicle VIN", + "warrantyAvailable": "Warranty Available", + "years": "Years", + "vehicleDetail": "Vehicle Detail", + "vehicleBrand": "Vehicle Brand", + "vehicleModelYear": "Vehicle Model Year", + "vehicleSellerType": "Vehicle Seller Type", + "demandAmount": "Demand Amount", + "warrantyAvailableYears": "Warranty Available (No. of Years)", + "vehicleDescription": "Vehicle Description", + "attachImage": "Attach Image" }; static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; } diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 3ea9e9c..915960d 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -261,5 +261,76 @@ abstract class LocaleKeys { static const pleaseSelectEndTime = 'pleaseSelectEndTime'; static const pleaseSelectSlotTime = 'pleaseSelectSlotTime'; static const pleaseSelectAppointmentPerSlot = 'pleaseSelectAppointmentPerSlot'; + static const exploreAds = 'exploreAds'; + static const myAds = 'myAds'; + static const noAppointmentstoShow = 'noAppointmentstoShow'; + static const myRecommendedAds = 'myRecommendedAds'; + static const model = 'model'; + static const chooseImageSource = 'chooseImageSource'; + static const camera = 'camera'; + static const gallery = 'gallery'; + static const imageIsDeleted = 'imageIsDeleted'; + static const myRequests = 'myRequests'; + static const branchDetail = 'branchDetail'; + static const time = 'time'; + static const openMapLocation = 'openMapLocation'; + static const providerProfile = 'providerProfile'; + static const servicesOffer = 'servicesOffer'; + static const noServicesAvailable = 'noServicesAvailable'; + static const bookAppointment = 'bookAppointment'; + static const allowingHomeService = 'allowingHomeService'; + static const homeServiceRange = 'homeServiceRange'; + static const chargesPerKM = 'chargesPerKM'; + static const providerDetails = 'providerDetails'; + static const someDescriptionExperienceandtheirReputation = 'someDescriptionExperienceandtheirReputation'; + static const availableforAppointment = 'availableforAppointment'; + static const allowingWorkshopService = 'allowingWorkshopService'; + static const serviceAmount = 'serviceAmount'; + static const youNeedStoragePermissionFiles = 'youNeedStoragePermissionFiles'; + static const settingDeniedPermanently = 'settingDeniedPermanently'; + static const openAppSetting = 'openAppSetting'; + static const adDuration = 'adDuration'; + static const startDate = 'startDate'; + static const contactDetails = 'contactDetails'; + static const showyournumbertoBuyers = 'showyournumbertoBuyers'; + static const isNumberRegisteredWhatsApp = 'isNumberRegisteredWhatsApp'; + static const selectSpecialServices = 'selectSpecialServices'; + static const vehicleDetails = 'vehicleDetails'; + static const vehicleModel = 'vehicleModel'; + static const vehicleColor = 'vehicleColor'; + static const vehicleCategory = 'vehicleCategory'; + static const vehicleTransmission = 'vehicleTransmission'; + static const vehicleCountry = 'vehicleCountry'; + static const vehicleAmount = 'vehicleAmount'; + static const vehicleTitle = 'vehicleTitle'; + static const financeAvailable = 'financeAvailable'; + static const vehiclePictures = 'vehiclePictures'; + static const vehiclePart = 'vehiclePart'; + static const damagePartPictures = 'damagePartPictures'; + static const vehicleDamagePart = 'vehicleDamagePart'; + static const duration = 'duration'; + static const specialServices = 'specialServices'; + static const specialService = 'specialService'; + static const adContactDetails = 'adContactDetails'; + static const onWhatsAp = 'onWhatsAp'; + static const reserveAdPriceInfo = 'reserveAdPriceInfo'; + static const addDamagePart = 'addDamagePart'; + static const vehicleType = 'vehicleType'; + static const vehicleYear = 'vehicleYear'; + static const vehicleCondition = 'vehicleCondition'; + static const vehicleMileage = 'vehicleMileage'; + static const sellerType = 'sellerType'; + static const vehicleCity = 'vehicleCity'; + static const vehicleVIN = 'vehicleVIN'; + static const warrantyAvailable = 'warrantyAvailable'; + static const years = 'years'; + static const vehicleDetail = 'vehicleDetail'; + static const vehicleBrand = 'vehicleBrand'; + static const vehicleModelYear = 'vehicleModelYear'; + static const vehicleSellerType = 'vehicleSellerType'; + static const demandAmount = 'demandAmount'; + static const warrantyAvailableYears = 'warrantyAvailableYears'; + static const vehicleDescription = 'vehicleDescription'; + static const attachImage = 'attachImage'; } diff --git a/lib/main.dart b/lib/main.dart index 58e8deb..67dd452 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -52,7 +52,10 @@ Future main() async { } // todo terminal command to genertate translation files -// flutter pub run easy_localization:generate -S resources -f keys -O lib/generated -o locale_keys.g.dart +// flutter pub run easy_localization:generate --source-dir ./assets/langs +// todo terminal command to genertate translation keys +// flutter pub run easy_localization:generate --source-dir ./assets/langs -f keys -o locale_keys.g.dart +// command to generate languages data from json class MyApp extends StatelessWidget { const MyApp({super.key}); diff --git a/lib/utils/app_permission_handler.dart b/lib/utils/app_permission_handler.dart index a4e6150..56ebea8 100644 --- a/lib/utils/app_permission_handler.dart +++ b/lib/utils/app_permission_handler.dart @@ -1,8 +1,9 @@ import 'dart:developer'; import 'dart:io'; - +import 'package:easy_localization/easy_localization.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/material.dart'; +import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/widgets/common_widgets/confirm_dialog.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -22,7 +23,7 @@ Future requestPermissionGranted(context, Permission requestPermissions) as // Application has been denied permission to use the feature. return false; case PermissionStatus.permanentlyDenied: - ConfirmAction? res = await showConfirmDialogs(context, 'This permission was denied permanently, Please go to settings and allow. ', 'Open App Setting', 'Cancel'); + ConfirmAction? res = await showConfirmDialogs(context, LocaleKeys.settingDeniedPermanently.tr(), LocaleKeys.openAppSetting.tr(), LocaleKeys.cancel.tr()); if (res == ConfirmAction.ACCEPT) { return false; } else if (res == ConfirmAction.CANCEL) { @@ -64,7 +65,7 @@ class AppPermissions { return showDialog( context: context, builder: (BuildContext cxt) => ConfirmDialog( - message: "You need to give storage permission to select files.", + message: LocaleKeys.youNeedStoragePermissionFiles.tr(), onTap: () { Navigator.pop(context); openAppSettings(); diff --git a/lib/views/advertisement/ad_creation_steps/ad_duration_container.dart b/lib/views/advertisement/ad_creation_steps/ad_duration_container.dart index ce9854e..619d3b7 100644 --- a/lib/views/advertisement/ad_creation_steps/ad_duration_container.dart +++ b/lib/views/advertisement/ad_creation_steps/ad_duration_container.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/models/general_models/widgets_models.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/utils.dart'; @@ -11,10 +12,10 @@ import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/views/advertisement/bottom_sheet_content.dart'; import 'package:mc_common_app/views/advertisement/custom_add_button.dart'; import 'package:mc_common_app/widgets/common_widgets/info_bottom_sheet.dart'; -import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:provider/provider.dart'; +import 'package:easy_localization/easy_localization.dart'; class AdDuration extends StatelessWidget { const AdDuration({Key? key}) : super(key: key); @@ -36,7 +37,7 @@ class AdDuration extends StatelessWidget { enableDrag: true, builder: (BuildContext context) { return InfoBottomSheet( - title: "Reserve Ad Price Info".toText(fontSize: 24, isBold: true), + title: LocaleKeys.reserveAdPriceInfo.tr().toText(fontSize: 24, isBold: true), description: Flexible( child: GlobalConsts.reserveAdPriceInfo.toText( textAlign: TextAlign.justify, @@ -58,13 +59,13 @@ class AdDuration extends StatelessWidget { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Ad Duration".toText(fontSize: 18, isBold: true), + LocaleKeys.adDuration.tr().toText(fontSize: 18, isBold: true), 8.height, TxtField( isBackgroundEnabled: true, isButtonEnable: false, isNeedBorder: false, - hint: 'Ad Duration', + hint: LocaleKeys.adDuration.tr(), value: adVM.vehicleAdDurationId.selectedOption, isNeedClickAll: true, postFixDataColor: MyColors.darkTextColor, @@ -90,7 +91,7 @@ class AdDuration extends StatelessWidget { TxtField( errorValue: adVM.adStartDateError, - hint: 'Start Date', + hint: LocaleKeys.startDate.tr(), value: adVM.selectionDurationStartDate, isNeedClickAll: true, postfixData: Icons.calendar_month_rounded, @@ -137,9 +138,9 @@ class AdDuration extends StatelessWidget { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Contact Details".toText(fontSize: 18, isBold: true), + LocaleKeys.contactDetails.tr().toText(fontSize: 18, isBold: true), 8.height, - "Do you want to show your number to the buyers?".toText(fontSize: 14), + LocaleKeys.showyournumbertoBuyers.tr().toText(fontSize: 14), 6.height, Container( width: 38, @@ -212,7 +213,7 @@ class AdDuration extends StatelessWidget { ), ), const SizedBox(width: 10), - "Is this number registered on WhatsApp?".toString().toText() + LocaleKeys.isNumberRegisteredWhatsApp.tr().toString().toText() ], ), ], @@ -221,7 +222,7 @@ class AdDuration extends StatelessWidget { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Select Special Services".toText(fontSize: 18, isBold: true), + LocaleKeys.selectSpecialServices.tr().toText(fontSize: 18, isBold: true), 8.height, CustomAddButton( needsBorder: true, @@ -229,7 +230,7 @@ class AdDuration extends StatelessWidget { onTap: () { onAddServiceButtonTapped(context, adVM); }, - text: "Add Service", + text: LocaleKeys.addService.tr(), icon: Container( height: 24, width: 24, @@ -282,7 +283,7 @@ class AdDuration extends StatelessWidget { Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Description: ".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), + (LocaleKeys.description.tr() + ": ").toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), (specialServicesCard.description ?? "").toText(fontSize: 12, isBold: true).expand(), ], ), @@ -323,7 +324,7 @@ class AdDuration extends StatelessWidget { children: [ (specialServicesCard.serviceSelectedId!.itemPrice).toText(fontSize: 20, isBold: true), 2.width, - "SAR".toText(color: MyColors.lightTextColor, fontSize: 14), + LocaleKeys.sar.tr().toText(color: MyColors.lightTextColor, fontSize: 14), ], ), ], diff --git a/lib/views/advertisement/ad_creation_steps/ad_review_containers.dart b/lib/views/advertisement/ad_creation_steps/ad_review_containers.dart index d3f2c84..1c9107d 100644 --- a/lib/views/advertisement/ad_creation_steps/ad_review_containers.dart +++ b/lib/views/advertisement/ad_creation_steps/ad_review_containers.dart @@ -1,11 +1,13 @@ import 'package:flutter/material.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/views/advertisement/picked_images_container.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; +import 'package:easy_localization/easy_localization.dart'; class ReviewAd extends StatelessWidget { const ReviewAd({Key? key}) : super(key: key); @@ -52,7 +54,7 @@ class VehicleDetailsReview extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Vehicle Details".toText(fontSize: 18, isBold: true), + LocaleKeys.vehicleDetails.tr().toText(fontSize: 18, isBold: true), 8.height, Row( mainAxisAlignment: MainAxisAlignment.start, @@ -62,21 +64,21 @@ class VehicleDetailsReview extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SingleDetailWidget(text: adVM.vehicleTypeId.selectedOption, type: "Vehicle Type"), + SingleDetailWidget(text: adVM.vehicleTypeId.selectedOption, type: LocaleKeys.vehicleType.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleModelYearId.selectedOption, type: "Vehicle Year"), + SingleDetailWidget(text: adVM.vehicleModelYearId.selectedOption, type: LocaleKeys.vehicleYear.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleConditionId.selectedOption, type: "Vehicle Condition"), + SingleDetailWidget(text: adVM.vehicleConditionId.selectedOption, type: LocaleKeys.vehicleCondition.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleMileageId.selectedOption, type: "Vehicle Mileage"), + SingleDetailWidget(text: adVM.vehicleMileageId.selectedOption, type: LocaleKeys.vehicleMileage.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleSellerTypeId.selectedOption, type: "Seller Type"), + SingleDetailWidget(text: adVM.vehicleSellerTypeId.selectedOption, type: LocaleKeys.sellerType.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleCityId.selectedOption, type: "Vehicle City"), + SingleDetailWidget(text: adVM.vehicleCityId.selectedOption, type: LocaleKeys.vehicleCity.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleVin, type: "Vehicle VIN"), + SingleDetailWidget(text: adVM.vehicleVin, type: LocaleKeys.vehicleVIN.tr()), 16.height, - SingleDetailWidget(text: "${adVM.warrantyDuration} Years", type: "Warranty Available"), + SingleDetailWidget(text: ("${adVM.warrantyDuration} "+ LocaleKeys.years.tr()), type: LocaleKeys.warrantyAvailable.tr()), 16.height, ], ), @@ -86,30 +88,30 @@ class VehicleDetailsReview extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SingleDetailWidget(text: adVM.vehicleModelId.selectedOption, type: "Vehicle Model"), + SingleDetailWidget(text: adVM.vehicleModelId.selectedOption, type: LocaleKeys.vehicleModel.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleColorId.selectedOption, type: "Vehicle Color"), + SingleDetailWidget(text: adVM.vehicleColorId.selectedOption, type: LocaleKeys.vehicleColor.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleCategoryId.selectedOption, type: "Vehicle Category"), + SingleDetailWidget(text: adVM.vehicleCategoryId.selectedOption, type: LocaleKeys.vehicleCategory.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleTransmissionId.selectedOption, type: "Vehicle Transmission"), + SingleDetailWidget(text: adVM.vehicleTransmissionId.selectedOption, type: LocaleKeys.vehicleTransmission.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleCountryId.selectedOption, type: "Vehicle Country"), + SingleDetailWidget(text: adVM.vehicleCountryId.selectedOption, type: LocaleKeys.vehicleCountry.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleDemandAmount, type: "Vehicle Amount"), + SingleDetailWidget(text: adVM.vehicleDemandAmount, type: LocaleKeys.vehicleAmount.tr()), 16.height, - SingleDetailWidget(text: adVM.vehicleTitle, type: "Vehicle Title"), + SingleDetailWidget(text: adVM.vehicleTitle, type: LocaleKeys.vehicleTitle.tr()), 16.height, - SingleDetailWidget(text: adVM.financeAvailableStatus ? "Yes" : "No", type: "Finance Available"), + SingleDetailWidget(text: adVM.financeAvailableStatus ? "Yes" : "No", type: LocaleKeys.financeAvailable.tr()), 16.height, ], ), ), ], ), - SingleDetailWidget(text: adVM.vehicleDescription, type: "Description"), + SingleDetailWidget(text: adVM.vehicleDescription, type: LocaleKeys.description.tr()), 8.height, - "Vehicle Pictures:".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), + (LocaleKeys.vehiclePictures.tr() + ":").toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), if (adVM.pickedPostingImages.isNotEmpty) ...[ // 10.height, PickedFilesContainer( @@ -136,11 +138,11 @@ class DamagePartsReview extends StatelessWidget { 8.height, Row( children: [ - SingleDetailWidget(type: "Vehicle Part", text: adVM.vehicleDamageCards[index].partSelectedId!.selectedOption), + SingleDetailWidget(type: LocaleKeys.vehiclePart.tr(), text: adVM.vehicleDamageCards[index].partSelectedId!.selectedOption), ], ), if (adVM.vehicleDamageCards[index].partImages != null && adVM.vehicleDamageCards[index].partImages!.isNotEmpty) ...[ - "Damage Part Pictures:".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), + (LocaleKeys.damagePartPictures.tr() + ":").toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), PickedFilesContainer( pickedFiles: adVM.vehicleDamageCards[index].partImages!, onCrossPressedPrimary: adVM.removeImageFromList, @@ -166,7 +168,7 @@ class DamagePartsReview extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Vehicle Damage Part".toText(fontSize: 18, isBold: true), + LocaleKeys.vehicleDamagePart.tr().toText(fontSize: 18, isBold: true), buildDamagePartList(adVM), ], ).toWhiteContainer(width: double.infinity, allPading: 12, margin: const EdgeInsets.symmetric(horizontal: 21, vertical: 4)); @@ -183,17 +185,17 @@ class AdDurationReview extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Ad Duration".toText(fontSize: 18, isBold: true), + LocaleKeys.adDuration.tr().toText(fontSize: 18, isBold: true), 8.height, Row( children: [ Expanded( flex: 7, - child: SingleDetailWidget(type: "Duration", text: adVM.vehicleAdDurationId.selectedOption), + child: SingleDetailWidget(type: LocaleKeys.duration.tr(), text: adVM.vehicleAdDurationId.selectedOption), ), Expanded( flex: 5, - child: SingleDetailWidget(type: "Start Date", text: adVM.selectionDurationStartDate), + child: SingleDetailWidget(type: LocaleKeys.startDate.tr(), text: adVM.selectionDurationStartDate), ), ], ), @@ -216,7 +218,7 @@ class AdDurationReview extends StatelessWidget { // ), if (adVM.specialServiceCards.isNotEmpty) ...[ 15.height, - "Special Services".toText(fontSize: 18, isBold: true), + LocaleKeys.specialServices.tr().toText(fontSize: 18, isBold: true), ListView.separated( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, @@ -234,7 +236,7 @@ class AdDurationReview extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SingleDetailWidget(type: "Special Service", text: adVM.specialServiceCards[index].serviceSelectedId!.selectedOption), + SingleDetailWidget(type: LocaleKeys.specialService.tr(), text: adVM.specialServiceCards[index].serviceSelectedId!.selectedOption), ], ), ), @@ -243,7 +245,7 @@ class AdDurationReview extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SingleDetailWidget(type: "Amount", text: adVM.specialServiceCards[index].serviceSelectedId!.itemPrice), + SingleDetailWidget(type: LocaleKeys.amount.tr(), text: adVM.specialServiceCards[index].serviceSelectedId!.itemPrice), ], ), ), @@ -296,17 +298,17 @@ class AdContactDetailsReview extends StatelessWidget { ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Ad Contact Details".toText(fontSize: 18, isBold: true), + LocaleKeys.adContactDetails.tr().toText(fontSize: 18, isBold: true), 8.height, Row( children: [ Expanded( flex: 7, - child: SingleDetailWidget(type: "Phone Number", text: "${adVM.adPhoneNumberDialCode}${adVM.adPhoneNumber}"), + child: SingleDetailWidget(type: LocaleKeys.phoneNumber.tr(), text: "${adVM.adPhoneNumberDialCode}${adVM.adPhoneNumber}"), ), Expanded( flex: 5, - child: SingleDetailWidget(type: "On WhatsApp", text: adVM.isNumberOnWhatsApp ? "Yes" : "No"), + child: SingleDetailWidget(type: LocaleKeys.onWhatsAp.tr(), text: adVM.isNumberOnWhatsApp ? "Yes" : "No"), ), ], ), diff --git a/lib/views/advertisement/ad_creation_steps/damage_parts_container.dart b/lib/views/advertisement/ad_creation_steps/damage_parts_container.dart index b9b3ea3..dbd070a 100644 --- a/lib/views/advertisement/ad_creation_steps/damage_parts_container.dart +++ b/lib/views/advertisement/ad_creation_steps/damage_parts_container.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/views/advertisement/bottom_sheet_content.dart'; @@ -10,6 +11,7 @@ import 'package:mc_common_app/views/advertisement/network_images_container.dart' import 'package:mc_common_app/views/advertisement/picked_images_container.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; +import 'package:easy_localization/easy_localization.dart'; class DamageParts extends StatelessWidget { const DamageParts({Key? key}) : super(key: key); @@ -47,7 +49,7 @@ class DamageParts extends StatelessWidget { onTap: () { onAddButtonTapped(context, adVM); }, - text: "Add Damage Part", + text: LocaleKeys.addDamagePart.tr(), icon: Container( height: 24, width: 24, diff --git a/lib/views/advertisement/ad_creation_steps/vehicle_details_container.dart b/lib/views/advertisement/ad_creation_steps/vehicle_details_container.dart index e462ecb..1f4cc29 100644 --- a/lib/views/advertisement/ad_creation_steps/vehicle_details_container.dart +++ b/lib/views/advertisement/ad_creation_steps/vehicle_details_container.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/models/general_models/widgets_models.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart'; @@ -13,6 +14,7 @@ import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:provider/provider.dart'; +import 'package:easy_localization/easy_localization.dart'; class VehicleDetails extends StatelessWidget { const VehicleDetails({Key? key}) : super(key: key); @@ -23,7 +25,7 @@ class VehicleDetails extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Vehicle Detail".toText(fontSize: 18, isBold: true), + LocaleKeys.vehicleDetail.tr().toText(fontSize: 18, isBold: true), 8.height, Builder(builder: (context) { List vehicleBrandsDrop = []; @@ -34,7 +36,7 @@ class VehicleDetails extends StatelessWidget { (DropValue value) => adVM.updateSelectionVehicleBrandId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleBrandsDrop, dropdownValue: adVM.vehicleBrandId.selectedId != -1 ? DropValue(adVM.vehicleBrandId.selectedId, adVM.vehicleBrandId.selectedOption, "") : null, - hint: "Vehicle Brand", + hint: LocaleKeys.vehicleBrand.tr(), errorValue: adVM.vehicleBrandId.errorValue, ); }), @@ -57,7 +59,7 @@ class VehicleDetails extends StatelessWidget { (DropValue value) => adVM.updateSelectionVehicleModelId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleModelsDrop, dropdownValue: adVM.vehicleModelId.selectedId != -1 ? DropValue(adVM.vehicleModelId.selectedId, adVM.vehicleModelId.selectedOption, "") : null, - hint: "Vehicle Model", + hint: LocaleKeys.vehicleModel.tr(), errorValue: adVM.vehicleModelId.errorValue, ); }), @@ -72,7 +74,7 @@ class VehicleDetails extends StatelessWidget { (DropValue value) => adVM.updateSelectionVehicleModelYearId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleYearModelsDrop, dropdownValue: adVM.vehicleModelYearId.selectedId != -1 ? DropValue(adVM.vehicleModelYearId.selectedId, adVM.vehicleModelYearId.selectedOption, "") : null, - hint: "Vehicle Model Year", + hint: LocaleKeys.vehicleModelYear.tr(), errorValue: adVM.vehicleModelYearId.errorValue, ); }), @@ -85,7 +87,7 @@ class VehicleDetails extends StatelessWidget { return DropdownField( (DropValue value) => adVM.updateSelectionVehicleColorId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleColorsDrop, - hint: "Vehicle Color", + hint: LocaleKeys.vehicleColor.tr(), dropdownValue: adVM.vehicleColorId.selectedId != -1 ? DropValue(adVM.vehicleColorId.selectedId, adVM.vehicleColorId.selectedOption, "") : null, errorValue: adVM.vehicleColorId.errorValue, ); @@ -100,7 +102,7 @@ class VehicleDetails extends StatelessWidget { (DropValue value) => adVM.updateSelectionVehicleConditionId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleConditionsDrop, dropdownValue: adVM.vehicleConditionId.selectedId != -1 ? DropValue(adVM.vehicleConditionId.selectedId, adVM.vehicleConditionId.selectedOption, "") : null, - hint: "Vehicle Condition", + hint: LocaleKeys.vehicleCondition.tr(), errorValue: adVM.vehicleConditionId.errorValue, ); }), @@ -113,7 +115,7 @@ class VehicleDetails extends StatelessWidget { return DropdownField( (DropValue value) => adVM.updateSelectionVehicleCategoryId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleCategoriesDrop, - hint: "Vehicle Category", + hint: LocaleKeys.vehicleCategory.tr(), dropdownValue: adVM.vehicleCategoryId.selectedId != -1 ? DropValue(adVM.vehicleCategoryId.selectedId, adVM.vehicleCategoryId.selectedOption, "") : null, errorValue: adVM.vehicleCategoryId.errorValue, ); @@ -128,7 +130,7 @@ class VehicleDetails extends StatelessWidget { (DropValue value) => adVM.updateSelectionVehicleMileageId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleMileageDrop, dropdownValue: adVM.vehicleMileageId.selectedId != -1 ? DropValue(adVM.vehicleMileageId.selectedId, adVM.vehicleMileageId.selectedOption, "") : null, - hint: "Vehicle Mileage", + hint: LocaleKeys.vehicleMileage.tr(), errorValue: adVM.vehicleMileageId.errorValue, ); }), @@ -141,7 +143,7 @@ class VehicleDetails extends StatelessWidget { return DropdownField( (DropValue value) => adVM.updateSelectionVehicleTransmissionId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleTransmissionsDrop, - hint: "Vehicle Transmission", + hint: LocaleKeys.vehicleTransmission.tr(), dropdownValue: adVM.vehicleTransmissionId.selectedId != -1 ? DropValue(adVM.vehicleTransmissionId.selectedId, adVM.vehicleTransmissionId.selectedOption, "") : null, errorValue: adVM.vehicleTransmissionId.errorValue, ); @@ -156,7 +158,7 @@ class VehicleDetails extends StatelessWidget { (DropValue value) => adVM.updateSelectionVehicleSellerTypeId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleSellerTypesDrop, dropdownValue: adVM.vehicleSellerTypeId.selectedId != -1 ? DropValue(adVM.vehicleSellerTypeId.selectedId, adVM.vehicleSellerTypeId.selectedOption, "") : null, - hint: "Vehicle Seller Type", + hint: LocaleKeys.vehicleSellerType.tr(), errorValue: adVM.vehicleSellerTypeId.errorValue, ); }), @@ -170,7 +172,7 @@ class VehicleDetails extends StatelessWidget { (DropValue value) => adVM.updateSelectionVehicleCountryId(SelectionModel(selectedOption: value.value, selectedId: value.id)), list: vehicleCountriesDrop, dropdownValue: adVM.vehicleCountryId.selectedId != -1 ? DropValue(adVM.vehicleCountryId.selectedId, adVM.vehicleCountryId.selectedOption, "") : null, - hint: "Vehicle Country", + hint: LocaleKeys.vehicleCountry.tr(), errorValue: adVM.vehicleCountryId.errorValue, ); }), @@ -191,7 +193,7 @@ class VehicleDetails extends StatelessWidget { (DropValue value) => adVM.updateSelectionVehicleCityId(SelectionModel(selectedId: value.id, selectedOption: value.value)), list: vehicleCitiesDrop, dropdownValue: adVM.vehicleCityId.selectedId != -1 ? DropValue(adVM.vehicleCityId.selectedId, adVM.vehicleCityId.selectedOption, "") : null, - hint: "Vehicle City", + hint: LocaleKeys.vehicleCity.tr(), errorValue: adVM.vehicleCityId.errorValue, ); }), @@ -202,7 +204,7 @@ class VehicleDetails extends StatelessWidget { value: adVM.vehicleDemandAmount, errorValue: adVM.demandAmountError, keyboardType: TextInputType.number, - hint: "Demand Amount", + hint: LocaleKeys.demandAmount.tr(), onChanged: (v) => adVM.updateVehicleDemandAmount(v), ), 8.height, @@ -210,14 +212,14 @@ class VehicleDetails extends StatelessWidget { value: adVM.vehicleVin, errorValue: adVM.vehicleVinError, keyboardType: TextInputType.number, - hint: "Vehicle VIN", + hint: LocaleKeys.vehicleVIN.tr(), onChanged: (v) => adVM.updateVehicleVin(v), ), 8.height, TxtField( value: adVM.vehicleTitle, errorValue: adVM.vehicleTitleError, - hint: "Vehicle Title", + hint: LocaleKeys.vehicleTitle.tr(), onChanged: (v) => adVM.updateVehicleTitle(v), ), 8.height, @@ -225,19 +227,19 @@ class VehicleDetails extends StatelessWidget { value: adVM.warrantyDuration, errorValue: adVM.warrantyError, keyboardType: TextInputType.number, - hint: "Warranty Available (No. of Years)", + hint: LocaleKeys.warrantyAvailableYears.tr(), onChanged: (v) => adVM.updateVehicleWarrantyDuration(v), ), 8.height, TxtField( value: adVM.vehicleDescription, - hint: "Vehicle Description", + hint: LocaleKeys.vehicleDescription.tr(), maxLines: 5, errorValue: adVM.vehicleDescError, onChanged: (v) => adVM.updateVehicleDescription(v), ), 22.height, - "Finance Available".toText(fontSize: 16), + LocaleKeys.financeAvailable.tr().toText(fontSize: 16), 8.height, Container( width: 50, @@ -261,11 +263,11 @@ class VehicleDetails extends StatelessWidget { ), ), 28.height, - "Vehicle Pictures".toText(fontSize: 18, isBold: true), + LocaleKeys.vehiclePictures.tr().toText(fontSize: 18, isBold: true), 8.height, DottedRectContainer( onTap: () => context.read().pickMultipleImages(), - text: "Attach Image", + text: LocaleKeys.attachImage.tr(), icon: MyAssets.attachmentIcon.buildSvg(), ), if (adVM.vehicleImageError != "") ...[