translation updates

pull/159/head
haroon amjad 2 months ago
parent 96ccb40f36
commit 87422e8e05

@ -525,7 +525,7 @@
"payOnline": "الدفع عبر الإنترنت",
"cancelOrder": "إلغاء الطلب",
"confirmAddress": "تأكيد العنوان ",
"confirmLocation": "<EFBFBD><EFBFBD>أكيد الموقع ",
"confirmLocation": "أكيد الموقع ",
"conditionsHMG": "الشروط والأحكام ",
"conditions": "الشروط والأحكام لكوم",
"confirmDeleteMsg": "هل أنت متأكد! تريد الحذف ",
@ -1095,5 +1095,123 @@
"pickupFromHome": "الاستلام من المنزل",
"onTheWayToHospital": " في الطريق إلى المستشفى",
"arrivedAtHospital": "وصل إلى المستشفى",
"orderCancel": "إلغاء الطلب"
"orderCancel": "إلغاء الطلب",
"emergencyCheckIn": "تسجيل الطوارئ الإلكتروني",
"erOnlineCheckInDescription": "تتيح هذه الخدمة للمرضى تسجيل موعد الطوارئ قبل الوصول.",
"erOnlineCheckInSuccess": "تم تسجيل وصول الطوارئ بنجاح. الرجاء التوجه إلى منطقة الانتظار.",
"erOnlineCheckInError": "حدث خطأ غير متوقع أثناء عملية التسجيل. يرجى التواصل مع الدعم.",
"fetchingHospitalsList": "جاري جلب قائمة المستشفيات...",
"fetchingPaymentInformation": "جاري جلب معلومات الدفع...",
"erVisitDetails": "تفاصيل زيارة الطوارئ",
"erClinic": "عيادة الطوارئ",
"vatWithAmount": "الضريبة 15% ({amount})",
"erAppointmentBookedSuccess": "تم حجز موعدك بنجاح. يرجى إتمام إجراءات تسجيل الوصول عند وصولك إلى المستشفى.",
"underProcessing": "قيد المعالجة",
"canceledByPatient": "ملغى بواسطة المريض",
"rapidResponseTeam": "فريق الاستجابة السريع",
"allFacilities": "جميع المرافق",
"selectLocation": "اختر الموقع",
"pleaseSelectTheLocation": "يرجى اختيار الموقع",
"viewLocationGoogleMaps": "عرض الموقع على خرائط جوجل",
"callAmbulance": "استدعاء سيارة إسعاف",
"requestAmbulanceInEmergency": "طلب سيارة إسعاف في حالة الطوارئ من المنزل أو المستشفى",
"confirmation": "تأكيد",
"areYouSureYouWantToCallAmbulance": "هل أنت متأكد أنك تريد استدعاء سيارة إسعاف؟",
"getDetailsOfNearestBranch": "احصل على تفاصيل أقرب فرع بما في ذلك الاتجاهات",
"areYouSureYouWantToCallRRT": "هل أنت متأكد أنك تريد استدعاء فريق الاستجابة السريعة (RRT)؟",
"priorERCheckInToSkipLine": "تسجيل الوصول المسبق في الطوارئ لتجاوز الطابور والدفع في الاستقبال.",
"areYouSureYouWantToMakeERCheckIn": "هل أنت متأكد أنك تريد إجراء تسجيل وصول الطوارئ؟",
"checkingYourERAppointmentStatus": "جاري التحقق من حالة موعد الطوارئ الخاص بك...",
"transportOptions": "خيارات النقل",
"selectHospitalForAdvancePayment": "يرجى اختيار المستشفى الذي ترغب في دفع مبلغ مقدم له.",
"recharge": "إعادة الشحن",
"activityLevel": "مستوى النشاط",
"selectActivityLevel": "حدد مستوى النشاط",
"caloriesPerDay": "السعرات الحرارية في اليوم الواحد",
"dietType": "نوع النظام الغذائي",
"selectDietType": "حدد نوع النظام الغذائي",
"bodyFrameSize": "حجم إطار الجسم",
"selectBodyFrameSize": "حدد حجم إطار الجسم",
"averageCycleLength": "متوسط طول الدورة الشهرية (عادةً 28 يومًا)",
"averageLutealPhase": "متوسط طول المرحلة الأصفرية (عادةً 14 يومًا)",
"convert": "يتحول",
"calculate": "احسب",
"healthCalculators": "حاسبات الصحة",
"healthConverters": "محولات الصحة",
"generalHealth": "الصحة العامة",
"relatedToBMICalories": "متعلق بمؤشر كتلة الجسم والسعرات الحرارية ودهون الجسم وما إلى ذلك للبقاء على اطلاع دائم بصحتك.",
"selectCalculator": "اختر الآلة الحاسبة",
"womensHealth": "صحة المرأة",
"relatedToPeriodsOvulation": "متعلق بالدورة الشهرية والإباضة والحمل ومواضيع أخرى.",
"bloodSugar": "سكر الدم",
"trackYourGlucoseLevels": "تتبع مستويات الجلوكوز لديك، وفهم الاتجاهات، واحصل على رؤى مخصصة لصحة أفضل.",
"bloodCholesterol": "كوليسترول الدم",
"monitorCholesterolLevels": "راقب مستويات الكوليسترول، وقيّم مخاطر صحة القلب، واتخذ خطوات استباقية للرفاهية.",
"triglyceridesFatBlood": "الدهون الثلاثية في الدم",
"understandTriglyceridesImpact": "افهم تأثير الدهون الثلاثية على صحة القلب مع رؤى مخصصة وتوصيات الخبراء.",
"bmiCalculator": "حاسبة\nمؤشر كتلة الجسم",
"caloriesCalculator": "حاسبة\nالسعرات الحرارية",
"bmrCalculator": "حاسبة\nمعدل الأيض الأساسي",
"idealBodyWeight": "الوزن المثالي\nللجسم",
"bodyFatCalculator": "حاسبة\nدهون الجسم",
"carbsProteinFat": "الكربوهيدرات\nالبروتين والدهون",
"ovulationPeriod": "فترة\nالإباضة",
"deliveryDueDate": "تاريخ الولادة\nالمتوقع",
"low": "منخفض",
"preDiabetic": "ما قبل السكري",
"high": "مرتفع",
"elevated": "مرتفع قليلاً",
"recorded": "مسجل",
"noRecordsYet": "لا توجد سجلات بعد",
"lastRecord": "آخر سجل",
"addBloodSugar": "إضافة سكر الدم",
"addBloodPressure": "إضافة ضغط الدم",
"addWeight": "إضافة الوزن",
"bloodSugarDataSavedSuccessfully": "تم حفظ بيانات سكر الدم بنجاح",
"bloodPressureDataSavedSuccessfully": "تم حفظ بيانات ضغط الدم بنجاح",
"weightDataSavedSuccessfully": "تم حفظ بيانات الوزن بنجاح",
"pleaseWait": "يرجى الانتظار",
"selectUnit": "اختر الوحدة",
"selectMeasureTime": "اختر وقت القياس",
"selectArm": "اختر الذراع",
"enterBloodSugar": "أدخل سكر الدم",
"enterSystolicValue": "أدخل القيمة الانقباضية",
"enterDiastolicValue": "أدخل القيمة الانبساطية",
"enterWeight": "أدخل الوزن",
"selectDuration": "اختر المدة",
"systolic": "الانقباضي",
"diastolic": "الانبساطي",
"sendReportByEmail": "إرسال التقرير عبر البريد الإلكتروني",
"enterYourEmailToReceiveReport": "أدخل عنوان بريدك الإلكتروني لاستلام التقرير",
"addNewRecord": "إضافة سجل جديد",
"healthTrackers": "متتبعات الصحة",
"monitorBloodPressureLevels": "راقب مستويات ضغط الدم لديك، وتتبع القراءات الانقباضية والانبساطية، وحافظ على صحة قلبك.",
"trackWeightProgress": "تتبع تقدم وزنك، وضع الأهداف، وحافظ على كتلة جسم صحية من أجل العافية الشاملة.",
"bookAppointment": "حجز\nموعد",
"completeCheckup": "الفحص الشامل",
"indoorNavigation": "الملاحة الداخلية",
"eReferralServices": "خدمات الإحالة الإلكترونية",
"bloodDonation": "التبرع بالدم",
"dailyWaterMonitor": "مراقب الماء اليومي",
"fetchingYourWaterIntakeDetails": "جاري جلب تفاصيل استهلاك الماء الخاص بك.",
"healthCalculatorsServices": "حاسبات\nالصحة",
"healthConvertersServices": "محولات\nالصحة",
"smartWatchesServices": "الساعات\nالذكية",
"exploreServices": "استكشف الخدمات",
"medicalAndCareServices": "الخدمات الطبية والرعاية",
"hmgServices": "خدمات مجموعة الحبيب الطبية",
"personalServices": "الخدمات الشخصية",
"habibWallet": "محفظة الحبيب",
"loginToViewWalletBalance": "سجل الدخول لعرض رصيد محفظتك",
"recharge": "إعادة الشحن",
"loginToViewMedicalFile": "سجل الدخول لعرض ملفك الطبي",
"addMember": "إضافة عضو",
"addFamilyMember": "إضافة فرد من العائلة",
"pleaseFillBelowFieldToAddNewFamilyMember": "يرجى ملء الحقل أدناه لإضافة فرد جديد من العائلة إلى ملفك الشخصي",
"healthTools": "أدوات الصحة",
"supportServices": "خدمات الدعم",
"virtualTour": "جولة افتراضية",
"carParking": "موقف السيارات",
"latestNews": "آخر الأخبار",
"hmgContact": "اتصل بمجموعة الحبيب الطبية"
}

@ -1091,5 +1091,121 @@
"pickupFromHome": "Pickup Up from Home",
"onTheWayToHospital": " On The Way To Hospital",
"arrivedAtHospital": "Arrived at Hospital",
"orderCancel": "Order Cancel"
"orderCancel": "Order Cancel",
"emergencyCheckIn": "Emergency Check-In",
"erOnlineCheckInDescription": "This service lets patients register their ER appointment prior to arrival.",
"erOnlineCheckInSuccess": "Your ER Online Check-In has been successfully done. Please proceed to the waiting area.",
"erOnlineCheckInError": "Unexpected error occurred during check-in. Please contact support.",
"fetchingHospitalsList": "Fetching hospitals list...",
"fetchingPaymentInformation": "Fetching payment information...",
"erVisitDetails": "ER Visit Details",
"erClinic": "ER Clinic",
"vatWithAmount": "VAT 15% ({amount})",
"erAppointmentBookedSuccess": "Your appointment has been booked successfully. Please perform Check-In once you arrive at the hospital.",
"underProcessing": "Under processing",
"canceledByPatient": "Cancelled by patient",
"rapidResponseTeam": "Rapid Response Team",
"allFacilities": "All Facilities",
"selectLocation": "Select Location",
"pleaseSelectTheLocation": "Please select the location",
"viewLocationGoogleMaps": "View Location on Google Maps",
"callAmbulance": "Call Ambulance",
"requestAmbulanceInEmergency": "Request an ambulance in emergency from home or hospital",
"confirmation": "Confirmation",
"areYouSureYouWantToCallAmbulance": "Are you sure you want to call an ambulance?",
"getDetailsOfNearestBranch": "Get the details of nearest branch including directions",
"areYouSureYouWantToCallRRT": "Are you sure you want to call Rapid Response Team (RRT)?",
"priorERCheckInToSkipLine": "Prior ER Check-In to skip the line & payment at the reception.",
"areYouSureYouWantToMakeERCheckIn": "Are you sure you want to make ER Check-In?",
"checkingYourERAppointmentStatus": "Checking your ER Appointment status...",
"transportOptions": "Transport Options",
"selectHospitalForAdvancePayment": "Please select the hospital you want to make an advance payment for.",
"recharge": "Recharge",
"activityLevel": "Activity Level",
"selectActivityLevel": "Select Activity Level",
"caloriesPerDay": "Calories Per Day",
"dietType": "Diet Type",
"selectDietType": "Select Diet Type",
"bodyFrameSize": "Body Frame Size",
"selectBodyFrameSize": "Select Body Frame Size",
"averageCycleLength": "Average Cycle Length (Usually 28 days)",
"averageLutealPhase": "Average Luteal Phase Length(Usually 14 days)",
"convert": "Convert",
"calculate": "Calculate",
"healthCalculators": "Health Calculators",
"healthConverters": "Health Converters",
"generalHealth": "General Health",
"relatedToBMICalories": "Related To BMI, calories, body fat, etc to stay updated with your health.",
"selectCalculator": "Select Calculator",
"womensHealth": "Women's Health",
"relatedToPeriodsOvulation": "Related To periods, ovulation, pregnancy, and other topics.",
"bloodSugar": "Blood Sugar",
"trackYourGlucoseLevels": "Track your glucose levels, understand trends, and get personalized insights for better health.",
"bloodCholesterol": "Blood Cholesterol",
"monitorCholesterolLevels": "Monitor cholesterol levels, assess heart health risks, and take proactive steps for well-being.",
"triglyceridesFatBlood": "Triglycerides Fat Blood",
"understandTriglyceridesImpact": "Understand triglycerides' impact on heart health with personalized insights and expert recommendations.",
"bmiCalculator": "BMI\nCalculator",
"caloriesCalculator": "Calories\nCalculator",
"bmrCalculator": "BMR\nCalculator",
"idealBodyWeight": "Ideal Body\nWeight",
"bodyFatCalculator": "Body Fat\nCalculator",
"carbsProteinFat": "Carbs\nProtein & Fat",
"ovulationPeriod": "Ovulation\nPeriod",
"deliveryDueDate": "Delivery\nDue Date",
"low": "Low",
"preDiabetic": "Pre-diabetic",
"high": "High",
"elevated": "Elevated",
"recorded": "Recorded",
"noRecordsYet": "No records yet",
"lastRecord": "Last Record",
"addBloodSugar": "Add Blood Sugar",
"addBloodPressure": "Add Blood Pressure",
"addWeight": "Add Weight",
"bloodSugarDataSavedSuccessfully": "Blood Sugar Data saved successfully",
"bloodPressureDataSavedSuccessfully": "Blood Pressure Data saved successfully",
"weightDataSavedSuccessfully": "Weight Data saved successfully",
"pleaseWait": "Please wait",
"selectUnit": "Select Unit",
"selectMeasureTime": "Select Measure Time",
"selectArm": "Select Arm",
"enterBloodSugar": "Enter Blood Sugar",
"enterSystolicValue": "Enter Systolic Value",
"enterDiastolicValue": "Enter Diastolic Value",
"enterWeight": "Enter Weight",
"selectDuration": "Select Duration",
"systolic": "Systolic",
"diastolic": "Diastolic",
"sendReportByEmail": "Send Report by Email",
"enterYourEmailToReceiveReport": "Enter your email address to receive the report",
"addNewRecord": "Add new Record",
"healthTrackers": "Health Trackers",
"monitorBloodPressureLevels": "Monitor your blood pressure levels, track systolic and diastolic readings, and maintain a healthy heart.",
"trackWeightProgress": "Track your weight progress, set goals, and maintain a healthy body mass for overall wellness.",
"bookAppointment": "Book\nAppointment",
"completeCheckup": "Complete Checkup",
"indoorNavigation": "Indoor Navigation",
"eReferralServices": "E-Referral Services",
"dailyWaterMonitor": "Daily Water Monitor",
"fetchingYourWaterIntakeDetails": "Fetching your water intake details.",
"healthCalculatorsServices": "Health\nCalculators",
"healthConvertersServices": "Health\nConverters",
"smartWatchesServices": "Smart\nWatches",
"exploreServices": "Explore Services",
"medicalAndCareServices": "Medical & Care Services",
"hmgServices": "HMG Services",
"personalServices": "Personal Services",
"habibWallet": "Habib Wallet",
"loginToViewWalletBalance": "Login to view your wallet balance",
"loginToViewMedicalFile": "Login to view your medical file",
"addMember": "Add Member",
"addFamilyMember": "Add Family Member",
"pleaseFillBelowFieldToAddNewFamilyMember": "Please fill the below field to add a new family member to your profile",
"healthTools": "Health Tools",
"supportServices": "Support Services",
"virtualTour": "Virtual Tour",
"carParking": "Car Parking",
"latestNews": "Latest News",
"hmgContact": "HMG Contact"
}

