diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index b8fc7eb..ee6ac33 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -877,5 +877,137 @@ "walkin": "زيارة بدون موعد", "laserClinic": "عيادة الليزر", "continueString": "يكمل", - "covid_info": "تجري مستشفيات د. سليمان الحبيب فحص فيروس كورونا المستجد وتصدر شهادات السفر على مدار الساعة، طوال أيام الأسبوع، وبسرعة ودقة عالية. يمكن للراغبين في الاستفادة من هذه الخدمة زيارة أحد فروع مستشفيات د. سليمان الحبيب وإجراء فحص كورونا خلال بضع دقائق والحصول على النتائج خلال عدة ساعات خدمة فحص فيروس كورونا Covid 19 بتقنية PCR للكشف عن الفيروس وفقاً لأعلى المعايير العالمية وبأحدث أجهزة RT-PCR عالية الدقة (GeneXpert الأمريكي وغيره)، وهي طرق معتمدة من قبل هيئة الغذاء والدواء وكذلك من قبل المركز السعودي للوقاية من الأمراض المُعدية" + "covid_info": "تجري مستشفيات د. سليمان الحبيب فحص فيروس كورونا المستجد وتصدر شهادات السفر على مدار الساعة، طوال أيام الأسبوع، وبسرعة ودقة عالية. يمكن للراغبين في الاستفادة من هذه الخدمة زيارة أحد فروع مستشفيات د. سليمان الحبيب وإجراء فحص كورونا خلال بضع دقائق والحصول على النتائج خلال عدة ساعات خدمة فحص فيروس كورونا Covid 19 بتقنية PCR للكشف عن الفيروس وفقاً لأعلى المعايير العالمية وبأحدث أجهزة RT-PCR عالية الدقة (GeneXpert الأمريكي وغيره)، وهي طرق معتمدة من قبل هيئة الغذاء والدواء وكذلك من قبل المركز السعودي للوقاية من الأمراض المُعدية", + + "appointmentDetails": "تفاصيل الموعد", + "checkingDoctorAvailability": "جاري التحقق من توفر الطبيب...", + "cancellingAppointmentPleaseWait": "جاري إلغاء الموعد، يرجى الانتظار...", + "appointmentCancelledSuccessfully": "تم إلغاء الموعد بنجاح", + "notConfirmed": "غير مؤكد", + "appointmentStatus": "حالة الموعد", + "doctorWillCallYou": "سيتصل بك الطبيب عندما يقترب موعدك.", + "getDirections": "الحصول على الاتجاهات", + "notifyMeBeforeAppointment": "أبلغني قبل الموعد", + "fetchingLabResults": "جاري جلب نتائج المختبر...", + "fetchingRadiologyResults": "جاري جلب نتائج الأشعة...", + "fetchingAppointmentPrescriptions": "جاري جلب وصفات الموعد...", + "noPrescriptionsForAppointment": "ليس لديك أي وصفات طبية لهذا الموعد.", + "amountBeforeTax": "المبلغ قبل الضريبة", + "rebookAppointment": "إعادة حجز الموعد", + "fetchingDoctorSchedulePleaseWait": "جاري جلب جدول الطبيب، يرجى الانتظار...", + "pickADate": "اختر تاريخاً", + "confirmingAppointmentPleaseWait": "جاري تأكيد الموعد، يرجى الانتظار...", + "appointmentConfirmedSuccessfully": "تم تأكيد الموعد بنجاح", + "appointmentPayment": "دفع الموعد", + "checkingPaymentStatusPleaseWait": "جاري التحقق من حالة الدفع، يرجى الانتظار...", + "paymentFailedPleaseTryAgain": "فشل الدفع! يرجى المحاولة مرة أخرى.", + "appointmentCheckIn": "تسجيل حضور الموعد", + "insuranceExpiredOrInactive": "التأمين منتهي الصلاحية أو غير نشط", + "totalAmountToPay": "المبلغ الإجمالي المستحق", + "vat15": "ضريبة القيمة المضافة 15%", + "general": "عام", + "liveCare": "لايف كير", + "recentVisits": "الزيارات الأخيرة", + "searchByClinic": "البحث حسب العيادة", + "tapToSelectClinic": "انقر لاختيار العيادة", + "searchByDoctor": "البحث حسب الطبيب", + "tapToSelect": "انقر للاختيار", + "searchByRegion": "البحث حسب المنطقة", + "centralRegion": "المنطقة الوسطى", + "immediateConsultation": "استشارة فورية", + "scheduledConsultation": "استشارة مجدولة", + "pharmaLiveCare": "لايف كير الصيدلية", + "notSureHelpMeChooseClinic": "غير متأكد؟ ساعدني في اختيار عيادة!", + "mentionYourSymptomsAndFindDoctors": "اذكر أعراضك واعثر على قائمة الأطباء وفقاً لذلك", + "immediateService": "خدمة فورية", + "noNeedToWaitGetMedicalConsultation": "لا حاجة للانتظار، ستحصل على استشارة طبية فورية عبر مكالمة فيديو", + "noVisitRequired": "لا حاجة للزيارة", + "doctorWillContact": "سيتصل بك الطبيب", + "specialisedDoctorWillContactYou": "سيتصل بك طبيب متخصص وسيكون قادراً على الاطلاع على تاريخك الطبي", + "freeMedicineDelivery": "توصيل مجاني للأدوية", + "offersFreeMedicineDelivery": "يوفر توصيل مجاني للأدوية لموعد لايف كير", + "dentalChiefComplaints": "الشكاوى الرئيسة للأسنان", + "viewAvailableAppointments": "عرض المواعيد المتاحة", + "doctorProfile": "الملف للطبيب", + "waitingAppointment": "موعد الانتظار", + "hospitalInformation": "معلومات المستشفى", + "fetchingAppointmentShare": "جاري جلب تفاصيل الموعد...", + "bookingYourAppointment": "جاري حجز موعدك...", + "selectLiveCareClinic": "اختر عيادة لايف كير", + "checkingForExistingDentalPlan": "جاري التحقق من وجود خطة أسنان حالية، يرجى الانتظار...", + "dentalTreatmentPlan": "خطة علاج الأسنان", + "youHaveExistingTreatmentPlan": "لديك خطة علاج حالية: ", + "mins": "دقيقة", + "totalTimeRequired": "إجمالي الوقت المطلوب", + "wouldYouLikeToContinue": "هل تريد متابعتها؟", + "chooseDoctor": "اختر الطبيب", + "viewNearestAppos": "عرض أقرب المواعيد المتاحة", + "noDoctorFound": "لم يتم العثور على طبيب مطابق للمعايير المحددة...", + "yesPleasImInAHurry": "نعم من فضلك، أنا في عجلة من أمري", + "fetchingFeesPleaseWait": "جاري جلب الرسوم، يرجى الانتظار...", + "noThanksPhysicalVisit": "لا، شكراً. أفضل الزيارة الشخصية", + "offline": "غير متصل", + "videoCall": "مكالمة فيديو", + "liveVideoCallWithHMGDoctors": "مكالمة فيديو مباشرة مع أطباء مجموعة الحبيب الطبية", + "audioCall": "مكالمة صوتية", + "phoneCall": "مكالمة هاتفية", + "livePhoneCallWithHMGDoctors": "مكالمة هاتفية مباشرة مع أطباء مجموعة الحبيب الطبية", + "reviewLiveCareRequest": "مراجعة طلب لايف كير", + "selectedLiveCareType": "نوع لايف كير المحدد", + "selectLiveCareCallType": "اختر نوع مكالمة لايف كير", + "confirmingLiveCareRequest": "جاري تأكيد طلب لايف كير، يرجى الانتظار...", + "unknownErrorOccurred": "حدث خطأ غير معروف...", + "liveCarePermissionsMessage": "يتطلب لايف كير أذونات الكاميرا والميكروفون والموقع والإشعارات لتمكين الاستشارة الافتراضية بين المريض والطبيب، يرجى السماح بهذه الأذونات للمتابعة.", + "liveCarePayment": "دفع لايف كير", + "mada": "مدى", + "visaOrMastercard": "فيزا أو ماستركارد", + "tamara": "تمارا", + "fetchingApplePayDetails": "جاري جلب تفاصيل Apple Pay، يرجى الانتظار...", + "liveCarePendingRequest": "لايف كير حية معلق", + "callLiveCareSupport": "اتصل بدعم لايف كير", + "whatIsWaitingAppointment": "ما هو موعد الانتظار؟", + "waitingAppointmentsFeature": "تتيح لك ميزة مواعيد الانتظار حجز موعد أثناء تواجدك داخل مبنى المستشفى، وفي حال عدم توفر فتحة متاحة في جدول الطبيب.", + "appointmentWithDoctorConfirmed": "الموعد مع الطبيب مؤكد، ولكن وقت الدخول غير محدد.", + "paymentWithinTenMinutes": "ملاحظة: يجب عليك الدفع خلال 10 دقائق من الحجز، وإلا سيتم إلغاء موعدك تلقائياً", + "liveLocation": "الموقع المباشر", + "verifyYourLocationAtHospital": "تحقق من موقعك في المستشفى لتسجيل الحضور", + "error": "خطأ", + "ensureWithinHospitalLocation": "يرجى التأكد من أنك داخل موقع المستشفى لإجراء تسجيل الحضور عبر الإنترنت.", + "nfcNearFieldCommunication": "NFC (الاتصال قريب المدى)", + "scanPhoneViaNFC": "امسح هاتفك عبر لوحة NFC لتسجيل الحضور", + "qrCode": "رمز QR", + "scanQRCodeToCheckIn": "امسح رمز QR بالكاميرا لتسجيل الحضور", + "processingCheckIn": "جاري معالجة تسجيل الحضور...", + "bookingWaitingAppointment": "جاري حجز موعد الانتظار، يرجى الانتظار...", + "enterValidIDorIqama": "يرجى إدخال رقم هوية وطنية أو رقم ملف صالح", + "selectAppointment": "حدد الموعد", + "rebookSameDoctor": "أعد الحجز مع نفس الطبيب", + "queueing": "قائمة الانتظار", + "inQueue": "في قائمة الانتظار", + "yourTurn": "دورك", + "halaFirstName": "هلا {firstName}!!!", + "thankYouForPatience": "شكراً لصبرك، هذا هو رقم قائمة الانتظار الخاص بك.", + "servingNow": "يُخدم الآن", + "callForVitalSigns": "نداء للعلامات الحيوية", + "callForDoctor": "نداء للطبيب", + "thingsToAskDoctor": "أشياء تسأل طبيبك عنها اليوم", + "improveOverallHealth": "ماذا يمكنني أن أفعل لتحسين صحتي العامة؟", + "routineScreenings": "هل هناك أي فحوصات روتينية يجب أن أجريها؟", + "whatIsThisMedicationFor": "لماذا هذا الدواء؟", + "sideEffectsToKnow": "هل هناك أي آثار جانبية يجب أن أعرفها؟", + "whenFollowUp": "متى يجب أن أعود للمتابعة؟", + "goToHomepage": "الذهاب إلى الصفحة الرئيسية", + "appointmentsList": "قائمة المواعيد", + "allAppt": "جميع المواعيد", + "upcoming": "القادمة", + "completed": "المكتملة", + "noAppointmentsYet": "ليس لديك أي مواعيد بعد.", + "viewProfile": "عرض الملف الشخصي", + "choosePreferredHospitalForService": "اختر المستشفى المفضل لديك للخدمة", + "noHospitalsFound": "لم يتم العثور على مستشفيات", + "cancelOrderConfirmation": "هل أنت متأكد أنك تريد إلغاء هذا الطلب؟", + "orderCancelledSuccessfully": "تم إلغاء الطلب بنجاح", + "requestID": "معرف الطلب:", + "noCMCOrdersYet": "ليس لديك أي طلبات فحص شامل بعد.", + "cmcOrders": "طلبات الفحص الشامل" } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 7839083..6244157 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -864,7 +864,7 @@ "endDate": "End Date", "hmgHospitals": "HMG Hospitals", "hmcMedicalClinic": "HMC Medical Centers", - "applyFilter": "AppLy Filter", + "applyFilter": "Apply Filter", "facilityAndLocation": "Facility and Location", "regionAndLocation": "Region And Locations", "clearAllFilters": "Clear all filters", @@ -873,5 +873,137 @@ "walkin": "Walk In", "continueString": "Continue", "laserClinic": "Laser Clinic", - "covid_info" :"Dr. Sulaiman Al Habib hospitals are conducting a test for the emerging corona virus and issuing travel certificates 24/7 in a short time and with high accuracy. Those wishing to benefit from this service can visit one of Dr. Sulaiman Al Habib branches to conduct a corona test within few minutes, and obtain the result within several hours. Corona Virus Covid 19 testing service with PCR technology to detect the virus according to the highest international standards and with the latest high-precision RT-PCR devices (American GeneXpert and others), That is approved by the Food and Drug Authority as well as by the Saudi Center for Infectious Diseases Prevention." + "covid_info" :"Dr. Sulaiman Al Habib hospitals are conducting a test for the emerging corona virus and issuing travel certificates 24/7 in a short time and with high accuracy. Those wishing to benefit from this service can visit one of Dr. Sulaiman Al Habib branches to conduct a corona test within few minutes, and obtain the result within several hours. Corona Virus Covid 19 testing service with PCR technology to detect the virus according to the highest international standards and with the latest high-precision RT-PCR devices (American GeneXpert and others), That is approved by the Food and Drug Authority as well as by the Saudi Center for Infectious Diseases Prevention.", + "appointmentDetails": "Appointment Details", + "checkingDoctorAvailability": "Checking doctor availability...", + "cancellingAppointmentPleaseWait": "Cancelling Appointment, Please Wait...", + "appointmentCancelledSuccessfully": "Appointment Cancelled Successfully", + "notConfirmed": "Not Confirmed", + "appointmentStatus": "Appointment Status", + "doctorWillCallYou": "The doctor will call you once the appointment time approaches.", + "getDirections": "Get Directions", + "notifyMeBeforeAppointment": "Notify me before the appointment", + "fetchingLabResults": "Fetching Lab Results...", + "fetchingRadiologyResults": "Fetching Radiology Results...", + "fetchingAppointmentPrescriptions": "Fetching Appointment Prescriptions...", + "noPrescriptionsForAppointment": "You don't have any prescriptions for this appointment.", + "amountBeforeTax": "Amount before tax", + "rebookAppointment": "Re-book Appointment", + "fetchingDoctorSchedulePleaseWait": "Fetching Doctor Schedule, Please Wait...", + "pickADate": "Pick a Date", + "confirmingAppointmentPleaseWait": "Confirming Appointment, Please Wait...", + "appointmentConfirmedSuccessfully": "Appointment Confirmed Successfully", + + "appointmentPayment": "Appointment Payment", + "checkingPaymentStatusPleaseWait": "Checking payment status, Please wait...", + "paymentFailedPleaseTryAgain": "Payment Failed! Please try again.", + "appointmentCheckIn": "Appointment check in", + "insuranceExpiredOrInactive": "Insurance expired or inactive", + "totalAmountToPay": "Total amount to pay", + "vat15": "VAT 15%", + "general": "General", + "liveCare": "LiveCare", + "recentVisits": "Recent Visits", + "searchByClinic": "Search By Clinic", + "tapToSelectClinic": "Tap to select clinic", + "searchByDoctor": "Search By Doctor", + "tapToSelect": "Tap to select", + "searchByRegion": "Search By Region", + "centralRegion": "Central Region", + "immediateConsultation": "Immediate Consultation", + "scheduledConsultation": "Scheduled Consultation", + "pharmaLiveCare": "Pharma LiveCare", + "notSureHelpMeChooseClinic": "Not sure? help me choose a clinic!", + "mentionYourSymptomsAndFindDoctors": "Mention your symptoms and find the list of doctors accordingly", + "immediateService": "Immediate service", + "noNeedToWaitGetMedicalConsultation": "No need to wait, you will get medical consultation immediately via video call", + "noVisitRequired": "No visit required", + "doctorWillContact": "Doctor will contact", + "specialisedDoctorWillContactYou": "A specialised doctor will contact you and will be able to view your medical history", + "freeMedicineDelivery": "Free medicine delivery", + "offersFreeMedicineDelivery": "Offers free medicine delivery for the LiveCare appointment", + "dentalChiefComplaints": "Dental Chief Complaints", + "viewAvailableAppointments": "View available appointments", + "doctorProfile": "Doctor Profile", + "waitingAppointment": "Waiting Appointment", + "hospitalInformation": "Hospital Information", + "fetchingAppointmentShare": "Fetching Appointment Share...", + "bookingYourAppointment": "Booking your appointment...", + "selectLiveCareClinic": "Select LiveCare Clinic", + "checkingForExistingDentalPlan": "Checking for an existing dental plan, Please wait...", + "dentalTreatmentPlan": "Dental treatment plan", + "youHaveExistingTreatmentPlan": "You have an existing treatment plan: ", + "mins": "Mins", + "totalTimeRequired": "Total time required", + "wouldYouLikeToContinue": "Would you like to continue it?", + "chooseDoctor": "Choose Doctor", + "viewNearestAppos": "View nearest available appointments", + "noDoctorFound": "No Doctor found for selected criteria...", + "yesPleasImInAHurry": "Yes please, I am in a hurry", + "fetchingFeesPleaseWait": "Fetching fees, Please wait...", + "noThanksPhysicalVisit": "No, Thanks. I would like a physical visit", + "offline": "Offline", + "videoCall": "Video Call", + "liveVideoCallWithHMGDoctors": "Live Video Call with HMG Doctors", + "audioCall": "Audio Call", + "phoneCall": "Phone Call", + "livePhoneCallWithHMGDoctors": "Live Phone Call with HMG Doctors", + "reviewLiveCareRequest": "Review LiveCare Request", + "selectedLiveCareType": "Selected LiveCare Type", + "selectLiveCareCallType": "Select LiveCare call type", + "confirmingLiveCareRequest": "Confirming LiveCare request, Please wait...", + "unknownErrorOccurred": "Unknown error occurred...", + "liveCarePermissionsMessage": "LiveCare requires Camera, Microphone, Location & Notifications permissions to enable virtual consultation between patient & doctor, Please allow these to proceed.", + "liveCarePayment": "LiveCare Payment", + "mada": "Mada", + "visaOrMastercard": "Visa or Mastercard", + "tamara": "Tamara", + "fetchingApplePayDetails": "Fetching Apple Pay details, Please wait...", + "liveCarePendingRequest": "LiveCare Pending Request", + "callLiveCareSupport": "Call LiveCare Support", + "whatIsWaitingAppointment": "What is Waiting Appointment?", + "waitingAppointmentsFeature": "The waiting appointments feature allows you to book an appointment while you are inside the hospital building, and in case there is no available slot in the doctor's schedule.", + "appointmentWithDoctorConfirmed": "The appointment with the doctor is confirmed, but the time of entry is uncertain.", + "paymentWithinTenMinutes": "Note: You must have to pay within 10 minutes of booking, otherwise your appointment will be cancelled automatically", + "liveLocation": "Live Location", + "verifyYourLocationAtHospital": "Verify your location to be at hospital to check in", + "error": "Error", + "ensureWithinHospitalLocation": "Please ensure you're within the hospital location to perform online check-in.", + "nfcNearFieldCommunication": "NFC (Near Field Communication)", + "scanPhoneViaNFC": "Scan your phone via NFC board to check in", + "qrCode": "QR Code", + "scanQRCodeToCheckIn": "Scan QR code with your camera to check in", + "processingCheckIn": "Processing Check-In...", + "bookingWaitingAppointment": "Booking Waiting Appointment, Please wait...", + "enterValidIDorIqama": "Please enter a valid national ID or file number", + "selectAppointment": "Select Appointment", + "rebookSameDoctor": "Rebook with same doctor", + "queueing": "Queueing", + "inQueue": "In Queue", + "yourTurn": "Your Turn", + "halaFirstName": "Hala {firstName}!!!", + "thankYouForPatience": "Thank you for your patience, here is your queue number.", + "servingNow": "Serving Now", + "callForVitalSigns": "Call for vital signs", + "callForDoctor": "Call for Doctor", + "thingsToAskDoctor": "Things to ask your doctor today", + "improveOverallHealth": "What can I do to improve my overall health?", + "routineScreenings": "Are there any routine screenings I should get?", + "whatIsThisMedicationFor": "What is this medication for?", + "sideEffectsToKnow": "Are there any side effects I should know about?", + "whenFollowUp": "When should I come back for a follow-up?", + "goToHomepage": "Go to homepage", + "appointmentsList": "Appointments List", + "allAppt": "All Appt.", + "upcoming": "Upcoming", + "completed": "Completed", + "noAppointmentsYet": "You don't have any appointments yet.", + "viewProfile": "View Profile", + "choosePreferredHospitalForService": "Choose your preferred hospital for the service", + "noHospitalsFound": "No hospitals Found", + "cancelOrderConfirmation": "Are you sure you want to cancel this order?", + "orderCancelledSuccessfully": "Order has been cancelled successfully", + "requestID": "Request ID:", + "noCMCOrdersYet": "You don't have any CMC orders yet.", + "cmcOrders": "CMC Orders" } \ No newline at end of file diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index f550c81..f57a48b 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -475,7 +475,7 @@ abstract class LocaleKeys { static const shareReview = 'shareReview'; static const review = 'review'; static const viewMedicalFile = 'viewMedicalFile'; - static String get viewAllServices => 'viewAllServices'; + static const viewAllServices = 'viewAllServices'; static const medicalFile = 'medicalFile'; static const verified = 'verified'; static const checkup = 'checkup'; @@ -876,5 +876,135 @@ abstract class LocaleKeys { static const laserClinic = 'laserClinic'; static const continueString = 'continueString'; static const covid_info = 'covid_info'; + static const appointmentDetails = 'appointmentDetails'; + static const checkingDoctorAvailability = 'checkingDoctorAvailability'; + static const cancellingAppointmentPleaseWait = 'cancellingAppointmentPleaseWait'; + static const appointmentCancelledSuccessfully = 'appointmentCancelledSuccessfully'; + static const notConfirmed = 'notConfirmed'; + static const appointmentStatus = 'appointmentStatus'; + static const doctorWillCallYou = 'doctorWillCallYou'; + static const getDirections = 'getDirections'; + static const notifyMeBeforeAppointment = 'notifyMeBeforeAppointment'; + static const fetchingLabResults = 'fetchingLabResults'; + static const fetchingRadiologyResults = 'fetchingRadiologyResults'; + static const fetchingAppointmentPrescriptions = 'fetchingAppointmentPrescriptions'; + static const noPrescriptionsForAppointment = 'noPrescriptionsForAppointment'; + static const amountBeforeTax = 'amountBeforeTax'; + static const rebookAppointment = 'rebookAppointment'; + static const fetchingDoctorSchedulePleaseWait = 'fetchingDoctorSchedulePleaseWait'; + static const pickADate = 'pickADate'; + static const confirmingAppointmentPleaseWait = 'confirmingAppointmentPleaseWait'; + static const appointmentConfirmedSuccessfully = 'appointmentConfirmedSuccessfully'; + static const appointmentPayment = 'appointmentPayment'; + static const checkingPaymentStatusPleaseWait = 'checkingPaymentStatusPleaseWait'; + static const paymentFailedPleaseTryAgain = 'paymentFailedPleaseTryAgain'; + static const appointmentCheckIn = 'appointmentCheckIn'; + static const insuranceExpiredOrInactive = 'insuranceExpiredOrInactive'; + static const totalAmountToPay = 'totalAmountToPay'; + static const vat15 = 'vat15'; + static const liveCare = 'liveCare'; + static const recentVisits = 'recentVisits'; + static const searchByClinic = 'searchByClinic'; + static const tapToSelectClinic = 'tapToSelectClinic'; + static const searchByDoctor = 'searchByDoctor'; + static const tapToSelect = 'tapToSelect'; + static const searchByRegion = 'searchByRegion'; + static const centralRegion = 'centralRegion'; + static const immediateConsultation = 'immediateConsultation'; + static const scheduledConsultation = 'scheduledConsultation'; + static const pharmaLiveCare = 'pharmaLiveCare'; + static const notSureHelpMeChooseClinic = 'notSureHelpMeChooseClinic'; + static const mentionYourSymptomsAndFindDoctors = 'mentionYourSymptomsAndFindDoctors'; + static const immediateService = 'immediateService'; + static const noNeedToWaitGetMedicalConsultation = 'noNeedToWaitGetMedicalConsultation'; + static const noVisitRequired = 'noVisitRequired'; + static const doctorWillContact = 'doctorWillContact'; + static const specialisedDoctorWillContactYou = 'specialisedDoctorWillContactYou'; + static const freeMedicineDelivery = 'freeMedicineDelivery'; + static const offersFreeMedicineDelivery = 'offersFreeMedicineDelivery'; + static const dentalChiefComplaints = 'dentalChiefComplaints'; + static const viewAvailableAppointments = 'viewAvailableAppointments'; + static const doctorProfile = 'doctorProfile'; + static const waitingAppointment = 'waitingAppointment'; + static const hospitalInformation = 'hospitalInformation'; + static const fetchingAppointmentShare = 'fetchingAppointmentShare'; + static const bookingYourAppointment = 'bookingYourAppointment'; + static const selectLiveCareClinic = 'selectLiveCareClinic'; + static const checkingForExistingDentalPlan = 'checkingForExistingDentalPlan'; + static const dentalTreatmentPlan = 'dentalTreatmentPlan'; + static const youHaveExistingTreatmentPlan = 'youHaveExistingTreatmentPlan'; + static const mins = 'mins'; + static const totalTimeRequired = 'totalTimeRequired'; + static const wouldYouLikeToContinue = 'wouldYouLikeToContinue'; + static const chooseDoctor = 'chooseDoctor'; + static const viewNearestAppos = 'viewNearestAppos'; + static const noDoctorFound = 'noDoctorFound'; + static const yesPleasImInAHurry = 'yesPleasImInAHurry'; + static const fetchingFeesPleaseWait = 'fetchingFeesPleaseWait'; + static const noThanksPhysicalVisit = 'noThanksPhysicalVisit'; + static const offline = 'offline'; + static const videoCall = 'videoCall'; + static const liveVideoCallWithHMGDoctors = 'liveVideoCallWithHMGDoctors'; + static const audioCall = 'audioCall'; + static const phoneCall = 'phoneCall'; + static const livePhoneCallWithHMGDoctors = 'livePhoneCallWithHMGDoctors'; + static const reviewLiveCareRequest = 'reviewLiveCareRequest'; + static const selectedLiveCareType = 'selectedLiveCareType'; + static const selectLiveCareCallType = 'selectLiveCareCallType'; + static const confirmingLiveCareRequest = 'confirmingLiveCareRequest'; + static const unknownErrorOccurred = 'unknownErrorOccurred'; + static const liveCarePermissionsMessage = 'liveCarePermissionsMessage'; + static const liveCarePayment = 'liveCarePayment'; + static const mada = 'mada'; + static const visaOrMastercard = 'visaOrMastercard'; + static const tamara = 'tamara'; + static const fetchingApplePayDetails = 'fetchingApplePayDetails'; + static const liveCarePendingRequest = 'liveCarePendingRequest'; + static const callLiveCareSupport = 'callLiveCareSupport'; + static const whatIsWaitingAppointment = 'whatIsWaitingAppointment'; + static const waitingAppointmentsFeature = 'waitingAppointmentsFeature'; + static const appointmentWithDoctorConfirmed = 'appointmentWithDoctorConfirmed'; + static const paymentWithinTenMinutes = 'paymentWithinTenMinutes'; + static const liveLocation = 'liveLocation'; + static const verifyYourLocationAtHospital = 'verifyYourLocationAtHospital'; + static const error = 'error'; + static const ensureWithinHospitalLocation = 'ensureWithinHospitalLocation'; + static const nfcNearFieldCommunication = 'nfcNearFieldCommunication'; + static const scanPhoneViaNFC = 'scanPhoneViaNFC'; + static const qrCode = 'qrCode'; + static const scanQRCodeToCheckIn = 'scanQRCodeToCheckIn'; + static const processingCheckIn = 'processingCheckIn'; + static const bookingWaitingAppointment = 'bookingWaitingAppointment'; + static const enterValidIDorIqama = 'enterValidIDorIqama'; + static const selectAppointment = 'selectAppointment'; + static const rebookSameDoctor = 'rebookSameDoctor'; + static const queueing = 'queueing'; + static const inQueue = 'inQueue'; + static const yourTurn = 'yourTurn'; + static const halaFirstName = 'halaFirstName'; + static const thankYouForPatience = 'thankYouForPatience'; + static const servingNow = 'servingNow'; + static const callForVitalSigns = 'callForVitalSigns'; + static const callForDoctor = 'callForDoctor'; + static const thingsToAskDoctor = 'thingsToAskDoctor'; + static const improveOverallHealth = 'improveOverallHealth'; + static const routineScreenings = 'routineScreenings'; + static const whatIsThisMedicationFor = 'whatIsThisMedicationFor'; + static const sideEffectsToKnow = 'sideEffectsToKnow'; + static const whenFollowUp = 'whenFollowUp'; + static const goToHomepage = 'goToHomepage'; + static const appointmentsList = 'appointmentsList'; + static const allAppt = 'allAppt'; + static const upcoming = 'upcoming'; + static const completed = 'completed'; + static const noAppointmentsYet = 'noAppointmentsYet'; + static const viewProfile = 'viewProfile'; + static const choosePreferredHospitalForService = 'choosePreferredHospitalForService'; + static const noHospitalsFound = 'noHospitalsFound'; + static const cancelOrderConfirmation = 'cancelOrderConfirmation'; + static const orderCancelledSuccessfully = 'orderCancelledSuccessfully'; + static const requestID = 'requestID'; + static const noCMCOrdersYet = 'noCMCOrdersYet'; + static const cmcOrders = 'cmcOrders'; } diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart index bd81584..0b8066e 100644 --- a/lib/presentation/appointments/appointment_details_page.dart +++ b/lib/presentation/appointments/appointment_details_page.dart @@ -87,7 +87,7 @@ class _AppointmentDetailsPageState extends State { children: [ Expanded( child: CollapsingListView( - title: "Appointment Details".needTranslation, + title: LocaleKeys.appointmentDetails.tr(), report: AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel) ? () { contactUsViewModel.setPatientFeedbackSelectedAppointment(widget.patientAppointmentHistoryResponseModel); @@ -105,14 +105,13 @@ class _AppointmentDetailsPageState extends State { AppointmentDoctorCard( patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel, onAskDoctorTap: () async { - LoaderBottomSheet.showLoader(loadingText: "Checking doctor availability...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingDoctorAvailability.tr()); await myAppointmentsViewModel.isDoctorAvailable( projectID: widget.patientAppointmentHistoryResponseModel.projectID, doctorId: widget.patientAppointmentHistoryResponseModel.doctorID, clinicId: widget.patientAppointmentHistoryResponseModel.clinicID, onSuccess: (value) async { if (value) { - print("Doctor is available"); await myAppointmentsViewModel.getAskDoctorRequestTypes(onSuccess: (val) { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( @@ -129,14 +128,14 @@ class _AppointmentDetailsPageState extends State { ); }); } else { - print("Doctor is not available"); + debugPrint("Doctor is not available"); } }); }, onCancelTap: () async { myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true); - LoaderBottomSheet.showLoader(loadingText: "Cancelling Appointment, Please Wait...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.cancellingAppointmentPleaseWait.tr()); await myAppointmentsViewModel.cancelAppointment( patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel, onSuccess: (apiResponse) { @@ -145,7 +144,7 @@ class _AppointmentDetailsPageState extends State { myAppointmentsViewModel.getPatientAppointments(true, false); showCommonBottomSheetWithoutHeight( context, - child: Utils.getSuccessWidget(loadingText: "Appointment Cancelled Successfully".needTranslation), + child: Utils.getSuccessWidget(loadingText: LocaleKeys.appointmentCancelledSuccessfully.tr()), callBackFunc: () { Navigator.of(context).pop(); }, @@ -182,13 +181,13 @@ class _AppointmentDetailsPageState extends State { children: [ Row( children: [ - "Appointment Status".needTranslation.toText16(isBold: true), + LocaleKeys.appointmentStatus.tr().toText16(isBold: true), ], ), SizedBox(height: 4.h), (!AppointmentType.isConfirmed(widget.patientAppointmentHistoryResponseModel) - ? "Not Confirmed".needTranslation.toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500) - : "Confirmed".needTranslation.toText12(color: AppColors.successColor, fontWeight: FontWeight.w500)), + ? LocaleKeys.notConfirmed.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500) + : LocaleKeys.confirmed.tr().toText12(color: AppColors.successColor, fontWeight: FontWeight.w500)), SizedBox(height: 16.h), //TODO Add countdown timer in case of LiveCare Appointment widget.patientAppointmentHistoryResponseModel.isLiveCareAppointment ?? false @@ -200,9 +199,7 @@ class _AppointmentDetailsPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "The doctor will call you once the appointment time approaches." - .needTranslation - .toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), + LocaleKeys.doctorWillCallYou.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), ), @@ -224,11 +221,11 @@ class _AppointmentDetailsPageState extends State { child: SizedBox( width: MediaQuery.of(context).size.width * 0.785, child: CustomButton( - text: "Get Directions".needTranslation, onPressed: () { MapsLauncher.launchCoordinates(double.parse(widget.patientAppointmentHistoryResponseModel.latitude!), double.parse(widget.patientAppointmentHistoryResponseModel.longitude!), widget.patientAppointmentHistoryResponseModel.projectName); }, + text: LocaleKeys.getDirections.tr(), backgroundColor: AppColors.textColor.withValues(alpha: 0.8), borderColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction).withValues(alpha: 0.01), textColor: AppColors.whiteColor, @@ -283,9 +280,7 @@ class _AppointmentDetailsPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ LocaleKeys.setReminder.tr(context: context).toText13(isBold: true), - "Notify me before the appointment" - .needTranslation - .toText11(color: AppColors.textColorLight, weight: FontWeight.w500), + LocaleKeys.notifyMeBeforeAppointment.tr().toText11(color: AppColors.textColorLight, weight: FontWeight.w500), ], ), const Spacer(), @@ -307,8 +302,9 @@ class _AppointmentDetailsPageState extends State { "${widget.patientAppointmentHistoryResponseModel.appointmentNo}"??"", "", "", - title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}".needTranslation, - description:"${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}".needTranslation, + title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}", + description: + "${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}", onSuccess: () { setState(() { myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); @@ -318,10 +314,10 @@ class _AppointmentDetailsPageState extends State { onMultiDateSuccess: (int selectedIndex) async { isEventAddedOrRemoved = await calender.createOrUpdateEvent( - title: "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget - .patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}".needTranslation, - description: "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget - .patientAppointmentHistoryResponseModel.projectName}", + title: + "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + description: + "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget.patientAppointmentHistoryResponseModel.projectName}", scheduleDateTime: DateUtil.convertStringToDate(widget .patientAppointmentHistoryResponseModel.appointmentDate), eventId: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", @@ -369,7 +365,7 @@ class _AppointmentDetailsPageState extends State { isLargeText: true, iconSize: 36.w, ).onPress(() async { - LoaderBottomSheet.showLoader(loadingText: "Fetching Lab Results...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingLabResults.tr()); await labViewModel.getLabResultsByAppointmentNo( appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo, projectID: widget.patientAppointmentHistoryResponseModel.projectID, @@ -402,7 +398,7 @@ class _AppointmentDetailsPageState extends State { isLargeText: true, iconSize: 36.w, ).onPress(() async { - LoaderBottomSheet.showLoader(loadingText: "Fetching Radiology Results...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingRadiologyResults.tr()); await radiologyViewModel.getPatientRadiologyOrdersByAppointment( appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo, projectID: widget.patientAppointmentHistoryResponseModel.projectID, @@ -429,7 +425,7 @@ class _AppointmentDetailsPageState extends State { isLargeText: true, iconSize: 36.w, ).onPress(() async { - LoaderBottomSheet.showLoader(loadingText: "Fetching Appointment Prescriptions...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingAppointmentPrescriptions.tr()); await prescriptionsViewModel.getPrescriptionDetails( getPrescriptionRequestModel(), onSuccess: (val) { @@ -457,8 +453,7 @@ class _AppointmentDetailsPageState extends State { } else { showCommonBottomSheetWithoutHeight( context, - child: Utils.getErrorWidget( - loadingText: "You don't have any prescriptions for this appointment.".needTranslation), + child: Utils.getErrorWidget(loadingText: LocaleKeys.noPrescriptionsForAppointment.tr()), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, @@ -713,7 +708,7 @@ class _AppointmentDetailsPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "Amount before tax".needTranslation.toText18(isBold: true), + LocaleKeys.amountBeforeTax.tr().toText18(isBold: true), Utils.getPaymentAmountWithSymbol( widget.patientAppointmentHistoryResponseModel.patientShare!.toString().toText16(isBold: true), AppColors.blackColor, @@ -730,7 +725,6 @@ class _AppointmentDetailsPageState extends State { .tr(context: context) .toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor)), "VAT 15%(${widget.patientAppointmentHistoryResponseModel.patientTaxAmount})" - .needTranslation .toText14(isBold: true, color: AppColors.greyTextColor, letterSpacing: -2), ], ), @@ -758,7 +752,7 @@ class _AppointmentDetailsPageState extends State { ).paddingOnly(left: 16.h, top: 24.h, right: 16.h, bottom: 0.h), AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel) ? CustomButton( - text: "Re-book Appointment".needTranslation, + text: LocaleKeys.rebookAppointment.tr(), onPressed: () { openDoctorScheduleCalendar(); }, @@ -816,13 +810,13 @@ class _AppointmentDetailsPageState extends State { projectName: widget.patientAppointmentHistoryResponseModel.projectName, ); bookAppointmentsViewModel.setSelectedDoctor(doctor); - LoaderBottomSheet.showLoader(loadingText: "Fetching Doctor Schedule, Please Wait...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingDoctorSchedulePleaseWait.tr()); await bookAppointmentsViewModel.getDoctorFreeSlots( isBookingForLiveCare: false, onSuccess: (dynamic respData) async { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( - title: "Pick a Date".needTranslation, + title: LocaleKeys.pickADate.tr(), context, child: AppointmentCalendar(), isFullScreen: false, @@ -847,15 +841,14 @@ class _AppointmentDetailsPageState extends State { case 0: break; case 10: - LoaderBottomSheet.showLoader(loadingText: "Confirming Appointment, Please Wait...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.confirmingAppointmentPleaseWait.tr()); await myAppointmentsViewModel.confirmAppointment( patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel, onSuccess: (apiResponse) { LoaderBottomSheet.hideLoader(); myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true); myAppointmentsViewModel.getPatientAppointments(true, false); - showCommonBottomSheet(context, child: Utils.getSuccessWidget(loadingText: "Appointment Confirmed Successfully".needTranslation), - callBackFunc: (str) { + showCommonBottomSheet(context, child: Utils.getSuccessWidget(loadingText: LocaleKeys.appointmentConfirmedSuccessfully.tr()), callBackFunc: (str) { Navigator.of(context).pop(); }, title: "", diff --git a/lib/presentation/appointments/appointment_payment_page.dart b/lib/presentation/appointments/appointment_payment_page.dart index 475ee70..a38a9f1 100644 --- a/lib/presentation/appointments/appointment_payment_page.dart +++ b/lib/presentation/appointments/appointment_payment_page.dart @@ -90,7 +90,7 @@ class _AppointmentPaymentPageState extends State { children: [ Expanded( child: CollapsingListView( - title: "Appointment Payment".needTranslation, + title: LocaleKeys.appointmentPayment.tr(), child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -111,7 +111,7 @@ class _AppointmentPaymentPageState extends State { Image.asset(AppAssets.mada, width: 72.h, height: 25.h) .toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), SizedBox(height: 16.h), - "Mada".needTranslation.toText16(isBold: true).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), + "Mada".toText16(isBold: true).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), ], ), SizedBox(width: 8.h), @@ -154,7 +154,6 @@ class _AppointmentPaymentPageState extends State { ).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), SizedBox(height: 16.h), "Visa or Mastercard" - .needTranslation .toText16(isBold: true) .toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), ], @@ -195,7 +194,6 @@ class _AppointmentPaymentPageState extends State { .toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), SizedBox(height: 16.h), "Tamara" - .needTranslation .toText16(isBold: true) .toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), ], @@ -250,8 +248,7 @@ class _AppointmentPaymentPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "Insurance expired or inactive" - .needTranslation + LocaleKeys.insuranceExpiredOrInactive.tr() .toText14(color: AppColors.primaryRedColor, weight: FontWeight.w500) .paddingSymmetrical(24.h, 0.h), CustomButton( @@ -277,12 +274,12 @@ class _AppointmentPaymentPageState extends State { ) : const SizedBox(), SizedBox(height: 24.h), - "Total amount to pay".needTranslation.toText18(isBold: true).paddingSymmetrical(24.h, 0.h), + LocaleKeys.totalAmountToPay.tr().toText18(isBold: true).paddingSymmetrical(24.h, 0.h), SizedBox(height: 17.h), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "Amount before tax".needTranslation.toText14(isBold: true), + LocaleKeys.amountBeforeTax.tr().toText14(isBold: true), Utils.getPaymentAmountWithSymbol( myAppointmentsVM.patientAppointmentShareResponseModel!.patientShare!.toString().toText16(isBold: true), AppColors.blackColor, @@ -293,7 +290,7 @@ class _AppointmentPaymentPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "VAT 15%".needTranslation.toText14(isBold: true, color: AppColors.greyTextColor), + "VAT 15%".toText14(isBold: true, color: AppColors.greyTextColor), Utils.getPaymentAmountWithSymbol( myAppointmentsVM.patientAppointmentShareResponseModel!.patientTaxAmount! .toString() @@ -307,7 +304,7 @@ class _AppointmentPaymentPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "".needTranslation.toText14(isBold: true), + "".toText14(isBold: true), Utils.getPaymentAmountWithSymbol( myAppointmentsVM.patientAppointmentShareResponseModel!.patientShareWithTax!.toString().toText24(isBold: true), AppColors.blackColor, @@ -383,7 +380,7 @@ class _AppointmentPaymentPageState extends State { } void checkPaymentStatus() async { - LoaderBottomSheet.showLoader(loadingText: "Checking payment status, Please wait...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingPaymentStatusPleaseWait.tr()); if (selectedPaymentMethod == "TAMARA") { await payfortViewModel.checkTamaraPaymentStatus( transactionID: transID, @@ -441,7 +438,7 @@ class _AppointmentPaymentPageState extends State { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( context, - child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation), + child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr()), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, @@ -522,7 +519,7 @@ class _AppointmentPaymentPageState extends State { } else { showCommonBottomSheetWithoutHeight( context, - child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation), + child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr()), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, diff --git a/lib/presentation/appointments/appointment_queue_page.dart b/lib/presentation/appointments/appointment_queue_page.dart index 124bf25..f205aeb 100644 --- a/lib/presentation/appointments/appointment_queue_page.dart +++ b/lib/presentation/appointments/appointment_queue_page.dart @@ -1,3 +1,4 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; @@ -7,6 +8,7 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; @@ -30,7 +32,7 @@ class AppointmentQueuePage extends StatelessWidget { children: [ Expanded( child: CollapsingListView( - title: "Queueing".needTranslation, + title: LocaleKeys.queueing.tr(context: context), child: SingleChildScrollView( child: Padding( padding: EdgeInsets.all(24.0), @@ -57,7 +59,7 @@ class AppointmentQueuePage extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ AppCustomChipWidget( - labelText: myAppointmentsVM.currentQueueStatus == 0 ? "In Queue".needTranslation : "Your Turn".needTranslation, + labelText: myAppointmentsVM.currentQueueStatus == 0 ? LocaleKeys.inQueue.tr(context: context) : LocaleKeys.yourTurn.tr(context: context), backgroundColor: Utils.getCardBorderColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.20), textColor: Utils.getCardBorderColor(myAppointmentsVM.currentQueueStatus), ), @@ -66,12 +68,10 @@ class AppointmentQueuePage extends StatelessWidget { ).toShimmer2(isShow: myAppointmentsVM.isAppointmentQueueDetailsLoading), SizedBox(height: 10.h), "Hala ${appState!.getAuthenticatedUser()!.firstName}!!!" - .needTranslation .toText16(isBold: true) .toShimmer2(isShow: myAppointmentsVM.isAppointmentQueueDetailsLoading), SizedBox(height: 8.h), - "Thank you for your patience, here is your queue number." - .needTranslation + LocaleKeys.thankYouForPatience.tr(context: context) .toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight) .toShimmer2(isShow: myAppointmentsVM.isAppointmentQueueDetailsLoading), SizedBox(height: 8.h), @@ -111,8 +111,7 @@ class AppointmentQueuePage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Serving Now" - .needTranslation + LocaleKeys.servingNow.tr(context: context) .toText16(isBold: true) .toShimmer2(isShow: myAppointmentsVM.isAppointmentQueueDetailsLoading), SizedBox(height: 18.h), @@ -138,8 +137,8 @@ class AppointmentQueuePage extends StatelessWidget { ? AppAssets.call_for_vitals : AppAssets.call_for_doctor, labelText: myAppointmentsVM.patientQueueDetailsList[index].callType == 1 - ? "Call for vital signs".needTranslation - : "Call for Doctor".needTranslation, + ? LocaleKeys.callForVitalSigns.tr(context: context) + : LocaleKeys.callForDoctor.tr(context: context), iconColor: myAppointmentsVM.patientQueueDetailsList[index].callType == 1 ? AppColors.primaryRedColor : AppColors.successColor, @@ -180,35 +179,23 @@ class AppointmentQueuePage extends StatelessWidget { children: [ Utils.buildSvgWithAssets(icon: AppAssets.bulb_icon, width: 24.w, height: 24.h), SizedBox(width: 8.w), - "Things to ask your doctor today".needTranslation.toText16(isBold: true), + LocaleKeys.thingsToAskDoctor.tr(context: context).toText16(isBold: true), ], ), SizedBox(height: 8.h), - - // What can I do to improve my overall health? - // Are there any routine screenings I should get? - // What is this medication for? - // Are there any side effects I should know about? - // When should I come back for a follow-up? - - "• ${"What can I do to improve my overall health?"}" - .needTranslation + "• ${LocaleKeys.improveOverallHealth.tr(context: context)}" .toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), SizedBox(height: 4.h), - "• ${"Are there any routine screenings I should get?"}" - .needTranslation + "• ${LocaleKeys.routineScreenings.tr(context: context)}" .toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), SizedBox(height: 4.h), - "• ${"What is this medication for?"}" - .needTranslation + "• ${LocaleKeys.whatIsThisMedicationFor.tr(context: context)}" .toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), SizedBox(height: 4.h), - "• ${"Are there any side effects I should know about?"}" - .needTranslation + "• ${LocaleKeys.sideEffectsToKnow.tr(context: context)}" .toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), SizedBox(height: 4.h), - "• ${"When should I come back for a follow-up?"}" - .needTranslation + "• ${LocaleKeys.whenFollowUp.tr(context: context)}" .toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight), SizedBox(height: 16.h), @@ -229,7 +216,7 @@ class AppointmentQueuePage extends StatelessWidget { hasShadow: true, ), child: CustomButton( - text: "Go to homepage".needTranslation, + text: LocaleKeys.goToHomepage.tr(context: context), onPressed: () { Navigator.pushAndRemoveUntil( context, @@ -249,11 +236,10 @@ class AppointmentQueuePage extends StatelessWidget { icon: AppAssets.homeBottom, iconColor: AppColors.whiteColor, iconSize: 18.h, - ).paddingSymmetrical(16.h, 24.h), - ) + ).paddingSymmetrical(24.h, 24.h), + ), ], ); - }), - ); + })); } } diff --git a/lib/presentation/appointments/my_appointments_page.dart b/lib/presentation/appointments/my_appointments_page.dart index b4c3630..1209467 100644 --- a/lib/presentation/appointments/my_appointments_page.dart +++ b/lib/presentation/appointments/my_appointments_page.dart @@ -56,7 +56,7 @@ class _MyAppointmentsPageState extends State { return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: CollapsingListView( - title: "Appointments List".needTranslation, + title: LocaleKeys.appointmentsList.tr(context: context), child: SingleChildScrollView( child: Column( children: [ @@ -65,9 +65,9 @@ class _MyAppointmentsPageState extends State { activeTextColor: Color(0xffED1C2B), activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), tabs: [ - CustomTabBarModel(null, "All Appt.".needTranslation), - CustomTabBarModel(null, "Upcoming".needTranslation), - CustomTabBarModel(null, "Completed".needTranslation), + CustomTabBarModel(null, LocaleKeys.allAppt.tr(context: context)), + CustomTabBarModel(null, LocaleKeys.upcoming.tr(context: context)), + CustomTabBarModel(null, LocaleKeys.completed.tr(context: context)), ], onTabChange: (index) { setState(() { @@ -248,7 +248,7 @@ class _MyAppointmentsPageState extends State { ) : Utils.getNoDataWidget( context, - noDataText: "You don't have any appointments yet.".needTranslation, + noDataText: LocaleKeys.noAppointmentsYet.tr(context: context), callToActionButton: CustomButton( text: LocaleKeys.bookAppo.tr(context: context), onPressed: () { @@ -296,7 +296,7 @@ class _MyAppointmentsPageState extends State { onClicked: () { if (myAppointmentsVM.availableFilters[index] == AppointmentListingFilters.DATESELECTION) { showCommonBottomSheetWithoutHeight( - title: "Set The Date Range".needTranslation, + title: LocaleKeys.setTheDateRange.tr(context: context), context, child: DateRangeSelector( onRangeSelected: (start, end) { diff --git a/lib/presentation/appointments/my_doctors_page.dart b/lib/presentation/appointments/my_doctors_page.dart index 2c5d1b0..3795ce1 100644 --- a/lib/presentation/appointments/my_doctors_page.dart +++ b/lib/presentation/appointments/my_doctors_page.dart @@ -211,7 +211,7 @@ class _MyDoctorsPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - AppCustomChipWidget(labelText: "${group.length} ${'doctors'.needTranslation}"), + AppCustomChipWidget(labelText: "${group.length} ${'doctors'}"), Icon(isExpanded ? Icons.expand_less : Icons.expand_more), ], ), @@ -284,7 +284,7 @@ class _MyDoctorsPageState extends State { icon: AppAssets.view_report_icon, iconColor: AppColors.primaryRedColor, iconSize: 16.h, - text: "View Profile".needTranslation.tr(context: context), + text: LocaleKeys.viewProfile.tr(context: context), onPressed: () async { bookAppointmentsViewModel.setSelectedDoctor(DoctorsListResponseModel( clinicID: doctor?.clinicID ?? 0, diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart index 39e4e03..6b0439f 100644 --- a/lib/presentation/appointments/widgets/appointment_card.dart +++ b/lib/presentation/appointments/widgets/appointment_card.dart @@ -96,13 +96,13 @@ class AppointmentCard extends StatelessWidget { AppCustomChipWidget( icon: isLoading ? AppAssets.walkin_appointment_icon : (isLiveCare ? AppAssets.small_livecare_icon : AppAssets.walkin_appointment_icon), iconColor: isLoading ? AppColors.textColor : (isLiveCare ? AppColors.whiteColor : AppColors.textColor), - labelText: isLoading ? 'Walk In'.needTranslation : (isLiveCare ? LocaleKeys.livecare.tr(context: context) : 'Walk In'.needTranslation), + labelText: isLoading ? LocaleKeys.walkin.tr(context: context) : (isLiveCare ? LocaleKeys.livecare.tr(context: context) : LocaleKeys.walkin.tr(context: context)), backgroundColor: isLoading ? AppColors.greyColor : (isLiveCare ? AppColors.successColor : AppColors.greyColor), textColor: isLoading ? AppColors.textColor : (isLiveCare ? AppColors.whiteColor : AppColors.textColor), ).toShimmer2(isShow: isLoading), AppCustomChipWidget( labelText: isLoading - ? 'OutPatient'.needTranslation + ? 'OutPatient' : (appState.isArabic() ? patientAppointmentHistoryResponseModel.isInOutPatientDescriptionN! : patientAppointmentHistoryResponseModel.isInOutPatientDescription!), @@ -111,7 +111,7 @@ class AppointmentCard extends StatelessWidget { ).toShimmer2(isShow: isLoading), AppCustomChipWidget( labelText: isLoading - ? 'Booked'.needTranslation + ? 'Booked' : AppointmentType.getAppointmentStatusType(patientAppointmentHistoryResponseModel.patientStatusType!), backgroundColor: AppColors.successColor.withValues(alpha: 0.1), textColor: AppColors.successColor, @@ -229,7 +229,7 @@ class AppointmentCard extends StatelessWidget { return SizedBox.shrink(); } else { return CustomButton( - text: 'Select appointment'.needTranslation, + text: LocaleKeys.selectAppointment.tr(context: context), onPressed: () { if (isForFeedback) { contactUsViewModel!.setPatientFeedbackSelectedAppointment(patientAppointmentHistoryResponseModel); @@ -310,7 +310,7 @@ class AppointmentCard extends StatelessWidget { return CustomButton( text: LocaleKeys.askDoctor.tr(context: context), onPressed: () async { - LoaderBottomSheet.showLoader(loadingText: "Checking doctor availability...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingDoctorAvailability.tr(context: context)); await myAppointmentsViewModel.isDoctorAvailable( projectID: patientAppointmentHistoryResponseModel.projectID, doctorId: patientAppointmentHistoryResponseModel.doctorID, @@ -353,7 +353,7 @@ class AppointmentCard extends StatelessWidget { } return CustomButton( - text: 'Rebook with same doctor'.needTranslation, + text: LocaleKeys.rebookSameDoctor.tr(context: context), onPressed: () => openDoctorScheduleCalendar(context), backgroundColor: AppColors.greyColor, borderColor: AppColors.greyColor, @@ -417,7 +417,7 @@ class AppointmentCard extends StatelessWidget { context, child: AppointmentCalendar(), callBackFunc: () {}, - title: 'Pick a Date'.needTranslation, + title: LocaleKeys.pickADate.tr(context: context), isFullScreen: false, isCloseButtonVisible: true, ); diff --git a/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart b/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart index d118a5e..c5139f1 100644 --- a/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart +++ b/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart @@ -45,8 +45,8 @@ class AppointmentCheckinBottomSheet extends StatelessWidget { children: [ checkInOptionCard( AppAssets.checkin_location_icon, - "Live Location".needTranslation, - "Verify your location to be at hospital to check in".needTranslation, + LocaleKeys.liveLocation.tr(context: context), + LocaleKeys.verifyYourLocationAtHospital.tr(context: context), ).onPress(() { // locationUtils = LocationUtils( // isShowConfirmDialog: false, @@ -61,8 +61,10 @@ class AppointmentCheckinBottomSheet extends StatelessWidget { sendCheckInRequest(projectDetailListModel.checkInQrCode!, 3, context); } else { showCommonBottomSheetWithoutHeight(context, - title: "Error".needTranslation, - child: Utils.getErrorWidget(loadingText: "Please ensure you're within the hospital location to perform online check-in.".needTranslation), callBackFunc: () { + title: LocaleKeys.error.tr(context: context), + child: Utils.getErrorWidget( + loadingText: LocaleKeys.ensureWithinHospitalLocation.tr(context: context), + ), callBackFunc: () { Navigator.of(context).pop(); }, isFullScreen: false); } @@ -71,8 +73,8 @@ class AppointmentCheckinBottomSheet extends StatelessWidget { SizedBox(height: 16.h), checkInOptionCard( AppAssets.checkin_nfc_icon, - "NFC (Near Field Communication)".needTranslation, - "Scan your phone via NFC board to check in".needTranslation, + LocaleKeys.nfcNearFieldCommunication.tr(context: context), + LocaleKeys.scanPhoneViaNFC.tr(context: context), ).onPress(() { Future.delayed(const Duration(milliseconds: 500), () { showNfcReader(context, onNcfScan: (String nfcId) { @@ -85,8 +87,8 @@ class AppointmentCheckinBottomSheet extends StatelessWidget { SizedBox(height: 16.h), checkInOptionCard( AppAssets.checkin_qr_icon, - "QR Code".needTranslation, - "Scan QR code with your camera to check in".needTranslation, + LocaleKeys.qrCode.tr(context: context), + LocaleKeys.scanQRCodeToCheckIn.tr(context: context), ).onPress(() async { String onlineCheckInQRCode = (await BarcodeScanner.scan().then((value) => value.rawContent)); if (onlineCheckInQRCode != "") { @@ -139,14 +141,16 @@ class AppointmentCheckinBottomSheet extends StatelessWidget { } void sendCheckInRequest(String scannedCode, int checkInType, BuildContext context) async { - LoaderBottomSheet.showLoader(loadingText: "Processing Check-In...".needTranslation); + LoaderBottomSheet.showLoader( + loadingText: LocaleKeys.processingCheckIn.tr(context: context), + ); await myAppointmentsViewModel.sendCheckInNfcRequest( patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel, scannedCode: scannedCode, checkInType: checkInType, onSuccess: (apiResponse) { LoaderBottomSheet.hideLoader(); - showCommonBottomSheetWithoutHeight(context, title: "Success".needTranslation, child: Utils.getSuccessWidget(loadingText: LocaleKeys.success.tr()), callBackFunc: () async { + showCommonBottomSheetWithoutHeight(context, title: LocaleKeys.success.tr(context: context), child: Utils.getSuccessWidget(loadingText: LocaleKeys.success.tr()), callBackFunc: () async { await myAppointmentsViewModel.getPatientAppointmentQueueDetails(); Navigator.of(context).pop(); Navigator.pushAndRemoveUntil( @@ -164,7 +168,7 @@ class AppointmentCheckinBottomSheet extends StatelessWidget { }, onError: (error) { LoaderBottomSheet.hideLoader(); - showCommonBottomSheetWithoutHeight(context, title: "Error".needTranslation, child: Utils.getErrorWidget(loadingText: error), callBackFunc: () { + showCommonBottomSheetWithoutHeight(context, title: LocaleKeys.error.tr(context: context), child: Utils.getErrorWidget(loadingText: error), callBackFunc: () { Navigator.of(context).pop(); }, isFullScreen: false); }, diff --git a/lib/presentation/appointments/widgets/appointment_doctor_card.dart b/lib/presentation/appointments/widgets/appointment_doctor_card.dart index ccf6674..0c4aec1 100644 --- a/lib/presentation/appointments/widgets/appointment_doctor_card.dart +++ b/lib/presentation/appointments/widgets/appointment_doctor_card.dart @@ -114,7 +114,7 @@ class AppointmentDoctorCard extends StatelessWidget { iconColor: !patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? AppColors.textColor : AppColors.whiteColor, labelText: patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? LocaleKeys.livecare.tr(context: context) - : "Walk In".needTranslation, + : LocaleKeys.walkin.tr(context: context), backgroundColor: !patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? AppColors.greyColor : AppColors.successColor, textColor: !patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? AppColors.textColor : AppColors.whiteColor, @@ -160,7 +160,7 @@ class AppointmentDoctorCard extends StatelessWidget { iconColor: AppColors.primaryRedColor, ) : CustomButton( - text: "Rebook with same doctor".needTranslation, + text: LocaleKeys.rebookSameDoctor.tr(), onPressed: () { onRescheduleTap(); }, diff --git a/lib/presentation/appointments/widgets/ask_doctor_request_type_select.dart b/lib/presentation/appointments/widgets/ask_doctor_request_type_select.dart index 01aab4e..376c27a 100644 --- a/lib/presentation/appointments/widgets/ask_doctor_request_type_select.dart +++ b/lib/presentation/appointments/widgets/ask_doctor_request_type_select.dart @@ -105,7 +105,7 @@ class AskDoctorRequestTypeSelect extends StatelessWidget { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( context, - child: Utils.getSuccessWidget(loadingText: "Request has been sent successfully, you will be contacted soon.".needTranslation), + child: Utils.getSuccessWidget(loadingText: "Request has been sent successfully, you will be contacted soon."), callBackFunc: () { Navigator.of(context).pop(); }, diff --git a/lib/presentation/appointments/widgets/faculity_selection/facility_type_selection_widget.dart b/lib/presentation/appointments/widgets/faculity_selection/facility_type_selection_widget.dart index cb27f9f..b6366db 100644 --- a/lib/presentation/appointments/widgets/faculity_selection/facility_type_selection_widget.dart +++ b/lib/presentation/appointments/widgets/faculity_selection/facility_type_selection_widget.dart @@ -46,7 +46,7 @@ class FacilityTypeSelectionWidget extends StatelessWidget { SizedBox(height: 24.h), FacilitySelectionItem( svgPath: AppAssets.hmg, - title: "HMG".needTranslation, + title: "HMG", subTitle: LocaleKeys.hospitalsWithCount.tr(namedArgs: { 'count': "${bookAppointmentViewModel.hospitalList?.registeredDoctorMap?[selectedRegion]?.hmgSize ?? 0}" @@ -63,7 +63,7 @@ class FacilityTypeSelectionWidget extends StatelessWidget { SizedBox(height: 16.h), FacilitySelectionItem( svgPath: AppAssets.hmc, - title: "HMC".needTranslation, + title: "HMC", subTitle: LocaleKeys.medicalCentersWithCount.tr(namedArgs: { 'count': "${bookAppointmentViewModel.hospitalList?.registeredDoctorMap?[selectedRegion]?.hmcSize ?? 0}" diff --git a/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart b/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart index b01b541..5d9ed8d 100644 --- a/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart +++ b/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart @@ -76,7 +76,7 @@ class HospitalListItem extends StatelessWidget { Visibility( visible: (hospitalData?.distanceInKMs != "0"), child: AppCustomChipWidget( - labelText: "${hospitalData?.distanceInKMs ?? ""} km".needTranslation, + labelText: "${hospitalData?.distanceInKMs ?? ""} km", deleteIcon: AppAssets.location_red, deleteIconSize: Size(9, 12), backgroundColor: AppColors.secondaryLightRedColor, @@ -88,7 +88,7 @@ class HospitalListItem extends StatelessWidget { child: Row( children: [ AppCustomChipWidget( - labelText: "Distance not available".needTranslation, + labelText: "Distance not available", textColor: AppColors.blackColor, ), // SizedBox( @@ -99,7 +99,7 @@ class HospitalListItem extends StatelessWidget { Visibility( visible: !isLocationEnabled, child: AppCustomChipWidget( - labelText: "Location turned off".needTranslation, + labelText: "Location turned off", deleteIcon: AppAssets.location_unavailable, deleteIconSize: Size(9.w, 12.h), textColor: AppColors.blackColor, diff --git a/lib/presentation/appointments/widgets/hospital_bottom_sheet/type_selection_widget.dart b/lib/presentation/appointments/widgets/hospital_bottom_sheet/type_selection_widget.dart index cbf68f6..e9a5e36 100644 --- a/lib/presentation/appointments/widgets/hospital_bottom_sheet/type_selection_widget.dart +++ b/lib/presentation/appointments/widgets/hospital_bottom_sheet/type_selection_widget.dart @@ -23,7 +23,7 @@ class TypeSelectionWidget extends StatelessWidget { mainAxisSize: MainAxisSize.max, children: [ AppCustomChipWidget( - labelText: "All Facilities".needTranslation, + labelText: "All Facilities", shape: RoundedRectangleBorder( side: BorderSide( color: data.currentlySelectedFacility == FacilitySelection.ALL @@ -45,7 +45,7 @@ class TypeSelectionWidget extends StatelessWidget { AppCustomChipWidget( icon: AppAssets.hmg, iconHasColor: false, - labelText: "Hospitals".needTranslation, + labelText: "Hospitals", shape: RoundedRectangleBorder( side: BorderSide( color: data.currentlySelectedFacility == FacilitySelection.HMG @@ -67,7 +67,7 @@ class TypeSelectionWidget extends StatelessWidget { AppCustomChipWidget( icon: AppAssets.hmc, iconHasColor: false, - labelText: "Medical Centers".needTranslation, + labelText: "Medical Centers", shape: RoundedRectangleBorder( side: BorderSide( color: data.currentlySelectedFacility == FacilitySelection.HMC diff --git a/lib/presentation/authentication/login.dart b/lib/presentation/authentication/login.dart index c14e957..a59062d 100644 --- a/lib/presentation/authentication/login.dart +++ b/lib/presentation/authentication/login.dart @@ -87,7 +87,7 @@ class LoginScreenState extends State { isAllowLeadingIcon: true, padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 10.h), leadingIcon: AppAssets.student_card, - errorMessage: "Please enter a valid national ID or file number".needTranslation, + errorMessage: LocaleKeys.enterValidIDorIqama.tr(), hasError: false, ), SizedBox(height: 16.h), diff --git a/lib/presentation/authentication/register.dart b/lib/presentation/authentication/register.dart index f04f7dd..fa10b95 100644 --- a/lib/presentation/authentication/register.dart +++ b/lib/presentation/authentication/register.dart @@ -112,7 +112,7 @@ class _RegisterNew extends State { Divider(height: 1), TextInputWidget( labelText: LocaleKeys.dob.tr(), - hintText: "11 July, 1994".needTranslation, + hintText: "11 July, 1994", controller: authVm.dobController, focusNode: _dobFocusNode, isEnable: true, diff --git a/lib/presentation/book_appointment/book_appointment_page.dart b/lib/presentation/book_appointment/book_appointment_page.dart index bcb2131..39d5eee 100644 --- a/lib/presentation/book_appointment/book_appointment_page.dart +++ b/lib/presentation/book_appointment/book_appointment_page.dart @@ -89,8 +89,8 @@ class _BookAppointmentPageState extends State { activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), initialIndex: bookAppointmentsVM.selectedTabIndex, tabs: [ - CustomTabBarModel(null, "General".needTranslation), - CustomTabBarModel(null, "LiveCare".needTranslation), + CustomTabBarModel(null, LocaleKeys.general.tr()), + CustomTabBarModel(null, LocaleKeys.liveCare.tr()), ], onTabChange: (index) { bookAppointmentsVM.onTabChanged(index); @@ -121,7 +121,7 @@ class _BookAppointmentPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ if (appState.isAuthenticated) ...[], - "Recent Visits".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h), + LocaleKeys.recentVisits.tr().toText18(isBold: true).paddingSymmetrical(24.w, 0.h), SizedBox(height: 16.h), SizedBox( height: 110.h, @@ -232,8 +232,8 @@ class _BookAppointmentPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Search By Clinic".needTranslation.toText14(color: AppColors.textColor, weight: FontWeight.w500), - "Tap to select clinic".needTranslation.toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), + LocaleKeys.searchByClinic.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500), + LocaleKeys.tapToSelectClinic.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), ], ), ], @@ -264,8 +264,8 @@ class _BookAppointmentPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Search By Doctor".needTranslation.toText14(color: AppColors.textColor, weight: FontWeight.w500), - "Tap to select".needTranslation.toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), + LocaleKeys.searchByDoctor.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500), + LocaleKeys.tapToSelect.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), ], ), ], @@ -294,8 +294,8 @@ class _BookAppointmentPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Search By Region".needTranslation.toText14(color: AppColors.textColor, weight: FontWeight.w500), - "Central Region".needTranslation.toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), + LocaleKeys.searchByRegion.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500), + LocaleKeys.centralRegion.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), ], ), ], @@ -340,8 +340,8 @@ class _BookAppointmentPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Immediate Consultation".needTranslation.toText14(color: AppColors.textColor, weight: FontWeight.w500), - "Tap to select clinic".needTranslation.toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), + LocaleKeys.immediateConsultation.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500), + LocaleKeys.tapToSelectClinic.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), ], ), ], @@ -382,8 +382,8 @@ class _BookAppointmentPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Scheduled Consultation".needTranslation.toText14(color: AppColors.textColor, weight: FontWeight.w500), - "Tap to select clinic".needTranslation.toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), + LocaleKeys.scheduledConsultation.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500), + LocaleKeys.tapToSelectClinic.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), ], ), ], @@ -412,8 +412,8 @@ class _BookAppointmentPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Pharma LiveCare".needTranslation.toText14(color: AppColors.textColor, weight: FontWeight.w500), - "".needTranslation.toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), + LocaleKeys.pharmaLiveCare.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500), + "".toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), ], ), ], @@ -447,9 +447,9 @@ class _BookAppointmentPageState extends State { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Not sure? help me choose a clinic!".needTranslation.toText16(weight: FontWeight.w600, color: AppColors.textColor), - SizedBox(height: 4.h), - "Mention your symptoms and find the list of doctors accordingly".needTranslation.toText12( + LocaleKeys.notSureHelpMeChooseClinic.tr().toText16(weight: FontWeight.w600, color: AppColors.textColor), + SizedBox(height: 8.h), + LocaleKeys.mentionYourSymptomsAndFindDoctors.tr().toText12( fontWeight: FontWeight.w500, color: AppColors.greyTextColor, ), @@ -558,8 +558,8 @@ class _BookAppointmentPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Immediate service".needTranslation.toText18(color: AppColors.textColor, isBold: true), - "No need to wait, you will get medical consultation immediately via video call".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), + LocaleKeys.immediateService.tr().toText18(color: AppColors.textColor, isBold: true), + LocaleKeys.noNeedToWaitGetMedicalConsultation.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), ), @@ -574,7 +574,7 @@ class _BookAppointmentPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "No visit required".needTranslation.toText18(color: AppColors.textColor, isBold: true), + LocaleKeys.noVisitRequired.tr().toText18(color: AppColors.textColor, isBold: true), LocaleKeys.livecarePoint5.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), @@ -590,8 +590,8 @@ class _BookAppointmentPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Doctor will contact".needTranslation.toText18(color: AppColors.textColor, isBold: true), - "A specialised doctor will contact you and will be able to view your medical history".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), + LocaleKeys.doctorWillContact.tr().toText18(color: AppColors.textColor, isBold: true), + LocaleKeys.specialisedDoctorWillContactYou.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), ), @@ -606,8 +606,8 @@ class _BookAppointmentPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Free medicine delivery".needTranslation.toText18(color: AppColors.textColor, isBold: true), - "Offers free medicine delivery for the LiveCare appointment".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), + LocaleKeys.freeMedicineDelivery.tr().toText18(color: AppColors.textColor, isBold: true), + LocaleKeys.offersFreeMedicineDelivery.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), ), @@ -615,7 +615,7 @@ class _BookAppointmentPageState extends State { ), SizedBox(height: 36.h), CustomButton( - text: "Login to use this service".needTranslation, + text: "Login to use this service", onPressed: () async { await authVM.onLoginPressed(); }, diff --git a/lib/presentation/book_appointment/dental_chief_complaints_page.dart b/lib/presentation/book_appointment/dental_chief_complaints_page.dart index 4dc3881..d2f2239 100644 --- a/lib/presentation/book_appointment/dental_chief_complaints_page.dart +++ b/lib/presentation/book_appointment/dental_chief_complaints_page.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; @@ -9,6 +10,7 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/chief_complaint_card.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; @@ -40,7 +42,7 @@ class _DentalChiefComplaintsPageState extends State { bookAppointmentsViewModel = Provider.of(context, listen: false); appState = getIt.get(); return CollapsingListView( - title: "Dental Chief Complaints".needTranslation, + title: LocaleKeys.dentalChiefComplaints.tr(), child: SingleChildScrollView( child: Padding( padding: EdgeInsets.symmetric(horizontal: 24.h), diff --git a/lib/presentation/book_appointment/doctor_filter/doctors_filter.dart b/lib/presentation/book_appointment/doctor_filter/doctors_filter.dart index e4d11bd..d9aa9e5 100644 --- a/lib/presentation/book_appointment/doctor_filter/doctors_filter.dart +++ b/lib/presentation/book_appointment/doctor_filter/doctors_filter.dart @@ -128,7 +128,7 @@ class DoctorsFilters extends StatelessWidget{ TextInputWidget( controller: TextEditingController()..text =context.watch().selectedClinicForFilters ??'', labelText: LocaleKeys.clinicName.tr(context: context), - hintText: LocaleKeys.searchClinic.tr().needTranslation, + hintText: LocaleKeys.searchClinic.tr(), isEnable: false, prefix: null, autoFocus: false, diff --git a/lib/presentation/book_appointment/doctor_profile_page.dart b/lib/presentation/book_appointment/doctor_profile_page.dart index 5ce7fac..72f242d 100644 --- a/lib/presentation/book_appointment/doctor_profile_page.dart +++ b/lib/presentation/book_appointment/doctor_profile_page.dart @@ -1,4 +1,5 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; @@ -8,6 +9,7 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; @@ -33,7 +35,7 @@ class DoctorProfilePage extends StatelessWidget { children: [ Expanded( child: CollapsingListView( - title: "Doctor Profile".needTranslation, + title: LocaleKeys.doctorProfile.tr(), child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -84,11 +86,11 @@ class DoctorProfilePage extends StatelessWidget { children: [ AppCustomChipWidget( iconColor: AppColors.ratingColorYellow, - labelText: "Branch: ${bookAppointmentsViewModel.doctorsProfileResponseModel.projectName}".needTranslation, + labelText: "${bookAppointmentsViewModel.doctorsProfileResponseModel.projectName}", ), AppCustomChipWidget( iconColor: AppColors.ratingColorYellow, - labelText: "Clinic: ${bookAppointmentsViewModel.doctorsProfileResponseModel.clinicDescription}".needTranslation, + labelText: "${bookAppointmentsViewModel.doctorsProfileResponseModel.clinicDescription}", ), ], ), @@ -142,7 +144,7 @@ class DoctorProfilePage extends StatelessWidget { hasShadow: true, ), child: CustomButton( - text: "View available appointments".needTranslation, + text: LocaleKeys.viewAvailableAppointments.tr(), onPressed: () async { LoaderBottomSheet.showLoader(); bookAppointmentsViewModel.isLiveCareSchedule @@ -151,7 +153,7 @@ class DoctorProfilePage extends StatelessWidget { onSuccess: (dynamic respData) async { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( - title: "Pick a Date".needTranslation, + title: LocaleKeys.pickADate.tr(), context, child: AppointmentCalendar(), isFullScreen: false, @@ -174,7 +176,7 @@ class DoctorProfilePage extends StatelessWidget { onSuccess: (dynamic respData) async { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( - title: "Pick a Date".needTranslation, + title: LocaleKeys.pickADate.tr(), context, child: AppointmentCalendar(), isFullScreen: false, diff --git a/lib/presentation/book_appointment/laser/laser_appointment.dart b/lib/presentation/book_appointment/laser/laser_appointment.dart index aae7990..3b94b0e 100644 --- a/lib/presentation/book_appointment/laser/laser_appointment.dart +++ b/lib/presentation/book_appointment/laser/laser_appointment.dart @@ -83,8 +83,8 @@ class LaserAppointment extends StatelessWidget { activeTextColor: Color(0xffED1C2B), activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), tabs: [ - CustomTabBarModel(null,LocaleKeys.malE.tr()), - CustomTabBarModel(null, "Female".needTranslation), + CustomTabBarModel(null, LocaleKeys.malE.tr()), + CustomTabBarModel(null, "Female"), ], onTabChange: (index) { var viewmodel = context.read(); diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart index 2371f4a..3e48f8b 100644 --- a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart +++ b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart @@ -45,7 +45,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { children: [ Expanded( child: CollapsingListView( - title: "Review LiveCare Request".needTranslation, + title: LocaleKeys.reviewLiveCareRequest.tr(context: context), child: SingleChildScrollView( padding: EdgeInsets.symmetric(horizontal: 24.h), child: Column( @@ -80,7 +80,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { spacing: 3.h, runSpacing: 4.h, children: [ - AppCustomChipWidget(labelText: "${appState.getAuthenticatedUser()!.age} Years Old".needTranslation), + AppCustomChipWidget(labelText: "${appState.getAuthenticatedUser()!.age} ${LocaleKeys.yearsOld.tr(context: context)}"), AppCustomChipWidget( labelText: "${LocaleKeys.clinic.tr()}: ${(appState.isArabic() ? immediateLiveCareViewModel.immediateLiveCareSelectedClinic.serviceNameN : immediateLiveCareViewModel.immediateLiveCareSelectedClinic.serviceName)!}"), @@ -93,7 +93,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { ), ), SizedBox(height: 24.h), - "Selected LiveCare Type".needTranslation.toText16(isBold: true), + LocaleKeys.selectedLiveCareType.tr(context: context).toText16(isBold: true), SizedBox(height: 16.h), Consumer(builder: (context, bookAppointmentsVM, child) { return Container( @@ -111,7 +111,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { children: [ Utils.buildSvgWithAssets(icon: AppAssets.livecare_clinic_icon, width: 32.h, height: 32.h, fit: BoxFit.contain), SizedBox(width: 8.h), - getLiveCareType(immediateLiveCareViewModel.liveCareSelectedCallType).toText16(isBold: true), + getLiveCareType(context, immediateLiveCareViewModel.liveCareSelectedCallType).toText16(isBold: true), ], ), Utils.buildSvgWithAssets(icon: AppAssets.edit_icon, width: 24.h, height: 24.h, fit: BoxFit.contain), @@ -121,7 +121,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { ).onPress(() { showCommonBottomSheetWithoutHeight(context, child: SelectLiveCareCallType(immediateLiveCareViewModel: immediateLiveCareViewModel), callBackFunc: () async { debugPrint("Selected Call Type: ${immediateLiveCareViewModel.liveCareSelectedCallType}"); - }, title: "Select LiveCare call type".needTranslation, isCloseButtonVisible: true, isFullScreen: false); + }, title: LocaleKeys.selectLiveCareCallType.tr(context: context), isCloseButtonVisible: true, isFullScreen: false); }); }), SizedBox(height: 24.h) @@ -152,7 +152,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "Insurance expired or inactive".needTranslation.toText14(color: AppColors.primaryRedColor, weight: FontWeight.w500).paddingSymmetrical(24.h, 0.h), + LocaleKeys.insuranceExpiredOrInactive.tr(context: context).toText14(color: AppColors.primaryRedColor, weight: FontWeight.w500).paddingSymmetrical(24.h, 0.h), CustomButton( text: LocaleKeys.updateInsurance.tr(context: context), onPressed: () { @@ -176,12 +176,12 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { ) : const SizedBox(), SizedBox(height: 24.h), - "Total amount to pay".needTranslation.toText18(isBold: true).paddingSymmetrical(24.h, 0.h), + LocaleKeys.totalAmountToPay.tr(context: context).toText18(isBold: true).paddingSymmetrical(24.h, 0.h), SizedBox(height: 17.h), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "Amount before tax".needTranslation.toText14(isBold: true), + LocaleKeys.amountBeforeTax.tr(context: context).toText14(isBold: true), Utils.getPaymentAmountWithSymbol(immediateLiveCareViewModel.liveCareImmediateAppointmentFeesList.amount!.toText16(isBold: true), AppColors.blackColor, 13, isSaudiCurrency: immediateLiveCareViewModel.liveCareImmediateAppointmentFeesList.currency!.toLowerCase() == "sar"), ], @@ -189,7 +189,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "VAT 15%".needTranslation.toText14(isBold: true, color: AppColors.greyTextColor), + LocaleKeys.vat15.tr(context: context).toText14(isBold: true, color: AppColors.greyTextColor), Utils.getPaymentAmountWithSymbol( immediateLiveCareViewModel.liveCareImmediateAppointmentFeesList.tax!.toText14(isBold: true, color: AppColors.greyTextColor), AppColors.greyTextColor, 13, isSaudiCurrency: immediateLiveCareViewModel.liveCareImmediateAppointmentFeesList.currency!.toLowerCase() == "sar"), @@ -210,7 +210,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { onPressed: () async { await askVideoCallPermission().then((val) async { if (val) { - LoaderBottomSheet.showLoader(loadingText: "Confirming LiveCare request, Please wait...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.confirmingLiveCareRequest.tr(context: context)); await immediateLiveCareViewModel.addNewCallRequestForImmediateLiveCare("${appState.getAuthenticatedUser()!.patientId}${DateTime.now().millisecondsSinceEpoch}"); await immediateLiveCareViewModel.getPatientLiveCareHistory(); @@ -230,7 +230,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { } else { showCommonBottomSheetWithoutHeight( context, - child: Utils.getErrorWidget(loadingText: "Unknown error occurred...".needTranslation), + child: Utils.getErrorWidget(loadingText: LocaleKeys.unknownErrorOccurred.tr(context: context)), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, @@ -241,9 +241,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { title: LocaleKeys.notice.tr(context: context), context, child: Utils.getWarningWidget( - loadingText: - "LiveCare requires Camera, Microphone, Location & Notifications permissions to enable virtual consultation between patient & doctor, Please allow these to proceed." - .needTranslation, + loadingText: LocaleKeys.liveCarePermissionsMessage.tr(context: context), isShowActionButtons: true, onCancelTap: () { Navigator.pop(context); @@ -285,9 +283,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { title: LocaleKeys.notice.tr(context: context), context, child: Utils.getWarningWidget( - loadingText: - "LiveCare requires Camera, Microphone, Location & Notifications permissions to enable virtual consultation between patient & doctor, Please allow these to proceed." - .needTranslation, + loadingText: LocaleKeys.liveCarePermissionsMessage.tr(context: context), isShowActionButtons: true, onCancelTap: () { Navigator.pop(context); @@ -351,16 +347,16 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget { // } } - String getLiveCareType(int callType) { + String getLiveCareType(BuildContext context, int callType) { switch (callType) { case 1: - return "Video Call".needTranslation; + return LocaleKeys.videoCall.tr(context: context); case 2: - return "Audio Call".needTranslation; + return LocaleKeys.audioCall.tr(context: context); case 3: - return "Phone Call".needTranslation; + return LocaleKeys.phoneCall.tr(context: context); default: - return "Video Call".needTranslation; + return LocaleKeys.videoCall.tr(context: context); } } } diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart index 48e79b1..9ae7ee3 100644 --- a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart +++ b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart @@ -84,7 +84,7 @@ class _ImmediateLiveCarePaymentPageState extends State { runSpacing: 8.h, children: [ AppCustomChipWidget( - labelText: "${LocaleKeys.clinic.tr(context: context)}: ${bookAppointmentsViewModel.selectedDoctor.clinicName}".needTranslation, + labelText: "${LocaleKeys.clinic.tr(context: context)}: ${bookAppointmentsViewModel.selectedDoctor.clinicName}", ), AppCustomChipWidget( - labelText: "${LocaleKeys.branch.tr(context: context)} ${bookAppointmentsViewModel.selectedDoctor.projectName}".needTranslation, + labelText: "${LocaleKeys.branch.tr(context: context)} ${bookAppointmentsViewModel.selectedDoctor.projectName}", ), AppCustomChipWidget( labelText: - "${LocaleKeys.date.tr(context: context)}: ${bookAppointmentsViewModel.isWaitingAppointmentSelected ? DateUtil.formatDateToDate(DateTime.now(), false) : bookAppointmentsViewModel.selectedAppointmentDate}" - .needTranslation, + "${LocaleKeys.date.tr(context: context)}: ${bookAppointmentsViewModel.isWaitingAppointmentSelected ? DateUtil.formatDateToDate(DateTime.now(), false) : bookAppointmentsViewModel.selectedAppointmentDate}", ), AppCustomChipWidget( labelText: - "${LocaleKeys.time.tr(context: context)}: ${bookAppointmentsViewModel.isWaitingAppointmentSelected ? "Waiting Appointment".needTranslation : bookAppointmentsViewModel.selectedAppointmentTime}" - .needTranslation, + "${LocaleKeys.time.tr(context: context)}: ${bookAppointmentsViewModel.isWaitingAppointmentSelected ? LocaleKeys.waitingAppointment.tr(context: context) : bookAppointmentsViewModel.selectedAppointmentTime}", ), ], ), @@ -166,7 +164,7 @@ class _ReviewAppointmentPageState extends State { ), ), SizedBox(height: 24.h), - "Hospital Information".needTranslation.toText16(isBold: true), + LocaleKeys.hospitalInformation.tr(context: context).toText16(isBold: true), SizedBox(height: 16.h), Container( width: double.infinity, @@ -241,7 +239,7 @@ class _ReviewAppointmentPageState extends State { } void getWalkInAppointmentPatientShare() async { - LoaderBottomSheet.showLoader(loadingText: "Fetching Appointment Share...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingAppointmentShare.tr(context: context)); await bookAppointmentsViewModel.getWalkInPatientShareAppointment(onSuccess: (val) { LoaderBottomSheet.hideLoader(); Navigator.of(context).push( @@ -262,7 +260,7 @@ class _ReviewAppointmentPageState extends State { } void initiateBookAppointment() async { - LoadingUtils.showFullScreenLoader(barrierDismissible: true, isSuccessDialog: false, loadingText: "Booking your appointment...".needTranslation); + LoadingUtils.showFullScreenLoader(barrierDismissible: true, isSuccessDialog: false, loadingText: LocaleKeys.bookingYourAppointment.tr(context: context)); myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true); if (bookAppointmentsViewModel.isLiveCareSchedule) { diff --git a/lib/presentation/book_appointment/search_doctor_by_name.dart b/lib/presentation/book_appointment/search_doctor_by_name.dart index 9f2da16..fa871f5 100644 --- a/lib/presentation/book_appointment/search_doctor_by_name.dart +++ b/lib/presentation/book_appointment/search_doctor_by_name.dart @@ -52,7 +52,7 @@ class _SearchDoctorByNameState extends State { children: [ Expanded( child: CollapsingListView( - title: "Choose Doctor".needTranslation, + title: LocaleKeys.chooseDoctor.tr(), child: SingleChildScrollView( child: Padding( padding: EdgeInsets.symmetric(horizontal: 24.h), @@ -228,7 +228,7 @@ class _SearchDoctorByNameState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ CustomButton( - text: "${groupedDoctors[index].length} ${'doctors'.needTranslation}", + text: "${groupedDoctors[index].length} ${'doctors'}", onPressed: () {}, backgroundColor: AppColors.greyColor, borderColor: AppColors.greyColor, diff --git a/lib/presentation/book_appointment/select_clinic_page.dart b/lib/presentation/book_appointment/select_clinic_page.dart index 15c8654..e76e1c9 100644 --- a/lib/presentation/book_appointment/select_clinic_page.dart +++ b/lib/presentation/book_appointment/select_clinic_page.dart @@ -103,7 +103,7 @@ class _SelectClinicPageState extends State { return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: CollapsingListView( - title: bookAppointmentsViewModel.isLiveCareSchedule ? "Select LiveCare Clinic".needTranslation : LocaleKeys.selectClinic.tr(context: context), + title: bookAppointmentsViewModel.isLiveCareSchedule ? LocaleKeys.selectLiveCareClinic.tr(context: context) : LocaleKeys.selectClinic.tr(context: context), child: SingleChildScrollView( child: Padding( padding: EdgeInsets.symmetric(horizontal: 24.h), @@ -1114,18 +1114,18 @@ class _SelectClinicPageState extends State { void initDentalAppointmentBookingFlow(int projectID) async { bookAppointmentsViewModel.setProjectID(projectID.toString()); - LoaderBottomSheet.showLoader(loadingText: "Checking for an existing dental plan, Please wait...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingForExistingDentalPlan.tr(context: context)); await bookAppointmentsViewModel.getPatientDentalEstimation(projectID: projectID).then((value) { LoaderBottomSheet.hideLoader(); if (bookAppointmentsViewModel.patientDentalPlanEstimationList.isNotEmpty) { showCommonBottomSheetWithoutHeight( // title: LocaleKeys.notice.tr(context: context), - title: "Dental treatment plan".needTranslation, + title: LocaleKeys.dentalTreatmentPlan.tr(context: context), context, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "You have an existing treatment plan: ".needTranslation.toText14(weight: FontWeight.w500), + LocaleKeys.youHaveExistingTreatmentPlan.tr(context: context).toText14(weight: FontWeight.w500), SizedBox(height: 8.h), Container( width: double.infinity, @@ -1156,7 +1156,7 @@ class _SelectClinicPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ bookAppointmentsViewModel.patientDentalPlanEstimationList[index].procedureName!.toText12(isBold: true), - AppCustomChipWidget(icon: AppAssets.appointment_time_icon, labelText: "${bookAppointmentsViewModel.totalTimeNeededForDentalProcedure} Mins".needTranslation), + AppCustomChipWidget(icon: AppAssets.appointment_time_icon, labelText: "${bookAppointmentsViewModel.totalTimeNeededForDentalProcedure} ${LocaleKeys.mins.tr(context: context)}"), ], ); }, @@ -1171,15 +1171,15 @@ class _SelectClinicPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - "Total time required".needTranslation.toText14(isBold: true), - AppCustomChipWidget(icon: AppAssets.appointment_time_icon, labelText: "30 Mins".needTranslation), + LocaleKeys.totalTimeRequired.tr(context: context).toText14(isBold: true), + AppCustomChipWidget(icon: AppAssets.appointment_time_icon, labelText: "30 ${LocaleKeys.mins.tr(context: context)}"), ], ) ], ), ), SizedBox(height: 16.h), - "Would you like to continue it?".needTranslation.toText14(weight: FontWeight.w500), + LocaleKeys.wouldYouLikeToContinue.tr(context: context).toText14(weight: FontWeight.w500), SizedBox(height: 16.h), Row( children: [ diff --git a/lib/presentation/book_appointment/select_doctor_page.dart b/lib/presentation/book_appointment/select_doctor_page.dart index 2f8747d..e57ed51 100644 --- a/lib/presentation/book_appointment/select_doctor_page.dart +++ b/lib/presentation/book_appointment/select_doctor_page.dart @@ -75,7 +75,7 @@ class _SelectDoctorPageState extends State { return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: CollapsingListView( - title: "Choose Doctor".needTranslation, + title: LocaleKeys.chooseDoctor.tr(), // bottomChild: Container( // decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.only(topLeft: Radius.circular(24.r), topRight: Radius.circular(24.r))), // padding: EdgeInsets.symmetric(vertical: 20.h, horizontal: 20.h), @@ -178,7 +178,7 @@ class _SelectDoctorPageState extends State { children: [ LocaleKeys.nearestAppo.tr(context: context).toText13(isBold: true), SizedBox(height: 4.h), - "View nearest available appointments".needTranslation.toText11(color: AppColors.textColorLight, weight: FontWeight.w500), + LocaleKeys.viewNearestAppos.toText11(color: AppColors.textColorLight, weight: FontWeight.w500), ], ), const Spacer(), @@ -207,7 +207,7 @@ class _SelectDoctorPageState extends State { bookAppointmentsViewModel: bookAppointmentsViewModel, ) : bookAppointmentsVM.doctorsListGrouped.isEmpty - ? Utils.getNoDataWidget(context, noDataText: "No Doctor found for selected criteria...".needTranslation) + ? Utils.getNoDataWidget(context, noDataText: LocaleKeys.noDoctorFound.tr()) : AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 500), @@ -245,7 +245,7 @@ class _SelectDoctorPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ CustomButton( - text: "${bookAppointmentsVM.doctorsListGrouped[index].length} ${'doctors'.needTranslation}", + text: "${bookAppointmentsVM.doctorsListGrouped[index].length} ${'doctors'}", onPressed: () {}, backgroundColor: AppColors.greyColor, borderColor: AppColors.greyColor, diff --git a/lib/presentation/book_appointment/select_livecare_clinic_page.dart b/lib/presentation/book_appointment/select_livecare_clinic_page.dart index 502e38d..87ab0eb 100644 --- a/lib/presentation/book_appointment/select_livecare_clinic_page.dart +++ b/lib/presentation/book_appointment/select_livecare_clinic_page.dart @@ -54,8 +54,8 @@ class SelectLivecareClinicPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Immediate service".needTranslation.toText18(color: AppColors.textColor, isBold: true), - "No need to wait, you will get medical consultation immediately via video call".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), + LocaleKeys.immediateService.tr(context: context).toText18(color: AppColors.textColor, isBold: true), + LocaleKeys.noNeedToWaitGetMedicalConsultation.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), ), @@ -70,7 +70,7 @@ class SelectLivecareClinicPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "No visit required".needTranslation.toText18(color: AppColors.textColor, isBold: true), + LocaleKeys.noVisitRequired.tr(context: context).toText18(color: AppColors.textColor, isBold: true), LocaleKeys.livecarePoint5.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), @@ -86,8 +86,8 @@ class SelectLivecareClinicPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Doctor will contact".needTranslation.toText18(color: AppColors.textColor, isBold: true), - "A specialised doctor will contact you and will be able to view your medical history".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), + LocaleKeys.doctorWillContact.tr(context: context).toText18(color: AppColors.textColor, isBold: true), + LocaleKeys.specialisedDoctorWillContactYou.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), ), @@ -102,8 +102,8 @@ class SelectLivecareClinicPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Free medicine delivery".needTranslation.toText18(color: AppColors.textColor, isBold: true), - "Offers free medicine delivery for the LiveCare appointment".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), + LocaleKeys.freeMedicineDelivery.tr(context: context).toText18(color: AppColors.textColor, isBold: true), + LocaleKeys.offersFreeMedicineDelivery.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), ), @@ -117,7 +117,7 @@ class SelectLivecareClinicPage extends StatelessWidget { Column( children: [ CustomButton( - text: "Yes please, I am in a hurry".needTranslation, + text: LocaleKeys.yesPleasImInAHurry.tr(context: context), onPressed: () async { Navigator.pop(context); GetLiveCareClinicListResponseModel liveCareClinic = GetLiveCareClinicListResponseModel( @@ -129,7 +129,7 @@ class SelectLivecareClinicPage extends StatelessWidget { immediateLiveCareViewModel.setLiveCareSelectedCallType(1); immediateLiveCareViewModel.setImmediateLiveCareSelectedClinic(liveCareClinic); - LoaderBottomSheet.showLoader(loadingText: "Fetching fees, Please wait...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingFeesPleaseWait.tr(context: context)); await immediateLiveCareViewModel.getLiveCareImmediateAppointmentFees(onSuccess: (val) { LoaderBottomSheet.hideLoader(); Navigator.of(getIt.get().navigatorKey.currentContext!).push( @@ -162,7 +162,7 @@ class SelectLivecareClinicPage extends StatelessWidget { ).paddingSymmetrical(24.h, 0.h), SizedBox(height: 16.h), CustomButton( - text: "No, Thanks. I would like a physical visit".needTranslation, + text: LocaleKeys.noThanksPhysicalVisit.tr(context: context), onPressed: () { Navigator.of(context).pop(); onNegativeClicked?.call(); diff --git a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart index f832db6..19d0fb4 100644 --- a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart +++ b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart @@ -28,7 +28,7 @@ class WaitingAppointmentInfo extends StatelessWidget { children: [ Expanded( child: CollapsingListView( - title: "Waiting Appointment".needTranslation, + title: LocaleKeys.waitingAppointment.tr(), child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -47,13 +47,11 @@ class WaitingAppointmentInfo extends StatelessWidget { children: [ Utils.buildSvgWithAssets(icon: AppAssets.waiting_appointment_icon, width: 48.h, height: 48.h, fit: BoxFit.contain), SizedBox(height: 16.h), - "What is Waiting Appointment?".needTranslation.toText16(isBold: true), + LocaleKeys.whatIsWaitingAppointment.tr(context: context).toText16(isBold: true), SizedBox(height: 16.h), - "The waiting appointments feature allows you to book an appointment while you are inside the hospital building, and in case there is no available slot in the doctor’s schedule." - .needTranslation - .toText14(isBold: false), + LocaleKeys.waitingAppointmentsFeature.tr(context: context).toText14(isBold: false), SizedBox(height: 16.h), - "The appointment with the doctor is confirmed, but the time of entry is uncertain.".needTranslation.toText14(isBold: false), + LocaleKeys.appointmentWithDoctorConfirmed.tr(context: context).toText14(isBold: false), SizedBox(height: 24.h), Row( crossAxisAlignment: CrossAxisAlignment.start, @@ -66,9 +64,7 @@ class WaitingAppointmentInfo extends StatelessWidget { SizedBox(width: 10.w), SizedBox( width: MediaQuery.of(context).size.width * 0.7, - child: "Note: You must have to pay within 10 minutes of booking, otherwise your appointment will be cancelled automatically" - .needTranslation - .toText14(isBold: true, color: AppColors.warningColorYellow), + child: LocaleKeys.paymentWithinTenMinutes.tr(context: context).toText14(isBold: true, color: AppColors.warningColorYellow), ), ], ), @@ -88,7 +84,7 @@ class WaitingAppointmentInfo extends StatelessWidget { hasShadow: true, ), child: CustomButton( - text: "Continue".needTranslation, + text: LocaleKeys.continueString.tr(), onPressed: () async { showCommonBottomSheetWithoutHeight(context, title: LocaleKeys.onlineCheckIn.tr(), diff --git a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart index 4a2a304..6f3a773 100644 --- a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart +++ b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart @@ -1,3 +1,4 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_nfc_kit/flutter_nfc_kit.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; @@ -10,6 +11,7 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/review_appointment_page.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:barcode_scan2/barcode_scan2.dart'; @@ -42,14 +44,9 @@ class WaitingAppointmentOnlineCheckinSheet extends StatelessWidget { children: [ checkInOptionCard( AppAssets.checkin_location_icon, - "Live Location".needTranslation, - "Verify your location to be at hospital to check in".needTranslation, + LocaleKeys.liveLocation.tr(), + LocaleKeys.verifyYourLocationAtHospital.tr(), ).onPress(() { - // locationUtils = LocationUtils( - // isShowConfirmDialog: false, - // navigationService: myAppointmentsViewModel.navigationService, - // appState: myAppointmentsViewModel.appState, - // ); locationUtils.getCurrentLocation(onSuccess: (value) { projectDetailListModel = Utils.getProjectDetailObj(appState, bookAppointmentsViewModel.waitingAppointmentProjectID); double dist = Utils.distance(value.latitude, value.longitude, double.parse(projectDetailListModel.latitude!), double.parse(projectDetailListModel.longitude!)).ceilToDouble() * 1000; @@ -58,8 +55,8 @@ class WaitingAppointmentOnlineCheckinSheet extends StatelessWidget { checkScannedNFCAndQRCode(projectDetailListModel.checkInQrCode!, context); } else { showCommonBottomSheetWithoutHeight(context, - title: "Error".needTranslation, - child: Utils.getErrorWidget(loadingText: "Please ensure you're within the hospital location to perform online check-in.".needTranslation), callBackFunc: () { + title: LocaleKeys.error.tr(), + child: Utils.getErrorWidget(loadingText: LocaleKeys.ensureWithinHospitalLocation.tr()), callBackFunc: () { Navigator.of(context).pop(); }, isFullScreen: false); } @@ -68,8 +65,8 @@ class WaitingAppointmentOnlineCheckinSheet extends StatelessWidget { SizedBox(height: 16.h), checkInOptionCard( AppAssets.checkin_nfc_icon, - "NFC (Near Field Communication)".needTranslation, - "Scan your phone via NFC board to check in".needTranslation, + LocaleKeys.nfcNearFieldCommunication.tr(), + LocaleKeys.scanPhoneViaNFC.tr(), ).onPress(() { Future.delayed(const Duration(milliseconds: 500), () { showNfcReader(context, onNcfScan: (String nfcId) { @@ -82,8 +79,8 @@ class WaitingAppointmentOnlineCheckinSheet extends StatelessWidget { SizedBox(height: 16.h), checkInOptionCard( AppAssets.checkin_qr_icon, - "QR Code".needTranslation, - "Scan QR code with your camera to check in".needTranslation, + LocaleKeys.qrCode.tr(), + LocaleKeys.scanQRCodeToCheckIn.tr() ).onPress(() async { String onlineCheckInQRCode = (await BarcodeScanner.scan().then((value) => value.rawContent)); if (onlineCheckInQRCode != "") { @@ -136,7 +133,7 @@ class WaitingAppointmentOnlineCheckinSheet extends StatelessWidget { } void checkScannedNFCAndQRCode(String scannedCode, BuildContext context) async { - LoaderBottomSheet.showLoader(loadingText: "Processing Check-In...".needTranslation); + LoaderBottomSheet.showLoader(loadingText: LocaleKeys.processingCheckIn.tr()); bookAppointmentsViewModel.checkScannedNFCAndQRCode( scannedCode, bookAppointmentsViewModel.waitingAppointmentProjectID, @@ -152,7 +149,7 @@ class WaitingAppointmentOnlineCheckinSheet extends StatelessWidget { }, onError: (err) { LoaderBottomSheet.hideLoader(); - showCommonBottomSheetWithoutHeight(context, title: "Error".needTranslation, child: Utils.getErrorWidget(loadingText: err), callBackFunc: () { + showCommonBottomSheetWithoutHeight(context, title: LocaleKeys.error.tr(), child: Utils.getErrorWidget(loadingText: err), callBackFunc: () { // Navigator.of(context).pop(); }, isFullScreen: false); }, diff --git a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart index 8cfe6dd..ca60e9e 100644 --- a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart +++ b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart @@ -94,7 +94,7 @@ class _WaitingAppointmentPaymentPageState extends State { ), SizedBox(height: 16.h), CustomButton( - text: "Select".needTranslation, + text: LocaleKeys.select.tr(context: context), onPressed: () async { if (appState.isAuthenticated) { - if(selectedTime == "Waiting Appointment".needTranslation){ + if(selectedTime == LocaleKeys.waitingAppointment.tr(context: context)){ bookAppointmentsViewModel.setWaitingAppointmentProjectID(bookAppointmentsViewModel.selectedDoctor.projectID!); bookAppointmentsViewModel.setWaitingAppointmentDoctor(bookAppointmentsViewModel.selectedDoctor); @@ -293,7 +293,7 @@ class _AppointmentCalendarState extends State { dayEvents.clear(); DateTime dateStartObj = new DateTime(dateStart.year, dateStart.month, dateStart.day, 0, 0, 0, 0, 0); if (bookAppointmentsViewModel.isWaitingAppointmentAvailable && DateUtils.isSameDay(dateStart, DateTime.now())) { - dayEvents.add(TimeSlot(isoTime: "Waiting Appointment".needTranslation, start: DateTime.now(), end: DateTime.now(), vidaDate: "")); + dayEvents.add(TimeSlot(isoTime: LocaleKeys.waitingAppointment.tr(context: context), start: DateTime.now(), end: DateTime.now(), vidaDate: "")); } freeSlots.forEach((v) { if (v.start == dateStartObj) dayEvents.add(v); @@ -332,7 +332,7 @@ class TimeSlotChip extends StatelessWidget { Widget build(BuildContext context) { return GestureDetector( onTap: onTap, - child: label == "Waiting Appointment".needTranslation + child: label == LocaleKeys.waitingAppointment.tr(context: context) ? Container( padding: EdgeInsets.symmetric(horizontal: 14.h, vertical: 8.h), decoration: ShapeDecoration( diff --git a/lib/presentation/book_appointment/widgets/doctor_card.dart b/lib/presentation/book_appointment/widgets/doctor_card.dart index d2e1c0b..97a941d 100644 --- a/lib/presentation/book_appointment/widgets/doctor_card.dart +++ b/lib/presentation/book_appointment/widgets/doctor_card.dart @@ -137,15 +137,15 @@ class DoctorCard extends StatelessWidget { runSpacing: 4.h, children: [ AppCustomChipWidget( - labelText: "${isLoading ? "Cardiologist" : doctorsListResponseModel.clinicName}".needTranslation, + labelText: "${isLoading ? "Cardiologist" : doctorsListResponseModel.clinicName}", ).toShimmer2(isShow: isLoading), AppCustomChipWidget( - labelText: "${isLoading ? "Olaya Hospital" : doctorsListResponseModel.projectName}".needTranslation, + labelText: "${isLoading ? "Olaya Hospital" : doctorsListResponseModel.projectName}", ).toShimmer2(isShow: isLoading), bookAppointmentsViewModel.isNearestAppointmentSelected ? doctorsListResponseModel.nearestFreeSlot != null ? AppCustomChipWidget( - labelText: (isLoading ? "Cardiologist" : DateUtil.getDateStringForNearestSlot(doctorsListResponseModel.nearestFreeSlot)).needTranslation, + labelText: (isLoading ? "Cardiologist" : DateUtil.getDateStringForNearestSlot(doctorsListResponseModel.nearestFreeSlot)), backgroundColor: AppColors.successColor, textColor: AppColors.whiteColor, ).toShimmer2(isShow: isLoading) @@ -165,7 +165,7 @@ class DoctorCard extends StatelessWidget { onSuccess: (dynamic respData) async { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( - title: "Pick a Date".needTranslation, + title: LocaleKeys.pickADate.tr(context: context), context, child: AppointmentCalendar(), isFullScreen: false, @@ -188,7 +188,7 @@ class DoctorCard extends StatelessWidget { onSuccess: (dynamic respData) async { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( - title: "Pick a Date".needTranslation, + title: LocaleKeys.pickADate.tr(context: context), context, child: AppointmentCalendar(), isFullScreen: false, diff --git a/lib/presentation/comprehensive_checkup/cmc_order_detail_page.dart b/lib/presentation/comprehensive_checkup/cmc_order_detail_page.dart index 7547fd0..dd836a6 100644 --- a/lib/presentation/comprehensive_checkup/cmc_order_detail_page.dart +++ b/lib/presentation/comprehensive_checkup/cmc_order_detail_page.dart @@ -10,6 +10,7 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_all_orders_resp_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/comprehensive_checkup/widgets/cmc_ui_selection_helper.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; @@ -124,7 +125,7 @@ class _CmcOrderDetailPageState extends State { Row( children: [ if (!isLoading) ...[ - "Request ID:".needTranslation.toText14( + LocaleKeys.requestID.tr(context: context).toText14( color: AppColors.textColorLight, weight: FontWeight.w500, ), @@ -164,7 +165,7 @@ class _CmcOrderDetailPageState extends State { children: [ Expanded( child: CustomButton( - text: "Cancel Order".needTranslation, + text: LocaleKeys.cancelOrder.tr(context: context), onPressed: isLoading ? () {} : () => CmcUiSelectionHelper.showCancelConfirmationDialog(context: context, order: order), backgroundColor: AppColors.primaryRedColor, borderColor: AppColors.primaryRedColor, @@ -196,7 +197,7 @@ class _CmcOrderDetailPageState extends State { ), child: Utils.getNoDataWidget( context, - noDataText: "You don't have any CMC orders yet.".needTranslation, + noDataText: LocaleKeys.noCMCOrdersYet.tr(context: context), isSmallWidget: true, width: 62.w, height: 62.h, @@ -209,7 +210,7 @@ class _CmcOrderDetailPageState extends State { @override Widget build(BuildContext context) { return CollapsingListView( - title: "CMC Orders".needTranslation, + title: LocaleKeys.cmcOrders.tr(context: context), isLeading: true, child: SingleChildScrollView( child: Column( diff --git a/lib/presentation/comprehensive_checkup/widgets/cmc_hospital_bottom_sheet_body.dart b/lib/presentation/comprehensive_checkup/widgets/cmc_hospital_bottom_sheet_body.dart index 98e91b8..93c8d5f 100644 --- a/lib/presentation/comprehensive_checkup/widgets/cmc_hospital_bottom_sheet_body.dart +++ b/lib/presentation/comprehensive_checkup/widgets/cmc_hospital_bottom_sheet_body.dart @@ -55,7 +55,7 @@ class CmcHospitalBottomSheetBody extends StatelessWidget { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Choose your preferred hospital for the service".needTranslation.toText14( + LocaleKeys.choosePreferredHospitalForService.tr(context: context).toText14( weight: FontWeight.w400, color: AppColors.greyTextColor, letterSpacing: -0.4, @@ -85,7 +85,7 @@ class CmcHospitalBottomSheetBody extends StatelessWidget { ? _buildLoadingShimmer() : hmgServicesViewModel.filteredHospitalsList.isEmpty ? Center( - child: "No hospitals Found".needTranslation.toText16(weight: FontWeight.w500, color: AppColors.greyTextColor), + child: LocaleKeys.noHospitalsFound.tr(context: context).toText16(weight: FontWeight.w500, color: AppColors.greyTextColor), ) : ListView.separated( itemCount: hmgServicesViewModel.filteredHospitalsList.length, diff --git a/lib/presentation/comprehensive_checkup/widgets/cmc_hospital_list_item.dart b/lib/presentation/comprehensive_checkup/widgets/cmc_hospital_list_item.dart index 39d6d7c..25cd506 100644 --- a/lib/presentation/comprehensive_checkup/widgets/cmc_hospital_list_item.dart +++ b/lib/presentation/comprehensive_checkup/widgets/cmc_hospital_list_item.dart @@ -97,7 +97,7 @@ class CmcHospitalListItem extends StatelessWidget { Visibility( visible: (hospital.distanceInKilometers != null && hospital.distanceInKilometers! > 0), child: AppCustomChipWidget( - labelText: "$distanceText km".needTranslation, + labelText: "$distanceText km", icon: AppAssets.location_red, iconColor: AppColors.errorColor, backgroundColor: AppColors.secondaryLightRedColor, @@ -107,7 +107,7 @@ class CmcHospitalListItem extends StatelessWidget { Visibility( visible: (hospital.distanceInKilometers == null || hospital.distanceInKilometers == 0), child: AppCustomChipWidget( - labelText: " Distance not available".needTranslation, + labelText: " Distance not available", textColor: AppColors.blackColor, ), ), diff --git a/lib/presentation/comprehensive_checkup/widgets/cmc_ui_selection_helper.dart b/lib/presentation/comprehensive_checkup/widgets/cmc_ui_selection_helper.dart index 908aac9..fcce480 100644 --- a/lib/presentation/comprehensive_checkup/widgets/cmc_ui_selection_helper.dart +++ b/lib/presentation/comprehensive_checkup/widgets/cmc_ui_selection_helper.dart @@ -24,7 +24,7 @@ class CmcUiSelectionHelper { showCommonBottomSheetWithoutHeight( context, - title: "Select Hospital".needTranslation, + title: LocaleKeys.selectHospital.tr(context: context), child: CmcHospitalBottomSheetBody( onHospitalSelected: (hospital) { hmgServicesViewModel.setSelectedHospitalForOrder(hospital); @@ -44,7 +44,7 @@ class CmcUiSelectionHelper { title: LocaleKeys.notice.tr(context: context), context, child: Utils.getWarningWidget( - loadingText: "Are you sure you want to cancel this order?".needTranslation, + loadingText: LocaleKeys.cancelOrderConfirmation.tr(context: context), isShowActionButtons: true, onCancelTap: () { Navigator.pop(context); @@ -70,7 +70,7 @@ class CmcUiSelectionHelper { padding: EdgeInsets.all(16.w), child: Column( children: [ - Utils.getSuccessWidget(loadingText: "Order has been cancelled successfully".needTranslation), + Utils.getSuccessWidget(loadingText: LocaleKeys.orderCancelledSuccessfully.tr(context: context)), SizedBox(height: 24.h), Row( children: [