@ -679,7 +679,7 @@ const DASHBOARD = 'Services/Patients.svc/REST/PatientDashboard';
class ApiConsts {
static const maxSmallScreen = 660;
static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod;
static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat;
// static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT

@ -166,13 +166,6 @@ class AppDependencies {
),);
getIt.registerLazySingleton<MonthlyReportsRepo>(() => MonthlyReportsRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerLazySingleton<QrParkingRepo>(() => QrParkingRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
getIt.registerFactory<QrParkingViewModel>(
() => QrParkingViewModel(
qrParkingRepo: getIt<QrParkingRepo>(),
errorHandlerService: getIt<ErrorHandlerService>(),
cacheService: getIt<CacheService>(),
),
);
getIt.registerLazySingleton<NotificationsRepo>(() => NotificationsRepoImp(loggerService: getIt<LoggerService>(), apiClient: getIt()));
// ViewModels

@ -15,7 +15,7 @@ extension CapExtension on String {
String get allInCaps => toUpperCase();
// String get needTranslation => this;
String get needTranslation => this;
String get capitalizeFirstofEach => trim().isNotEmpty ? trim().toLowerCase().split(" ").map((str) => str.inCaps).join(" ") : "";
}

@ -281,9 +281,9 @@ class MyAppointmentsViewModel extends ChangeNotifier {
}
}
print('Upcoming Appointments: ${patientUpcomingAppointmentsHistoryList.length}');
print('Arrived Appointments: ${patientArrivedAppointmentsHistoryList.length}');
print('All Appointments: ${patientAppointmentsHistoryList.length}');
debugPrint('Upcoming Appointments: ${patientUpcomingAppointmentsHistoryList.length}');
debugPrint('Arrived Appointments: ${patientArrivedAppointmentsHistoryList.length}');
debugPrint('All Appointments: ${patientAppointmentsHistoryList.length}');
getFiltersForSelectedAppointmentList(filteredAppointmentList);
notifyListeners();
}

@ -1092,5 +1092,121 @@ abstract class LocaleKeys {
static const onTheWayToHospital = 'onTheWayToHospital';
static const arrivedAtHospital = 'arrivedAtHospital';
static const orderCancel = 'orderCancel';
static const emergencyCheckIn = 'emergencyCheckIn';
static const erOnlineCheckInDescription = 'erOnlineCheckInDescription';
static const erOnlineCheckInSuccess = 'erOnlineCheckInSuccess';
static const erOnlineCheckInError = 'erOnlineCheckInError';
static const fetchingHospitalsList = 'fetchingHospitalsList';
static const fetchingPaymentInformation = 'fetchingPaymentInformation';
static const erVisitDetails = 'erVisitDetails';
static const erClinic = 'erClinic';
static const vatWithAmount = 'vatWithAmount';
static const erAppointmentBookedSuccess = 'erAppointmentBookedSuccess';
static const underProcessing = 'underProcessing';
static const canceledByPatient = 'canceledByPatient';
static const rapidResponseTeam = 'rapidResponseTeam';
static const allFacilities = 'allFacilities';
static const selectLocation = 'selectLocation';
static const pleaseSelectTheLocation = 'pleaseSelectTheLocation';
static const viewLocationGoogleMaps = 'viewLocationGoogleMaps';
static const callAmbulance = 'callAmbulance';
static const requestAmbulanceInEmergency = 'requestAmbulanceInEmergency';
static const confirmation = 'confirmation';
static const areYouSureYouWantToCallAmbulance = 'areYouSureYouWantToCallAmbulance';
static const getDetailsOfNearestBranch = 'getDetailsOfNearestBranch';
static const areYouSureYouWantToCallRRT = 'areYouSureYouWantToCallRRT';
static const priorERCheckInToSkipLine = 'priorERCheckInToSkipLine';
static const areYouSureYouWantToMakeERCheckIn = 'areYouSureYouWantToMakeERCheckIn';
static const checkingYourERAppointmentStatus = 'checkingYourERAppointmentStatus';
static const transportOptions = 'transportOptions';
static const selectHospitalForAdvancePayment = 'selectHospitalForAdvancePayment';
static const recharge = 'recharge';
static const activityLevel = 'activityLevel';
static const selectActivityLevel = 'selectActivityLevel';
static const caloriesPerDay = 'caloriesPerDay';
static const dietType = 'dietType';
static const selectDietType = 'selectDietType';
static const bodyFrameSize = 'bodyFrameSize';
static const selectBodyFrameSize = 'selectBodyFrameSize';
static const averageCycleLength = 'averageCycleLength';
static const averageLutealPhase = 'averageLutealPhase';
static const convert = 'convert';
static const calculate = 'calculate';
static const healthCalculators = 'healthCalculators';
static const healthConverters = 'healthConverters';
static const generalHealth = 'generalHealth';
static const relatedToBMICalories = 'relatedToBMICalories';
static const selectCalculator = 'selectCalculator';
static const womensHealth = 'womensHealth';
static const relatedToPeriodsOvulation = 'relatedToPeriodsOvulation';
static const bloodSugar = 'bloodSugar';
static const trackYourGlucoseLevels = 'trackYourGlucoseLevels';
static const bloodCholesterol = 'bloodCholesterol';
static const monitorCholesterolLevels = 'monitorCholesterolLevels';
static const triglyceridesFatBlood = 'triglyceridesFatBlood';
static const understandTriglyceridesImpact = 'understandTriglyceridesImpact';
static const bmiCalculator = 'bmiCalculator';
static const caloriesCalculator = 'caloriesCalculator';
static const bmrCalculator = 'bmrCalculator';
static const idealBodyWeight = 'idealBodyWeight';
static const bodyFatCalculator = 'bodyFatCalculator';
static const carbsProteinFat = 'carbsProteinFat';
static const ovulationPeriod = 'ovulationPeriod';
static const deliveryDueDate = 'deliveryDueDate';
static const low = 'low';
static const preDiabetic = 'preDiabetic';
static const high = 'high';
static const elevated = 'elevated';
static const recorded = 'recorded';
static const noRecordsYet = 'noRecordsYet';
static const lastRecord = 'lastRecord';
static const addBloodSugar = 'addBloodSugar';
static const addBloodPressure = 'addBloodPressure';
static const addWeight = 'addWeight';
static const bloodSugarDataSavedSuccessfully = 'bloodSugarDataSavedSuccessfully';
static const bloodPressureDataSavedSuccessfully = 'bloodPressureDataSavedSuccessfully';
static const weightDataSavedSuccessfully = 'weightDataSavedSuccessfully';
static const pleaseWait = 'pleaseWait';
static const selectUnit = 'selectUnit';
static const selectMeasureTime = 'selectMeasureTime';
static const selectArm = 'selectArm';
static const enterBloodSugar = 'enterBloodSugar';
static const enterSystolicValue = 'enterSystolicValue';
static const enterDiastolicValue = 'enterDiastolicValue';
static const enterWeight = 'enterWeight';
static const selectDuration = 'selectDuration';
static const systolic = 'systolic';
static const diastolic = 'diastolic';
static const sendReportByEmail = 'sendReportByEmail';
static const enterYourEmailToReceiveReport = 'enterYourEmailToReceiveReport';
static const addNewRecord = 'addNewRecord';
static const healthTrackers = 'healthTrackers';
static const monitorBloodPressureLevels = 'monitorBloodPressureLevels';
static const trackWeightProgress = 'trackWeightProgress';
static const bookAppointment = 'bookAppointment';
static const completeCheckup = 'completeCheckup';
static const indoorNavigation = 'indoorNavigation';
static const eReferralServices = 'eReferralServices';
static const dailyWaterMonitor = 'dailyWaterMonitor';
static const fetchingYourWaterIntakeDetails = 'fetchingYourWaterIntakeDetails';
static const healthCalculatorsServices = 'healthCalculatorsServices';
static const healthConvertersServices = 'healthConvertersServices';
static const smartWatchesServices = 'smartWatchesServices';
static const exploreServices = 'exploreServices';
static const medicalAndCareServices = 'medicalAndCareServices';
static const hmgServices = 'hmgServices';
static const personalServices = 'personalServices';
static const habibWallet = 'habibWallet';
static const loginToViewWalletBalance = 'loginToViewWalletBalance';
static const loginToViewMedicalFile = 'loginToViewMedicalFile';
static const addMember = 'addMember';
static const addFamilyMember = 'addFamilyMember';
static const pleaseFillBelowFieldToAddNewFamilyMember = 'pleaseFillBelowFieldToAddNewFamilyMember';
static const healthTools = 'healthTools';
static const supportServices = 'supportServices';
static const virtualTour = 'virtualTour';
static const carParking = 'carParking';
static const latestNews = 'latestNews';
static const hmgContact = 'hmgContact';
}

@ -1,4 +1,3 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
@ -135,19 +134,19 @@ class RrtMapScreen extends StatelessWidget {
Column(
spacing: 4.h,
children: [
"Select Location".needTranslation.toText21(
LocaleKeys.selectLocation.tr().toText21(
weight: FontWeight.w600,
color: AppColors.textColor,
),
"Please select the location".needTranslation.toText12(
LocaleKeys.pleaseSelectTheLocation.tr().toText12(
fontWeight: FontWeight.w500,
color: AppColors.greyTextColor,
)
],
),
CustomButton(
text: "Submit Request".needTranslation,
onPressed: () {
text: LocaleKeys.submitRequest.tr(),
onPressed: () {
LocationViewModel locationViewModel = context.read<LocationViewModel>();
GeocodeResponse? response = locationViewModel.geocodeResponse;
PlaceDetails? placeDetails = locationViewModel.placeDetails;
@ -235,7 +234,7 @@ class RrtMapScreen extends StatelessWidget {
height: 40.h,
backgroundColor: AppColors.lightRedButtonColor,
borderColor: Colors.transparent,
text: "Add new address".needTranslation,
text: LocaleKeys.addNewAddress.tr(),
textColor: AppColors.primaryRedColor,
iconColor: AppColors.primaryRedColor,
onPressed: () {},
@ -245,9 +244,7 @@ class RrtMapScreen extends StatelessWidget {
isSelected: index == 0,
address:
"Flat No 301, Building No 12, Palm Spring Apartment, Sector 45, Gurugram, Haryana 122003",
title: index == 0
? "Home".needTranslation
: "Work".needTranslation,
title: index == 0 ? LocaleKeys.home.tr() : LocaleKeys.work.tr(),
onTap: () {},
);
}
@ -291,8 +288,8 @@ class RrtMapScreen extends StatelessWidget {
Row(
children: [
hospitalAndPickUpItemContent(
title: "Pick".needTranslation,
subTitle: "Inside the home".needTranslation,
title: LocaleKeys.pick.tr(),
subTitle: LocaleKeys.insideTheHome.tr(),
leadingIcon: AppAssets.pickup_bed,
),
CustomSwitch(
@ -312,7 +309,7 @@ class RrtMapScreen extends StatelessWidget {
children: [
hospitalAndPickUpItemContent(
title: '',
subTitle: "Have any appointment".needTranslation,
subTitle: LocaleKeys.haveAnyAppointment.tr(),
leadingIcon: AppAssets.appointment_checkin_icon,
),
CustomSwitch(
@ -416,8 +413,8 @@ class RrtMapScreen extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 4.h,
children: [
"Total amount to pay".needTranslation.toText18(
weight: FontWeight.w600,
LocaleKeys.totalAmountToPay.tr().toText18(
weight: FontWeight.w600,
color: AppColors.textColor,
),
Row(
@ -425,9 +422,7 @@ class RrtMapScreen extends StatelessWidget {
Utils.buildSvgWithAssets(icon: AppAssets.warning,
height: 18.h, width: 18.h),
SizedBox(width: 4.h,),
"Amount will be paid at the hospital"
.needTranslation
.toText12(
LocaleKeys.amountPaidAtHospital.tr().toText12(
fontWeight: FontWeight.w500,
color: AppColors.greyTextColor,
),
@ -452,7 +447,7 @@ class RrtMapScreen extends StatelessWidget {
],
),
CustomButton(
text: "Submit Request".needTranslation,
text: LocaleKeys.submitRequest.tr(),
onPressed: () {
LocationViewModel locationViewModel = context.read<LocationViewModel>();
GeocodeResponse? response = locationViewModel.geocodeResponse;
@ -530,8 +525,8 @@ class RrtMapScreen extends StatelessWidget {
return SizedBox(
width: MediaQuery.sizeOf(context).width,
child: TextInputWidget(
labelText: "Enter Pickup Location Manually".needTranslation,
hintText: "Enter Pickup Location".needTranslation,
labelText: LocaleKeys.enterPickupLocationManually.tr(),
hintText: LocaleKeys.enterPickupLocation.tr(),
controller: TextEditingController(
text: vm.geocodeResponse?.results.first.formattedAddress ??
vm.selectedPrediction?.description,
@ -562,7 +557,7 @@ class RrtMapScreen extends StatelessWidget {
openLocationInputBottomSheet(BuildContext context) {
context.read<LocationViewModel>().flushSearchPredictions();
showCommonBottomSheetWithoutHeight(
title: "".needTranslation,
title: "",
context,
child: SizedBox(
height: MediaQuery.sizeOf(context).height * .8,
@ -583,11 +578,10 @@ class RrtMapScreen extends StatelessWidget {
child: Row(
children: [
hospitalAndPickUpItemContent(
title: "Select Hospital".needTranslation,
title: "Select Hospital".tr(),
subTitle: context
.read<EmergencyServicesViewModel>()
.getSelectedHospitalName() ??
"Select Hospital".needTranslation,
.getSelectedHospitalName() ?? "Select Hospital".tr(),
leadingIcon: AppAssets.hospital,
),
Utils.buildSvgWithAssets(
@ -606,7 +600,7 @@ class RrtMapScreen extends StatelessWidget {
void openAppointmentList(BuildContext context) {
showCommonBottomSheetWithoutHeight(
title: "Select Appointment".needTranslation,
title: LocaleKeys.selectAppointment.tr(),
context,
child: SizedBox(
height: MediaQuery.sizeOf(context).height * .5,

@ -18,12 +18,11 @@ class RrtRequestTypeSelect extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<EmergencyServicesViewModel>(builder: (context, emergencyServicesVM, child) {
print("the checkbox is ${emergencyServicesVM.agreedToTermsAndCondition}");
return Column(
children: [
Column(
children: [
"Rapid Response Team (RRT) options".needTranslation.toText20(color: AppColors.textColor, isBold: true),
LocaleKeys.rapidResponseTeam.tr(context: context).toText20(color: AppColors.textColor, isBold: true),
SizedBox(
height: 16.h,
),
@ -74,7 +73,7 @@ class RrtRequestTypeSelect extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
"Total amount to pay".needTranslation.toText18(
LocaleKeys.totalAmountToPay.tr(context: context).toText18(
weight: FontWeight.w600,
color: AppColors.textColor,
),
@ -94,19 +93,19 @@ class RrtRequestTypeSelect extends StatelessWidget {
SizedBox(
width: 4.h,
),
"Amount will be paid at the hospital".needTranslation.toText11(
LocaleKeys.amountPaidAtHospital.tr(context: context).toText11(
color: AppColors.greyTextColor,
),
],
),
Row(
children: [
"+ VAT 15%(".needTranslation.toText12(
LocaleKeys.vat15.tr(context: context).toText12(
fontWeight: FontWeight.w500,
color: AppColors.greyTextColor,
),
"${emergencyServicesVM.selectedRRTProcedure?.patientTaxAmount})".needTranslation.toText14(
weight: FontWeight.w600,
"${emergencyServicesVM.selectedRRTProcedure?.patientTaxAmount})".toText14(
weight: FontWeight.w600,
color: AppColors.greyTextColor,
),
],

@ -1,8 +1,10 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:hmg_patient_app_new/core/utils/size_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/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
@ -18,7 +20,7 @@ class TermsAndCondition extends StatelessWidget {
Expanded(
child: CollapsingListView(
title: "Terms And Condition".needTranslation,
title: LocaleKeys.termsConditoins.tr(context: context),
child:DecoratedBox(decoration:RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
borderRadius: 20.h,

@ -59,9 +59,8 @@ class EmergencyServicesPage extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Call Ambulance".needTranslation.toText16(isBold: true, color: AppColors.blackColor),
"Request an ambulance in emergency from home or hospital"
.needTranslation
LocaleKeys.callAmbulance.tr().toText16(isBold: true, color: AppColors.blackColor),
LocaleKeys.requestAmbulanceInEmergency.tr()
.toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500),
],
),
@ -100,10 +99,9 @@ class EmergencyServicesPage extends StatelessWidget {
Lottie.asset(AppAnimations.ambulanceAlert,
repeat: false, reverse: false, frameRate: FrameRate(60), width: 120.h, height: 120.h, fit: BoxFit.contain),
SizedBox(height: 8.h),
"Confirmation".needTranslation.toText28(color: AppColors.whiteColor, isBold: true),
LocaleKeys.confirmation.tr().toText28(color: AppColors.whiteColor, isBold: true),
SizedBox(height: 8.h),
"Are you sure you want to call an ambulance?"
.needTranslation
LocaleKeys.areYouSureYouWantToCallAmbulance.tr()
.toText14(color: AppColors.whiteColor, weight: FontWeight.w500),
SizedBox(height: 24.h),
CustomButton(
@ -148,9 +146,8 @@ class EmergencyServicesPage extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Nearest ER Location".needTranslation.toText16(isBold: true, color: AppColors.blackColor),
"Get the details of nearest branch including directions"
.needTranslation
LocaleKeys.nearester.tr(context: context).toText16(isBold: true, color: AppColors.blackColor),
LocaleKeys.getDetailsOfNearestBranch.tr()
.toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500),
],
),
@ -178,7 +175,7 @@ class EmergencyServicesPage extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Rapid Response Team (RRT)".toText16(isBold: true, color: AppColors.blackColor),
LocaleKeys.rapidResponseTeam.tr(context: context).toText16(isBold: true, color: AppColors.blackColor),
"Comprehensive medical service for all sorts of urgent and stable cases"
.toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500),
],
@ -204,8 +201,7 @@ class EmergencyServicesPage extends StatelessWidget {
SizedBox(height: 8.h),
LocaleKeys.confirm.tr().toText28(color: AppColors.whiteColor, isBold: true),
SizedBox(height: 8.h),
"Are you sure you want to call Rapid Response Team (RRT)?"
.needTranslation
LocaleKeys.areYouSureYouWantToCallRRT.tr()
.toText14(color: AppColors.whiteColor, weight: FontWeight.w500),
SizedBox(height: 24.h),
CustomButton(
@ -278,9 +274,8 @@ class EmergencyServicesPage extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Emergency Check-In".needTranslation.toText16(isBold: true, color: AppColors.blackColor),
"Prior ER Check-In to skip the line & payment at the reception."
.needTranslation
LocaleKeys.emergencyCheckIn.tr(context: context).toText16(isBold: true, color: AppColors.blackColor),
LocaleKeys.priorERCheckInToSkipLine.tr()
.toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500),
],
),
@ -318,13 +313,13 @@ class EmergencyServicesPage extends StatelessWidget {
SizedBox(height: 8.h),
LocaleKeys.confirm.tr().toText28(color: AppColors.whiteColor, isBold: true),
SizedBox(height: 8.h),
"Are you sure you want to make ER Check-In?".needTranslation.toText14(color: AppColors.whiteColor, weight: FontWeight.w500),
LocaleKeys.areYouSureYouWantToMakeERCheckIn.tr().toText14(color: AppColors.whiteColor, weight: FontWeight.w500),
SizedBox(height: 24.h),
CustomButton(
text: LocaleKeys.confirm.tr(context: context),
onPressed: () async {
Navigator.of(context).pop();
LoaderBottomSheet.showLoader(loadingText: "Checking your ER Appointment status...".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingYourERAppointmentStatus.tr());
await context.read<EmergencyServicesViewModel>().checkPatientERAdvanceBalance(onSuccess: (dynamic response) {
LoaderBottomSheet.hideLoader();
context.read<EmergencyServicesViewModel>().navigateToEROnlineCheckIn();
@ -389,7 +384,7 @@ class EmergencyServicesPage extends StatelessWidget {
void openTranportationSelectionBottomSheet(BuildContext context) {
if (emergencyServicesViewModel.transportationOptions.isNotEmpty) {
showCommonBottomSheetWithoutHeight(
title: "Transport Options".needTranslation,
title: LocaleKeys.transportOptions.tr(),
context,
child: SizedBox(
height: 400.h,

@ -38,7 +38,7 @@ class ErOnlineCheckinHome extends StatelessWidget {
children: [
Expanded(
child: CollapsingListView(
title: "Emergency Check-In".needTranslation,
title: LocaleKeys.emergencyCheckIn.tr(context: context),
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(24.h),
@ -53,8 +53,8 @@ class ErOnlineCheckinHome extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Online Check-In".needTranslation.toText18(color: AppColors.textColor, isBold: true),
"This service lets patients to register their ER appointment prior to arrival.".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
LocaleKeys.onlineCheckIn.tr().toText18(color: AppColors.textColor, isBold: true),
LocaleKeys.erOnlineCheckInDescription.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
],
),
),
@ -74,7 +74,7 @@ class ErOnlineCheckinHome extends StatelessWidget {
showNfcReader(context, onNcfScan: (String nfcId) {
Future.delayed(const Duration(milliseconds: 100), () async {
print(nfcId);
LoaderBottomSheet.showLoader(loadingText: "Processing check-in...".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.processingCheckIn.tr());
await emergencyServicesViewModel.getProjectIDFromNFC(
nfcCode: nfcId,
onSuccess: (value) async {
@ -84,7 +84,7 @@ class ErOnlineCheckinHome extends StatelessWidget {
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(context,
title: LocaleKeys.onlineCheckIn.tr(),
child: Utils.getSuccessWidget(loadingText: "Your ER Online Check-In has been successfully done. Please proceed to the waiting area.".needTranslation),
child: Utils.getSuccessWidget(loadingText: LocaleKeys.erOnlineCheckInSuccess.tr()),
callBackFunc: () {
Navigator.pushAndRemoveUntil(
context,
@ -98,7 +98,7 @@ class ErOnlineCheckinHome extends StatelessWidget {
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getErrorWidget(loadingText: "Unexpected error occurred during check-in. Please contact support.".needTranslation),
child: Utils.getErrorWidget(loadingText: LocaleKeys.erOnlineCheckInError.tr()),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,
@ -117,7 +117,7 @@ class ErOnlineCheckinHome extends StatelessWidget {
// callBackFunc: () {},
// isFullScreen: false);
} else {
LoaderBottomSheet.showLoader(loadingText: "Fetching hospitals list...".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingHospitalsList.tr());
await context.read<EmergencyServicesViewModel>().getProjects();
LoaderBottomSheet.hideLoader();
//Project Selection Dropdown
@ -155,7 +155,7 @@ class ErOnlineCheckinHome extends StatelessWidget {
onHospitalClicked: (hospital) async {
Navigator.pop(context);
vm.setSelectedHospital(hospital);
LoaderBottomSheet.showLoader(loadingText: "Fetching payment information...".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingPaymentInformation.tr(context: context));
await vm.getPatientERPaymentInformation(onSuccess: (response) {
LoaderBottomSheet.hideLoader();
vm.navigateToEROnlineCheckInPaymentPage();

@ -34,7 +34,7 @@ class ErOnlineCheckinPaymentDetailsPage extends StatelessWidget {
children: [
Expanded(
child: CollapsingListView(
title: "Emergency Check-In".needTranslation,
title: LocaleKeys.emergencyCheckIn.tr(context: context),
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(24.h),
@ -52,7 +52,7 @@ class ErOnlineCheckinPaymentDetailsPage extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"ER Visit Details".needTranslation.toText18(color: AppColors.textColor, isBold: true),
LocaleKeys.erVisitDetails.tr().toText18(color: AppColors.textColor, isBold: true),
SizedBox(height: 24.h),
Row(
children: [
@ -70,7 +70,7 @@ class ErOnlineCheckinPaymentDetailsPage extends StatelessWidget {
labelPadding: EdgeInsetsDirectional.only(start: 4.w, end: 4.w),
),
AppCustomChipWidget(
labelText: "ER Clinic".needTranslation,
labelText: LocaleKeys.erClinic.tr(),
labelPadding: EdgeInsetsDirectional.only(start: 4.w, end: 4.w),
),
AppCustomChipWidget(
@ -111,7 +111,7 @@ class ErOnlineCheckinPaymentDetailsPage extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
"Amount before tax".needTranslation.toText18(isBold: true),
LocaleKeys.amountBeforeTax.tr().toText18(isBold: true),
Utils.getPaymentAmountWithSymbol(emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShare.toString().toText16(isBold: true), AppColors.blackColor, 13,
isSaudiCurrency: true),
],
@ -121,8 +121,8 @@ class ErOnlineCheckinPaymentDetailsPage extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(child: "".toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor)),
"VAT 15% (${emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientTaxAmount})"
.needTranslation
LocaleKeys.vatWithAmount
.tr(namedArgs: {"amount": emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientTaxAmount.toString()})
.toText14(isBold: true, color: AppColors.greyTextColor, letterSpacing: -1),
],
),

@ -80,7 +80,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
children: [
Expanded(
child: CollapsingListView(
title: "Emergency Check-In".needTranslation,
title: LocaleKeys.emergencyCheckIn.tr(context: context),
child: SingleChildScrollView(
child: Column(
children: [
@ -99,7 +99,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
children: [
Image.asset(AppAssets.mada, width: 72.h, height: 25.h),
SizedBox(height: 16.h),
"Mada".needTranslation.toText16(isBold: true),
LocaleKeys.mada.tr(context: context).toText16(isBold: true),
],
),
SizedBox(width: 8.h),
@ -141,7 +141,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
],
),
SizedBox(height: 16.h),
"Visa or Mastercard".needTranslation.toText16(isBold: true),
LocaleKeys.visaOrMastercard.tr(context: context).toText16(isBold: true),
],
),
SizedBox(width: 8.h),
@ -178,7 +178,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
children: [
Image.asset(AppAssets.tamaraEng, width: 72.h, height: 25.h),
SizedBox(height: 16.h),
"Tamara".needTranslation.toText16(isBold: true),
LocaleKeys.tamara.tr(context: context).toText16(isBold: true),
],
),
SizedBox(width: 8.h),
@ -229,8 +229,8 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
"Insurance expired or inactive".needTranslation.toText14(color: AppColors.primaryRedColor, weight: FontWeight.w500).paddingSymmetrical(24.h, 0.h),
CustomButton(
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: () {
Navigator.of(context).push(
@ -253,12 +253,12 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
)
: 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(emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShare.toString().toText16(isBold: true), AppColors.blackColor, 13,
isSaudiCurrency: true),
],
@ -266,7 +266,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
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(
emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientTaxAmount.toString().toText14(isBold: true, color: AppColors.greyTextColor), AppColors.greyTextColor, 13,
isSaudiCurrency: true),
@ -276,7 +276,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
"".needTranslation.toText14(isBold: true),
"".toText14(isBold: true),
Utils.getPaymentAmountWithSymbol(emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax.toString().toText24(isBold: true), AppColors.blackColor, 17,
isSaudiCurrency: true),
],
@ -425,7 +425,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
}
void checkPaymentStatus() async {
LoaderBottomSheet.showLoader(loadingText: "Checking payment status, Please wait...".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingPaymentStatusPleaseWait.tr(context: context));
await payfortViewModel.checkPaymentStatus(
transactionID: transID,
onSuccess: (apiResponse) async {
@ -445,7 +445,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
if (emergencyServicesViewModel.isERBookAppointment) {
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getSuccessWidget(loadingText: "Your appointment has been booked successfully. Please perform Check-In once you arrive at the hospital.".needTranslation),
child: Utils.getSuccessWidget(loadingText: LocaleKeys.erAppointmentBookedSuccess.tr(context: context)),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,
@ -458,7 +458,7 @@ class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage>
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation),
child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr(context: context)),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,

@ -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';
@ -9,6 +10,7 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
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/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:barcode_scan2/barcode_scan2.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
@ -35,8 +37,8 @@ class ErOnlineCheckinSelectCheckinBottomSheet 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,
@ -51,8 +53,8 @@ class ErOnlineCheckinSelectCheckinBottomSheet extends StatelessWidget {
sendCheckInRequest(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(context: context),
child: Utils.getErrorWidget(loadingText: LocaleKeys.ensureWithinHospitalLocation.tr(context: context),), callBackFunc: () {
Navigator.of(context).pop();
}, isFullScreen: false);
}
@ -61,8 +63,8 @@ class ErOnlineCheckinSelectCheckinBottomSheet 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) {
@ -75,8 +77,8 @@ class ErOnlineCheckinSelectCheckinBottomSheet 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 != "") {

@ -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' show AppAssets;
import 'package:hmg_patient_app_new/core/app_export.dart';
@ -8,6 +9,7 @@ import 'package:hmg_patient_app_new/features/emergency_services/emergency_servic
import 'package:hmg_patient_app_new/features/emergency_services/models/OrderDisplay.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/AmbulanceRequestOrdersModel.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/RRTServiceData.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/emergency_services/history/widget/ambulance_history_item.dart' show AmbulanceHistoryItem;
import 'package:hmg_patient_app_new/presentation/emergency_services/history/widget/rrt_item.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
@ -24,7 +26,7 @@ class ErHistoryListing extends StatelessWidget {
Expanded(
child: CollapsingListView(
title: "History Log".needTranslation,
title: LocaleKeys.history.tr(context: context),
child: SingleChildScrollView(
physics: NeverScrollableScrollPhysics(),
child: Column(
@ -55,12 +57,10 @@ class ErHistoryListing extends StatelessWidget {
}),
),
Visibility(
visible: data.$1
?.isEmpty == true, child: Center(
child: Utils.getNoDataWidget(context,
noDataText: "You don't have any history"
.needTranslation),
)),
visible: data.$1.isEmpty == true,
child: Center(
child: Utils.getNoDataWidget(context, noDataText: LocaleKeys.noDataAvailable.tr(context: context)),
)),
],
);
}
@ -92,9 +92,9 @@ class ErHistoryListing extends StatelessWidget {
return Row(
spacing: 8.h,
children: [
if(dataList?.isNotEmpty == true)
if(dataList.isNotEmpty == true)
AppCustomChipWidget(
labelText: "All Facilities".needTranslation,
labelText: LocaleKeys.allFacilities.tr(context: context),
shape: RoundedRectangleBorder(
side: BorderSide(
color: value == OrderDislpay.ALL ? AppColors.errorColor : AppColors.chipBorderColorOpacity20,
@ -111,7 +111,7 @@ class ErHistoryListing extends StatelessWidget {
.ambulanceOrders
?.isNotEmpty == true)
AppCustomChipWidget(
labelText: "Ambulance".needTranslation,
labelText: LocaleKeys.ambulancerequest.tr(context: context),
icon: AppAssets.ambulance,
shape: RoundedRectangleBorder(
side: BorderSide(
@ -130,7 +130,7 @@ class ErHistoryListing extends StatelessWidget {
?.completedOrders
.isNotEmpty == true)
AppCustomChipWidget(
labelText: "Rapid Response Team".needTranslation,
labelText: LocaleKeys.rapidResponseTeam.tr(context: context),
icon: AppAssets.ic_rrt_vehicle,
shape: RoundedRectangleBorder(
side: BorderSide(

@ -1,8 +1,9 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
class RequestStatus extends StatelessWidget {
final int status;
@ -21,14 +22,13 @@ class RequestStatus extends StatelessWidget {
switch (status) {
case 1: //pending
case 2: //processing
return "Under Processing".needTranslation;
case 3: //completed
return "Completed".needTranslation;
break;
return LocaleKeys.underProcessing.tr();
case 3:
return LocaleKeys.completed.tr();
case 4: //cancel
case 6:
case 7:
return "Canceled by patient".needTranslation;
return LocaleKeys.canceledByPatient.tr();
break;
}
return null;

@ -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_export.dart';
@ -6,6 +7,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/emergency_services/emergency_services_view_model.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/AmbulanceRequestOrdersModel.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/emergency_services/history/widget/RequestStatus.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@ -40,7 +42,7 @@ class AmbulanceHistoryItem extends StatelessWidget {
spacing: 4.w,
children: [
chip( Utils.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(order.time)), AppAssets.calendar, AppColors.blackBgColor),
chip("Ambulance".needTranslation, AppAssets.ambulance, AppColors.blackBgColor),
chip(LocaleKeys.ambulancerequest.tr(context: context), AppAssets.ambulance, AppColors.blackBgColor),
],
),
Row(
@ -52,7 +54,7 @@ class AmbulanceHistoryItem extends StatelessWidget {
),
if (order.statusId == 1 || order.statusId == 2)
CustomButton(
text: "Cancel Request".needTranslation,
text: LocaleKeys.cancelRequest.tr(context: context),
onPressed: () async {
openCancelOrderBottomSheet(context);
},

@ -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_export.dart';
@ -6,6 +7,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/emergency_services/emergency_services_view_model.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/RRTServiceData.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/emergency_services/history/widget/RequestStatus.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@ -40,13 +42,13 @@ class RRTItem extends StatelessWidget {
spacing: 4.w,
children: [
chip( Utils.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(order.time)), AppAssets.calendar, AppColors.blackBgColor),
chip("Rapid Response Team(RRT)".needTranslation, AppAssets.ic_rrt_vehicle, AppColors.blackBgColor),
chip(LocaleKeys.rapidResponseTeam.tr(context: context), AppAssets.ic_rrt_vehicle, AppColors.blackBgColor),
],
),
SizedBox(height: 4.h),
if (order.statusId == 1 || order.statusId == 2)
CustomButton(
text: "Cancel Request".needTranslation,
text: LocaleKeys.cancelRequest.tr(context: context),
onPressed: () async {
openCancelOrderBottomSheet(context);
},

@ -36,7 +36,7 @@ class _NearestErPageState extends State<NearestErPage> {
@override
Widget build(BuildContext context) {
return CollapsingListView(
title: "Nearest ER".needTranslation,
title: LocaleKeys.nearester.tr(context: context),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -44,7 +44,7 @@ class _NearestErPageState extends State<NearestErPage> {
children: [
TextInputWidget(
labelText: LocaleKeys.search.tr(),
hintText: 'Type any facility name'.needTranslation,
hintText: 'Type any facility name',
controller: searchText,
onChange: (value) {
debouncer.run(() {
@ -92,7 +92,7 @@ class _NearestErPageState extends State<NearestErPage> {
},
);
} else {
return Center(child: Utils.getNoDataWidget(context, noDataText: "No nearest Er Arround you".needTranslation));
return Center(child: Utils.getNoDataWidget(context, noDataText: "No nearest Er Around you"));
}
}),
),

@ -31,7 +31,7 @@ class LocationInputBottomSheet extends StatelessWidget {
children: [
TextInputWidget(
labelText: LocaleKeys.search.tr(),
hintText: "Search Location".needTranslation,
hintText: LocaleKeys.selectLocation.tr(context: context),
controller: TextEditingController(),
onChange: (value){
debouncer.run(() {

@ -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_export.dart';
@ -6,6 +7,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/emergency_services/emergency_services_view_model.dart';
import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/ProjectAvgERWaitingTime.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
@ -67,14 +69,14 @@ class NearestERItem extends StatelessWidget {
spacing: 8.h,
children: [
AppCustomChipWidget(
labelText: "${nearestERItem.distanceInKilometers} km".needTranslation,
labelText: "${nearestERItem.distanceInKilometers} km",
icon: AppAssets.location,
iconHasColor: false,
labelPadding: EdgeInsetsDirectional.only(start: 4.h, end: 0.h),
padding: EdgeInsets.all(8.h),
).toShimmer2(isShow: isLoading),
AppCustomChipWidget(
labelText: "Expected waiting time: ${nearestERItem.getTime()} mins".needTranslation,
labelText: "Expected waiting time: ${nearestERItem.getTime()} mins",
icon: AppAssets.waiting_time_clock,
iconHasColor: false,
labelPadding: EdgeInsetsDirectional.only(start: 4.h, end: 0.h),
@ -87,7 +89,7 @@ class NearestERItem extends StatelessWidget {
children: [
Expanded(
child: CustomButton(
text: "View Location on Google Maps".needTranslation,
text: LocaleKeys.viewLocationGoogleMaps.tr(context: context),
iconSize: 18.h,
icon: AppAssets.location,
onPressed: () {

@ -84,7 +84,7 @@ class _HabibWalletState extends State<HabibWalletPage> {
CustomButton(
icon: AppAssets.recharge_icon,
iconSize: 21.h,
text: "Recharge".needTranslation,
text: LocaleKeys.recharge.tr(context: context),
onPressed: () {
Navigator.of(context)
.push(

@ -80,7 +80,7 @@ class _RechargeWalletPageState extends State<RechargeWalletPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
//TODO: Check with hussain to show AED or SAR
"Enter an amount".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
LocaleKeys.amount.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
Spacer(),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
@ -110,7 +110,7 @@ class _RechargeWalletPageState extends State<RechargeWalletPage> {
13.h,
isExpanded: false),
const Spacer(),
"SAR".needTranslation.toText20(color: AppColors.greyTextColor, weight: FontWeight.w500),
LocaleKeys.sar.tr(context: context).toText20(color: AppColors.greyTextColor, weight: FontWeight.w500),
],
),
],
@ -151,7 +151,7 @@ class _RechargeWalletPageState extends State<RechargeWalletPage> {
],
).onPress(() async {
habibWalletVM.setCurrentIndex(0);
showCommonBottomSheetWithoutHeight(context, title: "Select Medical File".needTranslation,
showCommonBottomSheetWithoutHeight(context, title: LocaleKeys.medicalFile.tr(context: context),
titleWidget: Consumer<HabibWalletViewModel>(builder: (context, habibWalletVM, child) {
return habibWalletVM.currentIndex != 0
? IconButton(
@ -160,7 +160,7 @@ class _RechargeWalletPageState extends State<RechargeWalletPage> {
onPressed: () => habibWalletVM.setCurrentIndex(0),
highlightColor: Colors.transparent,
)
: "Select Medical File".needTranslation.toText20(weight: FontWeight.w600);
: LocaleKeys.medicalFile.tr(context: context).toText20(weight: FontWeight.w600);
}), child: Consumer<HabibWalletViewModel>(builder: (context, habibWalletVM, child) {
return MultiPageBottomSheet();
}), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true);
@ -261,7 +261,7 @@ class _RechargeWalletPageState extends State<RechargeWalletPage> {
if (amountTextController.text.isEmpty) {
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getErrorWidget(loadingText: "Please enter amount to continue.".needTranslation),
child: Utils.getErrorWidget(loadingText: "Please enter amount to continue."),
callBackFunc: () {
textFocusNode.requestFocus();
},
@ -271,7 +271,7 @@ class _RechargeWalletPageState extends State<RechargeWalletPage> {
} else if (habibWalletVM.selectedHospital == null) {
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getErrorWidget(loadingText: "Please select hospital to continue.".needTranslation),
child: Utils.getErrorWidget(loadingText: "Please select hospital to continue."),
callBackFunc: () {
textFocusNode.requestFocus();
},

@ -82,7 +82,7 @@ class _WalletPaymentConfirmPageState extends State<WalletPaymentConfirmPage> {
children: [
Image.asset(AppAssets.mada, width: 72.h, height: 25.h).toShimmer2(isShow: false),
SizedBox(height: 16.h),
"Mada".needTranslation.toText16(isBold: true).toShimmer2(isShow: false),
LocaleKeys.mada.tr(context: context).toText16(isBold: true).toShimmer2(isShow: false),
],
),
SizedBox(width: 8.h),
@ -124,7 +124,7 @@ class _WalletPaymentConfirmPageState extends State<WalletPaymentConfirmPage> {
],
).toShimmer2(isShow: false),
SizedBox(height: 16.h),
"Visa or Mastercard".needTranslation.toText16(isBold: true).toShimmer2(isShow: false),
LocaleKeys.visaOrMastercard.tr(context: context).toText16(isBold: true).toShimmer2(isShow: false),
],
),
SizedBox(width: 8.h),
@ -180,7 +180,7 @@ class _WalletPaymentConfirmPageState extends State<WalletPaymentConfirmPage> {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
"Total amount to pay".needTranslation.toText16(isBold: true),
LocaleKeys.totalAmountToPay.tr(context: context).toText16(isBold: true),
Utils.getPaymentAmountWithSymbol(habibWalletVM.walletRechargeAmount.toString().toText24(isBold: true), AppColors.blackColor, 15.h, isSaudiCurrency: true),
],
).paddingSymmetrical(24.h, 0.h),
@ -314,7 +314,7 @@ class _WalletPaymentConfirmPageState extends State<WalletPaymentConfirmPage> {
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getSuccessWidget(loadingText: "Payment Successful!".needTranslation),
child: Utils.getSuccessWidget(loadingText: "Payment Successful!"),
callBackFunc: () {
Navigator.of(context).pop();
Navigator.of(context).pop();
@ -327,7 +327,7 @@ class _WalletPaymentConfirmPageState extends State<WalletPaymentConfirmPage> {
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getErrorWidget(loadingText: "Payment Failed - ${err}".needTranslation),
child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr(context: context)),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,
@ -339,7 +339,7 @@ class _WalletPaymentConfirmPageState extends State<WalletPaymentConfirmPage> {
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation),
child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr(context: context)),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,

@ -76,7 +76,7 @@ class _MultiPageBottomSheetState extends State<MultiPageBottomSheet> {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Enter File Number".needTranslation.toText20(weight: FontWeight.w600),
"Enter File Number".toText20(weight: FontWeight.w600),
SizedBox(height: 12.h),
TextInputWidget(
labelText: LocaleKeys.fileNumber.tr(),
@ -98,9 +98,9 @@ class _MultiPageBottomSheetState extends State<MultiPageBottomSheet> {
await habibWalletVM.getPatientInfoByPatientID(
patientID: fileNumberEditingController.text,
onSuccess: (response) async {
print(response.data["GetPatientInfoByPatientIDList"][0]["FullName"]);
debugPrint(response.data["GetPatientInfoByPatientIDList"][0]["FullName"]);
await _dialogService.showCommonBottomSheetWithoutH(
message: "A file was found with name: ${response.data["GetPatientInfoByPatientIDList"][0]["FullName"]}, Would you like to recharge wallet for this file number?".needTranslation,
message: "A file was found with name: ${response.data["GetPatientInfoByPatientIDList"][0]["FullName"]}, Would you like to recharge wallet for this file number?",
label: LocaleKeys.notice.tr(),
onOkPressed: () {
habibWalletVM.setSelectedRechargeType(3);
@ -161,7 +161,7 @@ class _MultiPageBottomSheetState extends State<MultiPageBottomSheet> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.familyTitle.tr(context: context).toText16(color: AppColors.textColor, weight: FontWeight.w500),
"Select a medical file from your family".needTranslation.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
"Select a medical file from your family".toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
],
),
Utils.buildSvgWithAssets(icon: AppAssets.forward_chevron_icon, iconColor: AppColors.textColor, width: 15.h, height: 15.h),

@ -1,8 +1,10 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/utils/size_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/habib_wallet/habib_wallet_view_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/habib_wallet/widgets/hospital_list_item.dart';
import 'package:hmg_patient_app_new/theme/colors.dart' show AppColors;
import 'package:provider/provider.dart';
@ -28,7 +30,7 @@ class SelectHospitalBottomSheet extends StatelessWidget {
// ),
// ),
Text(
"Please select the hospital you want to make an advance payment for.".needTranslation,
LocaleKeys.selectHospitalForAdvancePayment.tr(context: context),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,

@ -1,9 +1,11 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_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/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators_and_converts/health_calculator_view_model.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators_and_converts/widgets/bf.dart';
@ -57,8 +59,8 @@ class _HealthCalculatorDetailedPageState extends State<HealthCalculatorDetailedP
text: widget.calculatorType == HealthCalculatorsTypeEnum.bloodSugar ||
widget.calculatorType == HealthCalculatorsTypeEnum.bloodCholesterol ||
widget.calculatorType == HealthCalculatorsTypeEnum.triglycerides
? "Convert".needTranslation
: "Calculate".needTranslation,
? LocaleKeys.convert.tr(context: context)
: LocaleKeys.calculate.tr(context: context),
onPressed: () {
if (calculatedResult == null) return;

@ -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/dependencies.dart';
@ -6,6 +7,7 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
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/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators_and_converts/health_calculator_detailed_page.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators_and_converts/widgets/health_card.dart';
import 'package:hmg_patient_app_new/services/dialog_service.dart';
@ -32,7 +34,7 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
Widget build(BuildContext context) {
DialogService dialogService = getIt.get<DialogService>();
return CollapsingListView(
title: widget.type == HealthCalConEnum.calculator ? "Health Calculators".needTranslation : "Health Converters".needTranslation,
title: widget.type == HealthCalConEnum.calculator ? LocaleKeys.healthCalculators.tr(context: context) : LocaleKeys.healthConverters.tr(),
child: widget.type == HealthCalConEnum.calculator
? Column(
children: [
@ -47,8 +49,8 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
"General Health".needTranslation.toText16(weight: FontWeight.w600),
"Related To BMI, calories, body fat, etc to stay updated with your health.".needTranslation.toText12(fontWeight: FontWeight.w500, color: Color(0xFF8F9AA3))
LocaleKeys.generalHealth.tr().toText16(weight: FontWeight.w600),
LocaleKeys.relatedToBMICalories.tr().toText12(fontWeight: FontWeight.w500, color: Color(0xFF8F9AA3))
],
),
),
@ -60,7 +62,7 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
).paddingAll(16.w))
.onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Calculator".needTranslation,
label: LocaleKeys.selectCalculator.tr(),
message: "",
child: showCalculatorsItems(type: HealthCalculatorEnum.general),
onOkPressed: () {},
@ -78,8 +80,8 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
"Women's Health".needTranslation.toText16(weight: FontWeight.w600),
"Related To periods, ovulation, pregnancy, and other topics.".needTranslation.toText12(fontWeight: FontWeight.w500, color: Color(0xFF8F9AA3))
LocaleKeys.womensHealth.tr().toText16(weight: FontWeight.w600),
LocaleKeys.relatedToPeriodsOvulation.tr().toText12(fontWeight: FontWeight.w500, color: Color(0xFF8F9AA3))
],
),
),
@ -89,7 +91,7 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
).paddingAll(16.w))
.onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Calculator".needTranslation,
label: LocaleKeys.selectCalculator.tr(),
message: "",
child: showCalculatorsItems(type: HealthCalculatorEnum.women),
onOkPressed: () {},
@ -111,8 +113,8 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
"Blood Sugar".needTranslation.toText16(weight: FontWeight.w600),
"Track your glucose levels, understand trends, and get personalized insights for better health.".needTranslation.toText12(
LocaleKeys.bloodSugar.tr().toText16(weight: FontWeight.w600),
LocaleKeys.trackYourGlucoseLevels.tr().toText12(
fontWeight: FontWeight.w500,
color: Color(0xFF8F9AA3),
)
@ -145,9 +147,8 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
"Blood Cholesterol".needTranslation.toText16(weight: FontWeight.w600),
"Monitor your cholesterol levels, track your LDL, HDL, and triglycerides. Get personalized recommendations for a healthy heart."
.needTranslation
LocaleKeys.bloodCholesterol.tr().toText16(weight: FontWeight.w600),
LocaleKeys.monitorCholesterolLevels.tr()
.toText12(fontWeight: FontWeight.w500, color: Color(0xFF8F9AA3))
],
),
@ -176,9 +177,8 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
"Triglycerides Fat Blood".needTranslation.toText16(weight: FontWeight.w600),
"Manage triglycerides, a key blood fat. Understand levels, diet impacts, and heart health strategies."
.needTranslation
LocaleKeys.triglyceridesFatBlood.tr().toText16(weight: FontWeight.w600),
LocaleKeys.understandTriglyceridesImpact.tr()
.toText12(fontWeight: FontWeight.w500, color: Color(0xFF8F9AA3))
],
),
@ -230,17 +230,17 @@ class _HealthCalculatorsPageState extends State<HealthCalculatorsPage> {
}
final List<HealthComponentModel> generalHealthServices = [
HealthComponentModel(title: "BMI\nCalculator".needTranslation, icon: AppAssets.bmi, type: HealthCalculatorsTypeEnum.bmi, clinicID: 108, calculationID: null),
HealthComponentModel(title: "Calories\nCalculator".needTranslation, icon: AppAssets.calories, type: HealthCalculatorsTypeEnum.calories, clinicID: null, calculationID: 2),
HealthComponentModel(title: "BMR\nCalculator".needTranslation, icon: AppAssets.bmr, type: HealthCalculatorsTypeEnum.bmr, clinicID: null, calculationID: 3),
HealthComponentModel(title: "Ideal Body\nWeight".needTranslation, icon: AppAssets.ibw, type: HealthCalculatorsTypeEnum.idealBodyWeight, clinicID: null, calculationID: 4),
HealthComponentModel(title: "Body Fat\nCalculator".needTranslation, icon: AppAssets.ibw, type: HealthCalculatorsTypeEnum.bodyFat, clinicID: null, calculationID: 5),
HealthComponentModel(title: "Carbs\nProtein & Fat".needTranslation, icon: AppAssets.ibw, type: HealthCalculatorsTypeEnum.crabsProteinFat, clinicID: null, calculationID: 11),
HealthComponentModel(title: LocaleKeys.bmiCalculator.tr(), icon: AppAssets.bmi, type: HealthCalculatorsTypeEnum.bmi, clinicID: 108, calculationID: null),
HealthComponentModel(title: LocaleKeys.caloriesCalculator.tr(), icon: AppAssets.calories, type: HealthCalculatorsTypeEnum.calories, clinicID: null, calculationID: 2),
HealthComponentModel(title: LocaleKeys.bmrCalculator.tr(), icon: AppAssets.bmr, type: HealthCalculatorsTypeEnum.bmr, clinicID: null, calculationID: 3),
HealthComponentModel(title: LocaleKeys.idealBodyWeight.tr(), icon: AppAssets.ibw, type: HealthCalculatorsTypeEnum.idealBodyWeight, clinicID: null, calculationID: 4),
HealthComponentModel(title: LocaleKeys.bodyFatCalculator.tr(), icon: AppAssets.ibw, type: HealthCalculatorsTypeEnum.bodyFat, clinicID: null, calculationID: 5),
HealthComponentModel(title: LocaleKeys.carbsProteinFat.tr(), icon: AppAssets.ibw, type: HealthCalculatorsTypeEnum.crabsProteinFat, clinicID: null, calculationID: 11),
];
final List<HealthComponentModel> womenHealthServices = [
HealthComponentModel(title: "Ovulation\nPeriod".needTranslation, icon: AppAssets.locate_me, type: HealthCalculatorsTypeEnum.ovulation, clinicID: null, calculationID: 6 ),
HealthComponentModel(title: "Delivery\nDue Date".needTranslation, icon: AppAssets.activeCheck, type: HealthCalculatorsTypeEnum.deliveryDueDate, clinicID: null, calculationID: 6),
HealthComponentModel(title: LocaleKeys.ovulationPeriod.tr(), icon: AppAssets.locate_me, type: HealthCalculatorsTypeEnum.ovulation, clinicID: null, calculationID: 6 ),
HealthComponentModel(title: LocaleKeys.deliveryDueDate.tr(), icon: AppAssets.activeCheck, type: HealthCalculatorsTypeEnum.deliveryDueDate, clinicID: null, calculationID: 6),
];
}

@ -1,4 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators_and_converts/health_calculator_view_model.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
@ -92,7 +94,7 @@ class _BodyFatWidgetState extends State<BodyFatWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Select Gender".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.selectGender.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedGender.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -105,7 +107,7 @@ class _BodyFatWidgetState extends State<BodyFatWidget> {
).paddingSymmetrical(0.w, 16.w).onPress(() {
List<String> _genders = ["Male", "Female"];
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Gender".needTranslation,
label: LocaleKeys.selectGender.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -215,7 +217,7 @@ class _BodyFatWidgetState extends State<BodyFatWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -323,7 +325,7 @@ class _BodyFatWidgetState extends State<BodyFatWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Unit".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.unit.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedNeckUnit.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -332,7 +334,7 @@ class _BodyFatWidgetState extends State<BodyFatWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -449,7 +451,7 @@ class _BodyFatWidgetState extends State<BodyFatWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -557,7 +559,7 @@ class _BodyFatWidgetState extends State<BodyFatWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Unit".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.unit.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedHipUnit.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -566,7 +568,7 @@ class _BodyFatWidgetState extends State<BodyFatWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),

@ -1,3 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
@ -10,6 +11,8 @@ import 'package:hmg_patient_app_new/services/dialog_service.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators_and_converts/health_calculator_view_model.dart';
import '../../../generated/locale_keys.g.dart';
class BMIWidget extends StatefulWidget {
Function(dynamic result)? onChange;
@ -116,7 +119,7 @@ class _BMIWidgetState extends State<BMIWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -233,7 +236,7 @@ class _BMIWidgetState extends State<BMIWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),

@ -1,4 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
@ -87,7 +89,7 @@ class _BMRWidgetState extends State<BMRWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Select Gender".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.selectGender.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedGender.toCamelCase.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -101,7 +103,7 @@ class _BMRWidgetState extends State<BMRWidget> {
List<String> _genders = ["Male", "Female"];
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Gender".needTranslation,
label: LocaleKeys.selectGender.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -168,7 +170,7 @@ class _BMRWidgetState extends State<BMRWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Age (11-120) yrs".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
"Age (11-120) yrs".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
Container(
height: 20.w,
alignment: Alignment.centerLeft,
@ -240,7 +242,7 @@ class _BMRWidgetState extends State<BMRWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Unit".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.unit.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedHeightUnit.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -249,7 +251,7 @@ class _BMRWidgetState extends State<BMRWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -367,7 +369,7 @@ class _BMRWidgetState extends State<BMRWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -437,7 +439,7 @@ class _BMRWidgetState extends State<BMRWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Activity Level".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.activityLevel.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedActivityLevel.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -450,7 +452,7 @@ class _BMRWidgetState extends State<BMRWidget> {
).paddingSymmetrical(0.w, 16.w).onPress(() {
List<String> _activity = ["Almost Inactive (no exercise)", "Lightly active", "Lightly active (1-3) days per week", "Super active (very hard exercise)"];
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Activity Level".needTranslation,
label: LocaleKeys.selectActivityLevel.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),

@ -1,4 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
@ -102,7 +104,7 @@ class _CaloriesWidgetState extends State<CaloriesWidget> {
List<String> _genders = ["Male", "Female"];
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Gender".needTranslation,
label: LocaleKeys.selectGender.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -168,7 +170,7 @@ class _CaloriesWidgetState extends State<CaloriesWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Age (11-120) yrs".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
"Age (11-120) yrs".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
Container(
height: 20.w,
alignment: Alignment.centerLeft,
@ -249,7 +251,7 @@ class _CaloriesWidgetState extends State<CaloriesWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -366,7 +368,7 @@ class _CaloriesWidgetState extends State<CaloriesWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -436,7 +438,7 @@ class _CaloriesWidgetState extends State<CaloriesWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Activity Level".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.activityLevel.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedActivityLevel.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -449,7 +451,7 @@ class _CaloriesWidgetState extends State<CaloriesWidget> {
).paddingSymmetrical(0.w, 16.w).onPress(() {
List<String> _activity = ["Almost Inactive (no exercise)", "Lightly active", "Lightly active (1-3) days per week", "Super active (very hard exercise)"];
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Activity Level".needTranslation,
label: LocaleKeys.selectActivityLevel.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),

@ -1,4 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
@ -68,7 +70,7 @@ class _CrabsWidgetState extends State<CrabsWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Calories Per Day".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.caloriesPerDay.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
Container(
height: 20.w,
alignment: Alignment.centerLeft,
@ -111,7 +113,7 @@ class _CrabsWidgetState extends State<CrabsWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Diet Type".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.dietType.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedDietType.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -124,7 +126,7 @@ class _CrabsWidgetState extends State<CrabsWidget> {
).paddingSymmetrical(0.w, 16.w).onPress(() {
List<String> _activity = ["Very Low Crabs", "Low Crabs", "Moderate Crabs", "USDA Guidelines ", "Zone Diet"];
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Diet Type".needTranslation,
label: LocaleKeys.selectDietType.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),

@ -36,7 +36,7 @@ class _DeliveryDueDWidgetState extends State<DeliveryDueDWidget> {
children: [
TextInputWidget(
labelText: "Last Period Date",
hintText: "11 July, 1994".needTranslation,
hintText: "11 July, 1994",
controller: _date,
focusNode: FocusNode(),
isEnable: true,

@ -1,4 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
@ -114,7 +116,7 @@ class _IdealBodyWeightWidgetState extends State<IdealBodyWeightWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Unit".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.unit.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedHeightUnit.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -123,7 +125,7 @@ class _IdealBodyWeightWidgetState extends State<IdealBodyWeightWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -231,7 +233,7 @@ class _IdealBodyWeightWidgetState extends State<IdealBodyWeightWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Unit".toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.unit.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedWeightUnit.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -240,7 +242,7 @@ class _IdealBodyWeightWidgetState extends State<IdealBodyWeightWidget> {
],
).onPress(() {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Unit".needTranslation,
label: LocaleKeys.unit.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -308,7 +310,7 @@ class _IdealBodyWeightWidgetState extends State<IdealBodyWeightWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Body Frame Size".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.bodyFrameSize.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
selectedBodyFrameSize.toText12(fontWeight: FontWeight.w500, color: AppColors.textColor),
],
),
@ -321,7 +323,7 @@ class _IdealBodyWeightWidgetState extends State<IdealBodyWeightWidget> {
).paddingSymmetrical(0.w, 16.w).onPress(() {
List<String> _activity = ["Small (fingers overlaps)", "Medium (fingers touch)", "Large (fingers don't touch)"];
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Select Body Frame Size".needTranslation,
label: LocaleKeys.selectBodyFrameSize.tr(context: context),
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),

@ -1,4 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
@ -63,7 +65,7 @@ class _OvulationWidgetState extends State<OvulationWidget> {
children: [
TextInputWidget(
labelText: "Date",
hintText: "11 July, 1994".needTranslation,
hintText: "11 July, 1994",
controller: _ageController,
isEnable: true,
prefix: null,
@ -95,7 +97,7 @@ class _OvulationWidgetState extends State<OvulationWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Average Cycle Length (Usually 28 days)".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.averageCycleLength.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
Container(
height: 20.w,
alignment: Alignment.centerLeft,
@ -132,7 +134,7 @@ class _OvulationWidgetState extends State<OvulationWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
"Average Luteal Phase Length(Usually 14 days)".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
LocaleKeys.averageLutealPhase.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.inputLabelTextColor),
Container(
height: 20.w,
alignment: Alignment.centerLeft,

@ -1,5 +1,6 @@
import 'dart:developer';
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_export.dart';
@ -8,6 +9,7 @@ import 'package:hmg_patient_app_new/core/enums.dart';
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/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/health_trackers/health_trackers_view_model.dart';
import 'package:hmg_patient_app_new/services/dialog_service.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
@ -55,11 +57,11 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
String _getPageTitle() {
switch (widget.trackerType) {
case HealthTrackerTypeEnum.bloodSugar:
return "Add Blood Sugar".needTranslation;
return LocaleKeys.addBloodSugar.tr(context: context);
case HealthTrackerTypeEnum.bloodPressure:
return "Add Blood Pressure".needTranslation;
return LocaleKeys.addBloodPressure.tr(context: context);
case HealthTrackerTypeEnum.weightTracker:
return "Add Weight".needTranslation;
return LocaleKeys.addWeight.tr(context: context);
}
}
@ -67,11 +69,11 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
String _getSuccessMessage() {
switch (widget.trackerType) {
case HealthTrackerTypeEnum.bloodSugar:
return "Blood Sugar Data saved successfully".needTranslation;
return LocaleKeys.bloodSugarDataSavedSuccessfully.tr(context: context);
case HealthTrackerTypeEnum.bloodPressure:
return "Blood Pressure Data saved successfully".needTranslation;
return LocaleKeys.bloodPressureDataSavedSuccessfully.tr(context: context);
case HealthTrackerTypeEnum.weightTracker:
return "Weight Data saved successfully".needTranslation;
return LocaleKeys.weightDataSavedSuccessfully.tr(context: context);
}
}
@ -92,7 +94,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
// Save Blood Sugar entry
Future<void> _saveBloodSugarEntry(HealthTrackersViewModel viewModel) async {
LoaderBottomSheet.showLoader(loadingText: "Please wait".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.pleaseWait.tr(context: context));
// Combine date and time
final dateTime = "${dateController.text} ${timeController.text}";
@ -113,7 +115,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
// Save Weight entry
Future<void> _saveWeightEntry(HealthTrackersViewModel viewModel) async {
LoaderBottomSheet.showLoader(loadingText: "Please wait".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.pleaseWait.tr(context: context));
// Combine date and time
final dateTime = "${dateController.text} ${timeController.text}";
@ -133,7 +135,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
// Save Blood Pressure entry
Future<void> _saveBloodPressureEntry(HealthTrackersViewModel viewModel) async {
LoaderBottomSheet.showLoader(loadingText: "Please wait".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.pleaseWait.tr(context: context));
// Combine date and time
final dateTime = "${dateController.text} ${timeController.text}";
@ -204,7 +206,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
bool useUpperCase = false,
}) {
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: title.needTranslation,
label: title,
message: "",
child: Container(
constraints: BoxConstraints(maxHeight: MediaQuery.of(context).size.height * 0.7),
@ -237,7 +239,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
FocusScope.of(context).unfocus();
_showSelectionBottomSheet(
context: context,
title: "Select Unit".needTranslation,
title: LocaleKeys.selectUnit.tr(context: context),
items: viewModel.bloodSugarUnit,
selectedValue: viewModel.selectedBloodSugarUnit,
onSelected: viewModel.setBloodSugarUnit,
@ -250,7 +252,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
FocusScope.of(context).unfocus();
_showSelectionBottomSheet(
context: context,
title: "Select Measure Time".needTranslation,
title: LocaleKeys.selectMeasureTime.tr(context: context),
items: viewModel.bloodSugarMeasureTimeEnList,
selectedValue: viewModel.selectedBloodSugarMeasureTime,
onSelected: viewModel.setBloodSugarMeasureTime,
@ -263,7 +265,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
FocusScope.of(context).unfocus();
_showSelectionBottomSheet(
context: context,
title: "Select Unit".needTranslation,
title: LocaleKeys.selectUnit.tr(context: context),
items: viewModel.weightUnits,
selectedValue: viewModel.selectedWeightUnit,
onSelected: viewModel.setWeightUnit,
@ -276,7 +278,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
FocusScope.of(context).unfocus();
_showSelectionBottomSheet(
context: context,
title: "Select Arm".needTranslation,
title: LocaleKeys.selectArm.tr(context: context),
items: viewModel.measuredArmList,
selectedValue: viewModel.selectedMeasuredArm,
onSelected: viewModel.setMeasuredArm,
@ -404,7 +406,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
children: [
_buildSettingsRow(
icon: AppAssets.heightIcon,
label: "Enter Blood Sugar".needTranslation,
label: LocaleKeys.enterBloodSugar.tr(context: context),
inputField: _buildTextField(viewModel.bloodSugarController, '', keyboardType: TextInputType.number),
unit: viewModel.selectedBloodSugarUnit,
onUnitTap: () => _showBloodSugarUnitSelectionBottomSheet(context, viewModel),
@ -413,7 +415,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
Divider(height: 1, color: AppColors.dividerColor),
_buildSettingsRow(
icon: AppAssets.weight_tracker_icon,
label: "Select Measure Time".needTranslation,
label: LocaleKeys.selectMeasureTime.tr(context: context),
value: viewModel.selectedBloodSugarMeasureTime,
onRowTap: () => _showBloodSugarEntryTimeBottomSheet(context, viewModel),
),
@ -428,19 +430,19 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
_buildSettingsRow(
icon: AppAssets.bloodPressureIcon,
iconColor: AppColors.greyTextColor,
label: "Enter Systolic Value".needTranslation,
label: LocaleKeys.enterSystolicValue.tr(context: context),
inputField: _buildTextField(viewModel.systolicController, '', keyboardType: TextInputType.number),
),
_buildSettingsRow(
icon: AppAssets.bloodPressureIcon,
iconColor: AppColors.greyTextColor,
label: "Enter Diastolic Value".needTranslation,
label: LocaleKeys.enterDiastolicValue.tr(context: context),
inputField: _buildTextField(viewModel.diastolicController, '', keyboardType: TextInputType.number),
),
_buildSettingsRow(
icon: AppAssets.bodyIcon,
iconColor: AppColors.greyTextColor,
label: "Select Arm".needTranslation,
label: LocaleKeys.selectArm.tr(context: context),
value: viewModel.selectedMeasuredArm,
onRowTap: () => _showMeasuredArmSelectionBottomSheet(context, viewModel),
),
@ -455,7 +457,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
children: [
_buildSettingsRow(
icon: AppAssets.weightScale,
label: "Enter Weight".needTranslation,
label: LocaleKeys.enterWeight.tr(context: context),
inputField: _buildTextField(viewModel.weightController, '', keyboardType: TextInputType.number),
unit: viewModel.selectedWeightUnit,
onUnitTap: () => _showWeightUnitSelectionBottomSheet(context, viewModel),
@ -474,7 +476,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
isReadOnly: true,
isArrowTrailing: true,
labelText: "Date",
hintText: "Select date".needTranslation,
hintText: LocaleKeys.pickADate.tr(context: context),
focusNode: FocusNode(),
isEnable: true,
prefix: null,
@ -504,7 +506,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
isReadOnly: true,
isArrowTrailing: true,
labelText: "Time",
hintText: "Select time".needTranslation,
hintText: LocaleKeys.selectMeasureTime.tr(context: context),
focusNode: FocusNode(),
isEnable: true,
prefix: null,
@ -547,7 +549,7 @@ class _AddHealthTrackerEntryPageState extends State<AddHealthTrackerEntryPage> {
child: Padding(
padding: EdgeInsets.all(24.w),
child: CustomButton(
text: "Save".needTranslation,
text: LocaleKeys.save.tr(context: context),
onPressed: () async => await _saveEntry(viewModel),
borderRadius: 12.r,
padding: EdgeInsets.symmetric(vertical: 14.h),

@ -1,3 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
@ -14,6 +15,7 @@ import 'package:hmg_patient_app_new/features/health_trackers/models/blood_sugar/
import 'package:hmg_patient_app_new/features/health_trackers/models/blood_sugar/year_diabetic_result_average.dart';
import 'package:hmg_patient_app_new/features/health_trackers/models/weight/week_weight_measurement_result_average.dart';
import 'package:hmg_patient_app_new/features/health_trackers/models/weight/year_weight_measurement_result_average.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/health_trackers/health_trackers_view_model.dart';
import 'package:hmg_patient_app_new/presentation/health_trackers/widgets/tracker_last_value_card.dart';
import 'package:hmg_patient_app_new/services/dialog_service.dart';
@ -67,11 +69,11 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
String _getPageTitle() {
switch (widget.trackerType) {
case HealthTrackerTypeEnum.bloodSugar:
return "Blood Sugar".needTranslation;
return LocaleKeys.bloodSugar.tr(context: context);
case HealthTrackerTypeEnum.bloodPressure:
return "Blood Pressure".needTranslation;
return LocaleKeys.bloodPressure.tr(context: context);
case HealthTrackerTypeEnum.weightTracker:
return "Weight".needTranslation;
return LocaleKeys.weight.tr(context: context);
}
}
@ -153,7 +155,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
final dialogService = getIt.get<DialogService>();
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: title.needTranslation,
label: title,
message: "",
child: Container(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 4.h, bottom: 4.h),
@ -183,7 +185,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
void _showHistoryDurationBottomsheet(BuildContext context, HealthTrackersViewModel viewModel) {
_showSelectionBottomSheet(
context: context,
title: "Select Duration".needTranslation,
title: LocaleKeys.selectDuration.tr(),
items: viewModel.durationFilters,
selectedValue: viewModel.selectedDurationFilter,
onSelected: viewModel.setFilterDuration,
@ -286,7 +288,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
children: [
Row(
children: [
"History".needTranslation.toText16(isBold: true),
LocaleKeys.history.tr(context: context).toText16(isBold: true),
if (viewModel.isGraphView) ...[
SizedBox(width: 12.w),
InkWell(
@ -661,9 +663,9 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_buildLegendItem(AppColors.errorColor, "Systolic".needTranslation),
_buildLegendItem(AppColors.errorColor, LocaleKeys.systolic.tr()),
SizedBox(width: 24.w),
_buildLegendItem(AppColors.blueColor, "Diastolic".needTranslation),
_buildLegendItem(AppColors.blueColor, LocaleKeys.diastolic.tr()),
],
),
SizedBox(height: 12.h),
@ -1046,7 +1048,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
final emailController = TextEditingController(text: userEmail);
dialogService.showFamilyBottomSheetWithoutHWithChild(
label: "Send Report by Email".needTranslation,
label: LocaleKeys.sendReportByEmail.tr(),
message: "",
child: _buildEmailInputContent(
context: context,
@ -1068,7 +1070,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Enter your email address to receive the report".needTranslation.toText14(
LocaleKeys.enterYourEmailToReceiveReport.tr().toText14(
color: AppColors.textColor,
weight: FontWeight.w400,
),
@ -1077,8 +1079,8 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
// Email Input Field using TextInputWidget
TextInputWidget(
padding: EdgeInsets.symmetric(horizontal: 8.w),
labelText: "Email Address".needTranslation,
hintText: "Enter email address".needTranslation,
labelText: LocaleKeys.email.tr(context: context),
hintText: LocaleKeys.enterEmail.tr(context: context),
controller: emailController,
keyboardType: TextInputType.emailAddress,
isEnable: true,
@ -1094,7 +1096,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
Expanded(
child: CustomButton(
height: 56.h,
text: "Send Report".needTranslation,
text: LocaleKeys.send.tr(context: context),
onPressed: () {
_sendEmailReport(
context: context,
@ -1122,7 +1124,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
// Validate email
if (email.isEmpty) {
dialogService.showErrorBottomSheet(
message: "Please enter your email address".needTranslation,
message: LocaleKeys.enterEmail.tr(context: context),
);
return;
}
@ -1131,7 +1133,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
final emailRegex = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');
if (!emailRegex.hasMatch(email)) {
dialogService.showErrorBottomSheet(
message: "Please enter a valid email address".needTranslation,
message: LocaleKeys.pleaseEnterAValidEmail.tr(context: context),
);
return;
}
@ -1142,7 +1144,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
// Call appropriate email function based on tracker type
switch (widget.trackerType) {
case HealthTrackerTypeEnum.bloodSugar:
LoaderBottomSheet.showLoader(loadingText: "Please wait".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.pleaseWait.tr(context: context));
await viewModel.sendBloodSugarReportByEmail(
email: email,
onSuccess: () {
@ -1158,7 +1160,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
break;
case HealthTrackerTypeEnum.bloodPressure:
LoaderBottomSheet.showLoader(loadingText: "Please wait".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.pleaseWait.tr(context: context));
await viewModel.sendBloodPressureReportByEmail(
email: email,
@ -1176,7 +1178,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
break;
case HealthTrackerTypeEnum.weightTracker:
LoaderBottomSheet.showLoader(loadingText: "Please wait".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.pleaseWait.tr(context: context));
await viewModel.sendWeightReportByEmail(
email: email,
onSuccess: () {
@ -1199,7 +1201,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
showCommonBottomSheetWithoutHeight(
context,
child: Utils.getSuccessWidget(
loadingText: "Report has been sent to your email successfully".needTranslation,
loadingText: LocaleKeys.emailSentSuccessfully.tr(context: context),
),
callBackFunc: () {},
isCloseButtonVisible: false,
@ -1261,7 +1263,7 @@ class _HealthTrackerDetailPageState extends State<HealthTrackerDetailPage> {
child: Padding(
padding: EdgeInsets.all(24.w),
child: CustomButton(
text: "Add new Record".needTranslation,
text: LocaleKeys.addNewRecord.tr(),
onPressed: () {
if (!viewModel.isLoading) {
context.navigateWithName(AppRoutes.addHealthTrackerEntryPage, arguments: widget.trackerType);

@ -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_export.dart';
@ -6,6 +7,7 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/route_extensions.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/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
@ -70,14 +72,14 @@ class _HealthTrackersPageState extends State<HealthTrackersPage> {
@override
Widget build(BuildContext context) {
return CollapsingListView(
title: "Health Trackers".needTranslation,
title: LocaleKeys.healthTrackers.tr(context: context),
child: Column(
children: [
buildHealthTrackerCard(
iconBgColor: AppColors.primaryRedColor,
icon: AppAssets.bloodSugarOnlyIcon,
title: "Blood Sugar".needTranslation,
description: "Track your glucose levels, understand trends, and get personalized insights for better health.".needTranslation,
title: LocaleKeys.bloodSugar.tr(context: context),
description: "Track your glucose levels, understand trends, and get personalized insights for better health.",
onTap: () {
context.navigateWithName(
AppRoutes.healthTrackerDetailPage,
@ -89,8 +91,8 @@ class _HealthTrackersPageState extends State<HealthTrackersPage> {
buildHealthTrackerCard(
iconBgColor: AppColors.infoColor,
icon: AppAssets.bloodPressureIcon,
title: "Blood Pressure".needTranslation,
description: "Monitor your blood pressure levels, track systolic and diastolic readings, and maintain a healthy heart.".needTranslation,
title: LocaleKeys.bloodPressure.tr(context: context),
description: LocaleKeys.monitorBloodPressureLevels.tr(context: context),
onTap: () {
context.navigateWithName(
AppRoutes.healthTrackerDetailPage,
@ -102,8 +104,8 @@ class _HealthTrackersPageState extends State<HealthTrackersPage> {
buildHealthTrackerCard(
iconBgColor: AppColors.successColor,
icon: AppAssets.weightIcon,
title: "Weight".needTranslation,
description: "Track your weight progress, set goals, and maintain a healthy body mass for overall wellness.".needTranslation,
title: LocaleKeys.weight.tr(context: context),
description: LocaleKeys.trackWeightProgress.tr(context: context),
onTap: () {
context.navigateWithName(
AppRoutes.healthTrackerDetailPage,

@ -5,6 +5,7 @@ import 'package:hmg_patient_app_new/core/app_export.dart';
import 'package:hmg_patient_app_new/core/enums.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/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/health_trackers/health_trackers_view_model.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
@ -19,32 +20,32 @@ class TrackerLastValueCard extends StatelessWidget {
/// Get status text and color based on blood sugar value
(String status, Color color, Color bgColor) _getBloodSugarStatus(double value) {
if (value < 70) {
return ('Low'.needTranslation, AppColors.errorColor, AppColors.errorColor.withValues(alpha: 0.5));
return (LocaleKeys.low.tr(), AppColors.errorColor, AppColors.errorColor.withValues(alpha: 0.5));
} else if (value <= 100) {
return ('Normal'.needTranslation, AppColors.successColor, AppColors.successLightBgColor);
return (LocaleKeys.normal.tr(), AppColors.successColor, AppColors.successLightBgColor);
} else if (value <= 125) {
return ('Pre-diabetic'.needTranslation, AppColors.ratingColorYellow, AppColors.errorColor.withValues(alpha: 0.4));
return (LocaleKeys.preDiabetic.tr(), AppColors.ratingColorYellow, AppColors.errorColor.withValues(alpha: 0.4));
} else {
return ('High'.needTranslation, AppColors.errorColor, AppColors.errorColor.withValues(alpha: 0.4));
return (LocaleKeys.high.tr(), AppColors.errorColor, AppColors.errorColor.withValues(alpha: 0.4));
}
}
/// Get status text and color based on blood pressure value (systolic)
(String status, Color color, Color bgColor) _getBloodPressureStatus(int systolic) {
if (systolic < 90) {
return ('Low'.needTranslation, AppColors.errorColor, AppColors.errorColor.withValues(alpha: 0.5));
return (LocaleKeys.low.tr(), AppColors.errorColor, AppColors.errorColor.withValues(alpha: 0.5));
} else if (systolic <= 120) {
return ('Normal'.needTranslation, AppColors.successColor, AppColors.successLightBgColor);
return (LocaleKeys.normal.tr(), AppColors.successColor, AppColors.successLightBgColor);
} else if (systolic <= 140) {
return ('Elevated'.needTranslation, AppColors.ratingColorYellow, AppColors.errorColor.withValues(alpha: 0.4));
return (LocaleKeys.elevated.tr(), AppColors.ratingColorYellow, AppColors.errorColor.withValues(alpha: 0.4));
} else {
return ('High'.needTranslation, AppColors.errorColor, AppColors.errorColor.withValues(alpha: 0.4));
return (LocaleKeys.high.tr(), AppColors.errorColor, AppColors.errorColor.withValues(alpha: 0.4));
}
}
/// Get status for weight (neutral - no good/bad status)
(String status, Color color, Color bgColor) _getWeightStatus() {
return ('Recorded'.needTranslation, AppColors.successColor, AppColors.successLightBgColor);
return (LocaleKeys.recorded.tr(), AppColors.successColor, AppColors.successLightBgColor);
}
/// Get default unit based on tracker type
@ -219,7 +220,7 @@ class TrackerLastValueCard extends StatelessWidget {
),
SizedBox(height: 8.h),
AppCustomChipWidget(
labelText: "No records yet".needTranslation,
labelText: LocaleKeys.noRecordsYet.tr(),
icon: AppAssets.doctor_calendar_icon,
),
],
@ -249,13 +250,13 @@ class TrackerLastValueCard extends StatelessWidget {
Row(
children: [
AppCustomChipWidget(
labelText: "${"Last Record".needTranslation}: $formattedDate",
labelText: "${LocaleKeys.lastRecord.tr()}: $formattedDate",
icon: AppAssets.doctor_calendar_icon,
),
SizedBox(width: 8.w),
if (trackerType != HealthTrackerTypeEnum.weightTracker) ...[
AppCustomChipWidget(
labelText: status.needTranslation,
labelText: status,
icon: AppAssets.normalStatusGreenIcon,
iconColor: statusColor,
),

@ -50,7 +50,7 @@ class ServicesPage extends StatelessWidget {
late MedicalFileViewModel medicalFileViewModel;
late final List<HmgServicesComponentModel> hmgServices = [
HmgServicesComponentModel(11, "Emergency Services".needTranslation, "".needTranslation, AppAssets.emergency_services_icon, bgColor: AppColors.primaryRedColor, true, route: null, onTap: () async {
HmgServicesComponentModel(11, LocaleKeys.emergencyServices.tr(), "", AppAssets.emergency_services_icon, bgColor: AppColors.primaryRedColor, true, route: null, onTap: () async {
if (getIt.get<AppState>().isAuthenticated) {
getIt.get<EmergencyServicesViewModel>().flushData();
getIt.get<EmergencyServicesViewModel>().getTransportationOrders(
@ -71,14 +71,14 @@ class ServicesPage extends StatelessWidget {
}),
HmgServicesComponentModel(
11,
"Book\nAppointment".needTranslation,
"".needTranslation,
LocaleKeys.bookAppointment.tr(),
"",
AppAssets.appointment_calendar_icon,
bgColor: AppColors.bookAppointment,
true,
route: AppRoutes.bookAppointmentPage,
),
HmgServicesComponentModel(5, "Complete Checkup".needTranslation, "".needTranslation, AppAssets.comprehensiveCheckup, bgColor: AppColors.bgGreenColor, true, route: null, onTap: () async {
HmgServicesComponentModel(5, LocaleKeys.completeCheckup.tr(), "", AppAssets.comprehensiveCheckup, bgColor: AppColors.bgGreenColor, true, route: null, onTap: () async {
if (getIt.get<AppState>().isAuthenticated) {
getIt.get<NavigationService>().pushPageRoute(AppRoutes.comprehensiveCheckupPage);
} else {
@ -87,8 +87,8 @@ class ServicesPage extends StatelessWidget {
}),
HmgServicesComponentModel(
11,
"Indoor Navigation".needTranslation,
"".needTranslation,
LocaleKeys.indoorNavigation.tr(),
"",
AppAssets.indoor_nav_icon,
bgColor: Color(0xff45A2F8),
true,
@ -131,7 +131,7 @@ class ServicesPage extends StatelessWidget {
},
),
HmgServicesComponentModel(
11, "E-Referral Services".needTranslation, "".needTranslation, AppAssets.eReferral, bgColor: AppColors.eReferralCardColor, true, route: null, onTap: () async {
11, LocaleKeys.eReferralServices.tr(), "", AppAssets.eReferral, bgColor: AppColors.eReferralCardColor, true, route: null, onTap: () async {
if (getIt.get<AppState>().isAuthenticated) {
getIt.get<NavigationService>().pushPageRoute(AppRoutes.eReferralPage);
} else {
@ -140,13 +140,13 @@ class ServicesPage extends StatelessWidget {
}),
HmgServicesComponentModel(
3,
"Blood Donation".needTranslation,
"".needTranslation,
LocaleKeys.bloodDonation.tr(),
"",
AppAssets.blood_donation_icon,
bgColor: AppColors.bloodDonationCardColor,
true,
route: null, onTap: () async {
LoaderBottomSheet.showLoader(loadingText: "Fetching Data...");
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.pleaseWait.tr());
await bloodDonationViewModel.getRegionSelectedClinics(onSuccess: (val) async {
// await bloodDonationViewModel.getPatientBloodGroupDetails(onSuccess: (val) {
LoaderBottomSheet.hideLoader();
@ -210,8 +210,8 @@ class ServicesPage extends StatelessWidget {
late final List<HmgServicesComponentModel> hmgHealthToolServices = [
HmgServicesComponentModel(
11,
"Health Trackers".needTranslation,
"".needTranslation,
LocaleKeys.healthTrackers.tr(),
"",
AppAssets.general_health,
bgColor: AppColors.whiteColor,
true,
@ -226,15 +226,15 @@ class ServicesPage extends StatelessWidget {
),
HmgServicesComponentModel(
11,
"Daily Water Monitor".needTranslation,
"".needTranslation,
LocaleKeys.dailyWaterMonitor.tr(),
"",
AppAssets.daily_water_monitor_icon,
bgColor: AppColors.whiteColor,
true,
route: null, // Set to null since we handle navigation in onTap
onTap: () async {
if (getIt.get<AppState>().isAuthenticated) {
LoaderBottomSheet.showLoader(loadingText: "Fetching your water intake details.".needTranslation);
LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingYourWaterIntakeDetails.tr());
final waterMonitorVM = getIt.get<WaterMonitorViewModel>();
final context = getIt.get<NavigationService>().navigatorKey.currentContext!;
await waterMonitorVM.fetchUserDetailsForMonitoring(
@ -259,8 +259,8 @@ class ServicesPage extends StatelessWidget {
),
HmgServicesComponentModel(
11,
"Health\nCalculators".needTranslation,
"".needTranslation,
LocaleKeys.healthCalculatorsServices.tr(),
"",
AppAssets.health_calculators_services_icon,
bgColor: AppColors.whiteColor,
true,
@ -268,8 +268,8 @@ class ServicesPage extends StatelessWidget {
),
HmgServicesComponentModel(
5,
"Health\nConverters".needTranslation,
"".needTranslation,
LocaleKeys.healthConvertersServices.tr(),
"",
AppAssets.health_converters_icon,
bgColor: AppColors.whiteColor,
true,
@ -277,8 +277,8 @@ class ServicesPage extends StatelessWidget {
),
HmgServicesComponentModel(
11,
"Smart\nWatches".needTranslation,
"".needTranslation,
LocaleKeys.smartWatchesServices.tr(),
"",
AppAssets.smartwatch_icon,
bgColor: AppColors.whiteColor,
true,
@ -301,13 +301,13 @@ class ServicesPage extends StatelessWidget {
return Scaffold(
backgroundColor: AppColors.bgScaffoldColor,
body: CollapsingListView(
title: "Explore Services".needTranslation,
title: LocaleKeys.exploreServices.tr(),
isLeading: false,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 16.h),
"Medical & Care Services".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
LocaleKeys.medicalAndCareServices.tr().toText18(isBold: true).paddingSymmetrical(24.w, 0),
SizedBox(height: 16.h),
GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
@ -325,7 +325,7 @@ class ServicesPage extends StatelessWidget {
},
).paddingSymmetrical(24.w, 0),
SizedBox(height: 24.h),
"HMG Services".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
LocaleKeys.hmgServices.tr().toText18(isBold: true).paddingSymmetrical(24.w, 0),
SizedBox(height: 16.h),
SizedBox(
height: 350.h,
@ -356,7 +356,7 @@ class ServicesPage extends StatelessWidget {
),
),
SizedBox(height: 24.h),
"Personal Services".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
LocaleKeys.personalServices.tr().toText18(isBold: true).paddingSymmetrical(24.w, 0),
SizedBox(height: 16.h),
Row(
children: [
@ -377,7 +377,7 @@ class ServicesPage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Utils.buildSvgWithAssets(icon: AppAssets.wallet, width: 30.w, height: 30.h),
"Habib Wallet".needTranslation.toText14(weight: FontWeight.w600, maxlines: 2).expanded,
LocaleKeys.habibWallet.tr().toText14(weight: FontWeight.w600, maxlines: 2).expanded,
Utils.buildSvgWithAssets(icon: AppAssets.arrow_forward),
],
),
@ -387,7 +387,7 @@ class ServicesPage extends StatelessWidget {
return Utils.getPaymentAmountWithSymbol2(habibWalletVM.habibWalletAmount, isExpanded: false)
.toShimmer2(isShow: habibWalletVM.isWalletAmountLoading, radius: 12.r, width: 80.w, height: 24.h);
})
: "Login to view your wallet balance".needTranslation.toText12(fontWeight: FontWeight.w500, maxLine: 2),
: LocaleKeys.loginToViewWalletBalance.tr().toText12(fontWeight: FontWeight.w500, maxLine: 2),
Spacer(),
getIt.get<AppState>().isAuthenticated
? CustomButton(
@ -396,7 +396,7 @@ class ServicesPage extends StatelessWidget {
iconSize: 16.w,
iconColor: AppColors.infoColor,
textColor: AppColors.infoColor,
text: "Recharge".needTranslation,
text: LocaleKeys.recharge.tr(),
borderWidth: 0.w,
fontWeight: FontWeight.w500,
borderColor: Colors.transparent,
@ -472,7 +472,7 @@ class ServicesPage extends StatelessWidget {
),
],
)
: "Login to view your medical file".needTranslation.toText12(fontWeight: FontWeight.w500, maxLine: 2),
: LocaleKeys.loginToViewMedicalFile.tr().toText12(fontWeight: FontWeight.w500, maxLine: 2),
Spacer(),
getIt.get<AppState>().isAuthenticated
? CustomButton(
@ -481,7 +481,7 @@ class ServicesPage extends StatelessWidget {
iconSize: 16.w,
iconColor: AppColors.primaryRedColor,
textColor: AppColors.primaryRedColor,
text: "Add Member".needTranslation,
text: LocaleKeys.addMember.tr(),
borderWidth: 0.w,
fontWeight: FontWeight.w500,
borderColor: Colors.transparent,
@ -492,8 +492,8 @@ class ServicesPage extends StatelessWidget {
DialogService dialogService = getIt.get<DialogService>();
medicalFileViewModel.clearAuthValues();
dialogService.showAddFamilyFileSheet(
label: "Add Family Member".needTranslation,
message: "Please fill the below field to add a new family member to your profile".needTranslation,
label: LocaleKeys.addFamilyMember.tr(),
message: LocaleKeys.pleaseFillBelowFieldToAddNewFamilyMember.tr(),
onVerificationPress: () {
medicalFileViewModel.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms);
});
@ -517,7 +517,7 @@ class ServicesPage extends StatelessWidget {
],
).paddingSymmetrical(24.w, 0),
SizedBox(height: 24.h),
"Health Tools".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
LocaleKeys.healthTools.tr().toText18(isBold: true).paddingSymmetrical(24.w, 0),
SizedBox(height: 16.h),
GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
@ -540,7 +540,7 @@ class ServicesPage extends StatelessWidget {
},
).paddingSymmetrical(24.w, 0),
SizedBox(height: 24.h),
"Support Services".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
LocaleKeys.supportServices.tr().toText18(isBold: true).paddingSymmetrical(24.w, 0),
SizedBox(height: 16.h),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -565,7 +565,7 @@ class ServicesPage extends StatelessWidget {
fit: BoxFit.contain,
),
SizedBox(width: 8.w),
"Virtual Tour".needTranslation.toText12(fontWeight: FontWeight.w500)
LocaleKeys.virtualTour.tr().toText12(fontWeight: FontWeight.w500)
],
),
),
@ -594,7 +594,7 @@ class ServicesPage extends StatelessWidget {
fit: BoxFit.contain,
),
SizedBox(width: 8.w),
"Car Parking".needTranslation.toText12(fontWeight: FontWeight.w500)
LocaleKeys.carParking.tr().toText12(fontWeight: FontWeight.w500)
],
).onPress(() {
Navigator.push(
@ -633,7 +633,7 @@ class ServicesPage extends StatelessWidget {
fit: BoxFit.contain,
),
SizedBox(width: 8.w),
"Latest News".needTranslation.toText12(fontWeight: FontWeight.w500)
LocaleKeys.latestNews.tr().toText12(fontWeight: FontWeight.w500)
],
),
),
@ -662,7 +662,7 @@ class ServicesPage extends StatelessWidget {
fit: BoxFit.contain,
),
SizedBox(width: 8.w),
"HMG Contact".needTranslation.toText12(fontWeight: FontWeight.w500)
LocaleKeys.hmgContact.tr().toText12(fontWeight: FontWeight.w500)
],
),
),

@ -113,7 +113,7 @@ class _LandingPageState extends State<LandingPage> {
myAppointmentsViewModel.initAppointmentsViewModel();
myAppointmentsViewModel.getPatientAppointments(true, false);
emergencyServicesViewModel.checkPatientERAdvanceBalance();
myAppointmentsViewModel.getPatientAppointmentQueueDetails();
// myAppointmentsViewModel.getPatientAppointmentQueueDetails();
notificationsViewModel.initNotificationsViewModel();
// Commented as per new requirement to remove rating popup from the app

@ -150,7 +150,7 @@ class ProfileSettingsState extends State<ProfileSettings> {
children: [
Utils.buildSvgWithAssets(icon: AppAssets.wallet, width: 40.w, height: 40.h),
"Habib Wallet".needTranslation.toText16(weight: FontWeight.w600, maxlines: 2).expanded,
Utils.buildSvgWithAssets(icon: AppAssets.arrow_forward),
Utils.buildSvgWithAssets(icon: getIt.get<AppState>().isArabic() ? AppAssets.arrow_back : AppAssets.arrow_forward),
],
),
Spacer(),
@ -193,13 +193,10 @@ class ProfileSettingsState extends State<ProfileSettings> {
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
child: Column(
children: [
actionItem(AppAssets.language_change, "Language".needTranslation, () {
showCommonBottomSheetWithoutHeight(context,
title: "Application Language".needTranslation, child: AppLanguageChange(), callBackFunc: () {}, isFullScreen: false);
actionItem(AppAssets.language_change, LocaleKeys.language.tr(context: context), () {
showCommonBottomSheetWithoutHeight(context, title: LocaleKeys.language.tr(context: context), child: AppLanguageChange(), callBackFunc: () {}, isFullScreen: false);
}, trailingLabel: Utils.appState.isArabic() ? "العربية".needTranslation : "English".needTranslation),
1.divider,
actionItem(AppAssets.accessibility, "Accessibility".needTranslation, () {}),
1.divider,
actionItem(AppAssets.bell, "Notifications Settings".needTranslation, () {}),
1.divider,
actionItem(AppAssets.touch_face_id, "Touch ID / Face ID Services".needTranslation, () {}, switchValue: true),
@ -236,7 +233,7 @@ class ProfileSettingsState extends State<ProfileSettings> {
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
child: Column(
children: [
actionItem(AppAssets.call_fill, "Contact Us".needTranslation, () {
actionItem(AppAssets.call_fill, LocaleKeys.contactUs.tr(context: context), () {
launchUrl(Uri.parse("tel://" + "+966 11 525 9999"));
}, trailingLabel: "011 525 9999"),
1.divider,

@ -138,6 +138,6 @@ class AppRoutes {
qrParking: (context) => ChangeNotifierProvider<QrParkingViewModel>(
create: (_) => getIt<QrParkingViewModel>(),
child: const ParkingPage(),
),}
)
};
}

@ -9,6 +9,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.59"
adaptive_number:
dependency: transitive
description:
name: adaptive_number
sha256: "3a567544e9b5c9c803006f51140ad544aedc79604fd4f3f2c1380003f97c1d77"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
amazon_payfort:
dependency: "direct main"
description:
@ -61,10 +69,10 @@ packages:
dependency: "direct main"
description:
name: barcode_scan2
sha256: "0f3eb7c0a0c80a0f65d3fa88737544fdb6d27127a4fad566e980e626f3fb76e1"
sha256: "50b286021c644deee71e20a06c1709adc6594e39d65024ced0458cc1e3ff298e"
url: "https://pub.dev"
source: hosted
version: "4.5.1"
version: "4.6.0"
boolean_selector:
dependency: transitive
description:
@ -193,6 +201,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.8"
dart_jsonwebtoken:
dependency: "direct main"
description:
name: dart_jsonwebtoken
sha256: "0de65691c1d736e9459f22f654ddd6fd8368a271d4e41aa07e53e6301eff5075"
url: "https://pub.dev"
source: hosted
version: "3.3.1"
dartz:
dependency: "direct main"
description:
@ -218,6 +234,38 @@ packages:
url: "https://github.com/bardram/device_calendar"
source: git
version: "4.3.1"
device_calendar_plus:
dependency: "direct main"
description:
name: device_calendar_plus
sha256: d11a70d98eb123e8eb09fdcfaf220ca4f1aa65a1512e12092f176f4b54983507
url: "https://pub.dev"
source: hosted
version: "0.3.3"
device_calendar_plus_android:
dependency: transitive
description:
name: device_calendar_plus_android
sha256: a341ef29fa0251251287d63c1d009dfd35c1459dc6a129fd5e03f5ac92d8d7ff
url: "https://pub.dev"
source: hosted
version: "0.3.3"
device_calendar_plus_ios:
dependency: transitive
description:
name: device_calendar_plus_ios
sha256: "3b2f84ce1ed002be8460e214a3229e66748bbaad4077603f2c734d67c42033ff"
url: "https://pub.dev"
source: hosted
version: "0.3.3"
device_calendar_plus_platform_interface:
dependency: transitive
description:
name: device_calendar_plus_platform_interface
sha256: "0ce7511c094ca256831a48e16efe8f1e97e7bd00a5ff3936296ffd650a1d76b5"
url: "https://pub.dev"
source: hosted
version: "0.3.3"
device_info_plus:
dependency: "direct main"
description:
@ -258,6 +306,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.0.2"
ed25519_edwards:
dependency: transitive
description:
name: ed25519_edwards
sha256: "6ce0112d131327ec6d42beede1e5dfd526069b18ad45dcf654f15074ad9276cd"
url: "https://pub.dev"
source: hosted
version: "0.3.1"
equatable:
dependency: "direct main"
description:
@ -431,6 +487,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.4.1"
flutter_callkit_incoming:
dependency: "direct main"
description:
name: flutter_callkit_incoming
sha256: "3589deb8b71e43f2d520a9c8a5240243f611062a8b246cdca4b1fda01fbbf9b8"
url: "https://pub.dev"
source: hosted
version: "3.0.0"
flutter_hooks:
dependency: transitive
description:
@ -634,10 +698,10 @@ packages:
dependency: "direct main"
description:
name: flutter_zoom_videosdk
sha256: "22731485fe48472a34ff0c7e787a382f5e1ec662fd89186e58e760974fc2a0cb"
sha256: "46a4dea664b1c969099328a499c198a1755adf9ac333dea28bea5187910b3bf9"
url: "https://pub.dev"
source: hosted
version: "2.3.0"
version: "2.1.10"
fluttertoast:
dependency: "direct main"
description:
@ -894,6 +958,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.2"
huawei_health:
dependency: "direct main"
description:
name: huawei_health
sha256: "52fb9990e1fc857e2fa1b1251dde63b2146086a13b2d9c50bdfc3c4f715c8a12"
url: "https://pub.dev"
source: hosted
version: "6.16.0+300"
huawei_location:
dependency: "direct main"
description:
@ -923,10 +995,10 @@ packages:
dependency: transitive
description:
name: image_picker_android
sha256: "8dfe08ea7fcf7467dbaf6889e72eebd5e0d6711caae201fdac780eb45232cd02"
sha256: "28f3987ca0ec702d346eae1d90eda59603a2101b52f1e234ded62cff1d5cfa6e"
url: "https://pub.dev"
source: hosted
version: "0.8.13+3"
version: "0.8.13+1"
image_picker_for_web:
dependency: transitive
description:
@ -1075,18 +1147,18 @@ packages:
dependency: transitive
description:
name: local_auth_android
sha256: "1ee0e63fb8b5c6fa286796b5fb1570d256857c2f4a262127e728b36b80a570cf"
sha256: "48924f4a8b3cc45994ad5993e2e232d3b00788a305c1bf1c7db32cef281ce9a3"
url: "https://pub.dev"
source: hosted
version: "1.0.53"
version: "1.0.52"
local_auth_darwin:
dependency: transitive
description:
name: local_auth_darwin
sha256: "699873970067a40ef2f2c09b4c72eb1cfef64224ef041b3df9fdc5c4c1f91f49"
sha256: "0e9706a8543a4a2eee60346294d6a633dd7c3ee60fae6b752570457c4ff32055"
url: "https://pub.dev"
source: hosted
version: "1.6.1"
version: "1.6.0"
local_auth_platform_interface:
dependency: transitive
description:
@ -1147,10 +1219,10 @@ packages:
dependency: "direct main"
description:
name: lottie
sha256: "8ae0be46dbd9e19641791dc12ee480d34e1fd3f84c749adc05f3ad9342b71b95"
sha256: c5fa04a80a620066c15cf19cc44773e19e9b38e989ff23ea32e5903ef1015950
url: "https://pub.dev"
source: hosted
version: "3.3.2"
version: "3.3.1"
manage_calendar_events:
dependency: "direct main"
description:
@ -1407,6 +1479,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.8"
pointycastle:
dependency: transitive
description:
name: pointycastle
sha256: "92aa3841d083cc4b0f4709b5c74fd6409a3e6ba833ffc7dc6a8fee096366acf5"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
posix:
dependency: transitive
description:
@ -1419,10 +1499,10 @@ packages:
dependency: transitive
description:
name: protobuf
sha256: "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d"
sha256: "75ec242d22e950bdcc79ee38dd520ce4ee0bc491d7fadc4ea47694604d22bf06"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
version: "6.0.0"
provider:
dependency: "direct main"
description:
@ -1463,6 +1543,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.0"
scrollable_positioned_list:
dependency: "direct main"
description:
name: scrollable_positioned_list
sha256: "1b54d5f1329a1e263269abc9e2543d90806131aa14fe7c6062a8054d57249287"
url: "https://pub.dev"
source: hosted
version: "0.3.8"
share_plus:
dependency: "direct main"
description:
@ -1600,10 +1688,10 @@ packages:
dependency: transitive
description:
name: sqflite_android
sha256: ecd684501ebc2ae9a83536e8b15731642b9570dc8623e0073d227d0ee2bfea88
sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b"
url: "https://pub.dev"
source: hosted
version: "2.4.2+2"
version: "2.4.1"
sqflite_common:
dependency: transitive
description:
@ -1725,7 +1813,7 @@ packages:
source: hosted
version: "2.1.5"
timezone:
dependency: transitive
dependency: "direct main"
description:
name: timezone
sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1
@ -1752,10 +1840,10 @@ packages:
dependency: transitive
description:
name: url_launcher_android
sha256: "199bc33e746088546a39cc5f36bac5a278c5e53b40cb3196f99e7345fdcfae6b"
sha256: "81777b08c498a292d93ff2feead633174c386291e35612f8da438d6e92c4447e"
url: "https://pub.dev"
source: hosted
version: "6.3.22"
version: "6.3.20"
url_launcher_ios:
dependency: transitive
description:
@ -1888,10 +1976,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
version: "15.0.2"
version: "15.0.0"
wakelock_plus:
dependency: transitive
description:
@ -1928,10 +2016,10 @@ packages:
dependency: transitive
description:
name: webview_flutter_android
sha256: "21507ea5a326ceeba4d29dea19e37d92d53d9959cfc746317b9f9f7a57418d87"
sha256: "9a25f6b4313978ba1c2cda03a242eea17848174912cfb4d2d8ee84a556f248e3"
url: "https://pub.dev"
source: hosted
version: "4.10.3"
version: "4.10.1"
webview_flutter_platform_interface:
dependency: transitive
description:
@ -1944,10 +2032,10 @@ packages:
dependency: transitive
description:
name: webview_flutter_wkwebview
sha256: fea63576b3b7e02b2df8b78ba92b48ed66caec2bb041e9a0b1cbd586d5d80bfd
sha256: fb46db8216131a3e55bcf44040ca808423539bc6732e7ed34fb6d8044e3d512f
url: "https://pub.dev"
source: hosted
version: "3.23.1"
version: "3.23.0"
win32:
dependency: transitive
description:
@ -1981,5 +2069,5 @@ packages:
source: hosted
version: "6.6.1"
sdks:
dart: ">=3.9.0 <4.0.0"
flutter: ">=3.35.0"
dart: ">=3.8.1 <4.0.0"
flutter: ">=3.32.0"

Loading…
Cancel
Save