diff --git a/README.md b/README.md
index 1a459e3..3fea310 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,11 @@
+# Translation prompt & Command
+
+Read the context for both files & generate translations strings in the en-US.json & ar-SA.json files for the strings containing "needTranslation". Also replace the strings in the dart with the generated Strings. Also do not remove existing properties & do no generate duplicate strings in the json files
+
+flutter3_32 pub run easy_localization:generate -O ./lib/generated -f keys -o locale_keys.g.dart --source-dir ./assets/langs
+
+
+
# HMG Patient App
A comprehensive Flutter-based mobile application for HMG (Habib Medical Group) patients,
diff --git a/assets/images/svg/ar_lang_icon.svg b/assets/images/svg/ar_lang_icon.svg
new file mode 100644
index 0000000..d1c2be0
--- /dev/null
+++ b/assets/images/svg/ar_lang_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/images/svg/en_lang_icon.svg b/assets/images/svg/en_lang_icon.svg
new file mode 100644
index 0000000..fa1c143
--- /dev/null
+++ b/assets/images/svg/en_lang_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index 9c1c962..e0b0d8a 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -1499,5 +1499,20 @@
"selectTime": "حدد الوقت",
"pleaseWaitYouWillBeCalledForVitalSigns": "يرجى الانتظار! سيتم استدعاؤك لقياس العلامات الحيوية",
"pleaseVisitRoomForVitalSigns": "يرجى زيارة الغرفة {roomNumber} لقياس العلامات الحيوية",
- "pleaseVisitRoomToTheDoctor": "يرجى زيارة الغرفة {roomNumber} لمقابلة الطبيب"
+ "pleaseVisitRoomToTheDoctor": "يرجى زيارة الغرفة {roomNumber} لمقابلة الطبيب",
+ "erOnlineCheckInRequest": "طلب تسجيل الوصول عبر الإنترنت لقسم الطوارئ",
+ "indoor": "داخلي",
+ "navigation": "الملاحة",
+ "health": "الصحة",
+ "calculators": "الحاسبات",
+ "converters": "المحولات",
+ "guide": "الدليل",
+ "liveCareServiceDesc": "احصل على استشارة طبية من طبيب متخصص عبر مكالمة فيديو",
+ "bloodGroup": "فصيلة الدم: {bloodType}",
+ "medicalServices": "الخدمات الطبية",
+ "insuranceAndPayments": "التأمين والمدفوعات",
+ "trackerAndOthers": "المتتبع وأخرى",
+ "bmi": "مؤشر كتلة الجسم"
+
+
}
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index 5f356ba..fa59b19 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -1490,5 +1490,20 @@
"selectTime": "Select Time",
"pleaseWaitYouWillBeCalledForVitalSigns": "Please wait! you will be called for vital signs",
"pleaseVisitRoomForVitalSigns": "Please visit Room {roomNumber} for vital signs",
- "pleaseVisitRoomToTheDoctor": "Please visit Room {roomNumber} to the Doctor"
+ "pleaseVisitRoomToTheDoctor": "Please visit Room {roomNumber} to the Doctor",
+ "erOnlineCheckInRequest": "ER Online Check-In Request",
+ "indoor": "Indoor",
+ "navigation": "Navigation",
+ "health": "Health",
+ "calculators": "Calculators",
+ "converters": "Converters",
+ "guide": "Guide",
+ "liveCareServiceDesc": "Get medical advice with a specialist doctor Via a video call",
+ "bloodGroup": "Blood: {bloodType}",
+ "medicalServices": "Medical Services",
+ "insuranceAndPayments": "Insurance & Payments",
+ "trackerAndOthers": "Tracker & Others",
+ "bmi": "BMI"
+
+
}
diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart
index 722a45e..66aa34a 100644
--- a/lib/core/api/api_client.dart
+++ b/lib/core/api/api_client.dart
@@ -189,6 +189,8 @@ class ApiClientImp implements ApiClient {
// body['SessionID'] = "45786230487560q";
}
+ body['IsNewFlutterApp'] = true;
+
body.removeWhere((key, value) => value == null);
}
diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
index 7003aa7..51cf6c5 100644
--- a/lib/core/api_consts.dart
+++ b/lib/core/api_consts.dart
@@ -680,7 +680,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
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index 4bf2117..bfe7707 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -306,6 +306,9 @@ class AppAssets {
static const String bloodPressure = '$svgBasePath/blood_pressure.svg';
static const String temperature = '$svgBasePath/temperature.svg';
+ static const String arLangIcon = '$svgBasePath/ar_lang_icon.svg';
+ static const String enLangIcon = '$svgBasePath/en_lang_icon.svg';
+
// PNGS //
static const String hmgLogo = '$pngBasePath/hmg_logo.png';
static const String liveCareService = '$pngBasePath/livecare_service.png';
diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index e5b0ca4..5995438 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -814,7 +814,8 @@ class Utils {
child: Utils.buildSvgWithAssets(icon: AppAssets.saudi_riyal_icon, width: iconSize.h, height: iconSize.h, iconColor: iconColor),
),
TextSpan(
- text: NumberFormat.currency(locale: 'en_US', symbol: " ", decimalDigits: 0).format(habibWalletAmount),
+ // text: NumberFormat.currency(locale: 'en_US', symbol: " ", decimalDigits: 0).format(habibWalletAmount),
+ text: " ${habibWalletAmount.toStringAsFixed(2)}",
style: TextStyle(
color: textColor,
fontSize: fontSize ?? 32.f,
diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart
index 6379456..0c4ba09 100644
--- a/lib/features/authentication/authentication_view_model.dart
+++ b/lib/features/authentication/authentication_view_model.dart
@@ -571,7 +571,7 @@ class AuthenticationViewModel extends ChangeNotifier {
MedicalFileViewModel medicalVm = getIt();
if (!_appState.getIsChildLoggedIn) {
await medicalVm.getFamilyFiles(status: 0);
- await medicalVm.getAllPendingRecordsByResponseId();
+ // await medicalVm.getAllPendingRecordsByResponseId();
_navigationService.replaceAllRoutesAndNavigateToLanding();
}
} else {
@@ -610,7 +610,7 @@ class AuthenticationViewModel extends ChangeNotifier {
MedicalFileViewModel medicalVm = getIt();
insertPatientIMEIData(loginTypeEnum.toInt);
medicalVm.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan
- medicalVm.getAllPendingRecordsByResponseId();
+ // medicalVm.getAllPendingRecordsByResponseId();
}
await clearDefaultInputValues();
if (isUserAgreedBefore) {
diff --git a/lib/features/authentication/widgets/otp_verification_screen.dart b/lib/features/authentication/widgets/otp_verification_screen.dart
index e33222c..7ddccda 100644
--- a/lib/features/authentication/widgets/otp_verification_screen.dart
+++ b/lib/features/authentication/widgets/otp_verification_screen.dart
@@ -545,20 +545,20 @@ class _OTPVerificationScreenState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 10.h),
- LocaleKeys.otpVerification.tr().toText24(isBold: true),
+ LocaleKeys.otpVerification.tr(context: context).toText24(isBold: true),
SizedBox(height: 20.h),
Wrap(
spacing: 2.h,
runSpacing: 2.h,
children: [
- LocaleKeys.weHaveSendOTP.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
+ LocaleKeys.weHaveSendOTP.tr(context: context).toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
_getMaskedPhoneNumber().toText15(color: AppColors.inputLabelTextColor, isBold: true),
- LocaleKeys.via.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
+ LocaleKeys.via.tr(context: context).toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
(widget.isFormFamilyFile ? LoginTypeEnum.sms.displayName : authVM.loginTypeEnum.displayName)
.toText15(color: AppColors.inputLabelTextColor, isBold: true, letterSpacing: -0.4),
appState.getUserRegistrationPayload.isRegister != null && appState.getUserRegistrationPayload.isRegister == true
- ? LocaleKeys.forRegistrationVerification.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4)
- : LocaleKeys.forLoginVerification.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
+ ? LocaleKeys.forRegistrationVerification.tr(context: context).toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4)
+ : LocaleKeys.forLoginVerification.tr(context: context).toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4),
],
),
@@ -590,7 +590,7 @@ class _OTPVerificationScreenState extends State {
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
- LocaleKeys.didntReceiveIt.tr().toText16(color: AppColors.inputLabelTextColor),
+ LocaleKeys.didntReceiveIt.tr(context: context).toText16(color: AppColors.inputLabelTextColor),
SizedBox(width: 5.h),
if (_resendTime > 0)
Builder(
@@ -599,7 +599,7 @@ class _OTPVerificationScreenState extends State {
final seconds = (_resendTime % 60).toString().padLeft(2, '0');
return Row(
children: [
- LocaleKeys.resendIn.tr().toText16(color: AppColors.inputLabelTextColor),
+ LocaleKeys.resendIn.tr(context: context).toText16(color: AppColors.inputLabelTextColor),
SizedBox(width: 2.h),
' ($minutes:$seconds). '.toText16(color: AppColors.inputLabelTextColor)
],
@@ -609,7 +609,7 @@ class _OTPVerificationScreenState extends State {
else
GestureDetector(
onTap: _resendOtp,
- child: LocaleKeys.resendOTP.tr().toText16(color: AppColors.primaryRedColor),
+ child: LocaleKeys.resendOTP.tr(context: context).toText16(color: AppColors.primaryRedColor),
),
],
),
diff --git a/lib/features/immediate_livecare/immediate_livecare_view_model.dart b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
index 1baa81b..ffa0b00 100644
--- a/lib/features/immediate_livecare/immediate_livecare_view_model.dart
+++ b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
@@ -45,9 +45,7 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
initImmediateLiveCare() {
_appState = getIt();
immediateLiveCareClinicsList = [];
- patientLiveCareHistoryList = [];
isImmediateLiveCareClinicsLoading = true;
- patientHasPendingLiveCareRequest = false;
liveCareSelectedCallType = 0; // 1- Video, 2- Audio, 3- Phone
immediateLiveCareSelectedClinic = GetLiveCareClinicListResponseModel();
liveCareImmediateAppointmentFeesList = LiveCareImmediateAppointmentFeesList();
@@ -136,6 +134,10 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
}
Future getPatientLiveCareHistory({Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ patientLiveCareHistoryList = [];
+ patientHasPendingLiveCareRequest = false;
+ notifyListeners();
+
final result = await immediateLiveCareRepo.getPatientLiveCareHistory();
result.fold(
diff --git a/lib/features/my_appointments/my_appointments_view_model.dart b/lib/features/my_appointments/my_appointments_view_model.dart
index 96340a7..f287803 100644
--- a/lib/features/my_appointments/my_appointments_view_model.dart
+++ b/lib/features/my_appointments/my_appointments_view_model.dart
@@ -220,6 +220,7 @@ class MyAppointmentsViewModel extends ChangeNotifier {
}
Future getPatientAppointments(bool isActiveAppointment, bool isArrivedAppointments, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
+ isPatientHasQueueAppointment = false;
if (!isAppointmentDataToBeLoaded) return;
filteredAppointmentList.clear();
@@ -727,6 +728,7 @@ class MyAppointmentsViewModel extends ChangeNotifier {
Future getPatientAppointmentQueueDetails({Function(dynamic)? onSuccess, Function(String)? onError}) async {
//TODO: Discuss With Haroon, Is the User Has no data it return No Element Bad State;
+ isPatientHasQueueAppointment = false;
isAppointmentQueueDetailsLoading = true;
notifyListeners();
final result = await myAppointmentsRepo.getPatientAppointmentQueueDetails(
diff --git a/lib/features/symptoms_checker/symptoms_checker_repo.dart b/lib/features/symptoms_checker/symptoms_checker_repo.dart
index 154b13a..c0214e1 100644
--- a/lib/features/symptoms_checker/symptoms_checker_repo.dart
+++ b/lib/features/symptoms_checker/symptoms_checker_repo.dart
@@ -63,7 +63,7 @@ class SymptomsCheckerRepoImp implements SymptomsCheckerRepo {
required String userName,
required String password,
}) async {
- Map body = {"userName": userName, "password": password};
+ Map body = {"userName": userName, "password": password};
try {
GenericApiModel? apiResponse;
diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart
index b3b2edf..d6f2d23 100644
--- a/lib/generated/locale_keys.g.dart
+++ b/lib/generated/locale_keys.g.dart
@@ -1488,5 +1488,18 @@ abstract class LocaleKeys {
static const pleaseWaitYouWillBeCalledForVitalSigns = 'pleaseWaitYouWillBeCalledForVitalSigns';
static const pleaseVisitRoomForVitalSigns = 'pleaseVisitRoomForVitalSigns';
static const pleaseVisitRoomToTheDoctor = 'pleaseVisitRoomToTheDoctor';
+ static const erOnlineCheckInRequest = 'erOnlineCheckInRequest';
+ static const indoor = 'indoor';
+ static const navigation = 'navigation';
+ static const health = 'health';
+ static const calculators = 'calculators';
+ static const converters = 'converters';
+ static const guide = 'guide';
+ static const liveCareServiceDesc = 'liveCareServiceDesc';
+ static const bloodGroup = 'bloodGroup';
+ static const medicalServices = 'medicalServices';
+ static const insuranceAndPayments = 'insuranceAndPayments';
+ static const trackerAndOthers = 'trackerAndOthers';
+ static const bmi = 'bmi';
}
diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart
index 0b8066e..3f98e6d 100644
--- a/lib/presentation/appointments/appointment_details_page.dart
+++ b/lib/presentation/appointments/appointment_details_page.dart
@@ -87,7 +87,7 @@ class _AppointmentDetailsPageState extends State {
children: [
Expanded(
child: CollapsingListView(
- title: LocaleKeys.appointmentDetails.tr(),
+ title: LocaleKeys.appointmentDetails.tr(context: context),
report: AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)
? () {
contactUsViewModel.setPatientFeedbackSelectedAppointment(widget.patientAppointmentHistoryResponseModel);
@@ -105,7 +105,7 @@ class _AppointmentDetailsPageState extends State {
AppointmentDoctorCard(
patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
onAskDoctorTap: () async {
- LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingDoctorAvailability.tr());
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingDoctorAvailability.tr(context: context));
await myAppointmentsViewModel.isDoctorAvailable(
projectID: widget.patientAppointmentHistoryResponseModel.projectID,
doctorId: widget.patientAppointmentHistoryResponseModel.doctorID,
@@ -135,7 +135,7 @@ class _AppointmentDetailsPageState extends State {
onCancelTap: () async {
myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true);
- LoaderBottomSheet.showLoader(loadingText: LocaleKeys.cancellingAppointmentPleaseWait.tr());
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.cancellingAppointmentPleaseWait.tr(context: context));
await myAppointmentsViewModel.cancelAppointment(
patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
onSuccess: (apiResponse) {
@@ -144,7 +144,7 @@ class _AppointmentDetailsPageState extends State {
myAppointmentsViewModel.getPatientAppointments(true, false);
showCommonBottomSheetWithoutHeight(
context,
- child: Utils.getSuccessWidget(loadingText: LocaleKeys.appointmentCancelledSuccessfully.tr()),
+ child: Utils.getSuccessWidget(loadingText: LocaleKeys.appointmentCancelledSuccessfully.tr(context: context)),
callBackFunc: () {
Navigator.of(context).pop();
},
@@ -181,13 +181,13 @@ class _AppointmentDetailsPageState extends State {
children: [
Row(
children: [
- LocaleKeys.appointmentStatus.tr().toText16(isBold: true),
+ LocaleKeys.appointmentStatus.tr(context: context).toText16(isBold: true),
],
),
SizedBox(height: 4.h),
(!AppointmentType.isConfirmed(widget.patientAppointmentHistoryResponseModel)
- ? LocaleKeys.notConfirmed.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500)
- : LocaleKeys.confirmed.tr().toText12(color: AppColors.successColor, fontWeight: FontWeight.w500)),
+ ? LocaleKeys.notConfirmed.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500)
+ : LocaleKeys.confirmed.tr(context: context).toText12(color: AppColors.successColor, fontWeight: FontWeight.w500)),
SizedBox(height: 16.h),
//TODO Add countdown timer in case of LiveCare Appointment
widget.patientAppointmentHistoryResponseModel.isLiveCareAppointment ?? false
@@ -199,7 +199,7 @@ class _AppointmentDetailsPageState extends State {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.doctorWillCallYou.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+ LocaleKeys.doctorWillCallYou.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
],
),
),
@@ -225,7 +225,7 @@ class _AppointmentDetailsPageState extends State {
MapsLauncher.launchCoordinates(double.parse(widget.patientAppointmentHistoryResponseModel.latitude!),
double.parse(widget.patientAppointmentHistoryResponseModel.longitude!), widget.patientAppointmentHistoryResponseModel.projectName);
},
- text: LocaleKeys.getDirections.tr(),
+ text: LocaleKeys.getDirections.tr(context: context),
backgroundColor: AppColors.textColor.withValues(alpha: 0.8),
borderColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction).withValues(alpha: 0.01),
textColor: AppColors.whiteColor,
@@ -280,7 +280,7 @@ class _AppointmentDetailsPageState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.setReminder.tr(context: context).toText13(isBold: true),
- LocaleKeys.notifyMeBeforeAppointment.tr().toText11(color: AppColors.textColorLight, weight: FontWeight.w500),
+ LocaleKeys.notifyMeBeforeAppointment.tr(context: context).toText11(color: AppColors.textColorLight, weight: FontWeight.w500),
],
),
const Spacer(),
@@ -365,7 +365,7 @@ class _AppointmentDetailsPageState extends State {
isLargeText: true,
iconSize: 36.w,
).onPress(() async {
- LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingLabResults.tr());
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingLabResults.tr(context: context));
await labViewModel.getLabResultsByAppointmentNo(
appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo,
projectID: widget.patientAppointmentHistoryResponseModel.projectID,
@@ -398,7 +398,7 @@ class _AppointmentDetailsPageState extends State {
isLargeText: true,
iconSize: 36.w,
).onPress(() async {
- LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingRadiologyResults.tr());
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingRadiologyResults.tr(context: context));
await radiologyViewModel.getPatientRadiologyOrdersByAppointment(
appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo,
projectID: widget.patientAppointmentHistoryResponseModel.projectID,
@@ -425,7 +425,7 @@ class _AppointmentDetailsPageState extends State {
isLargeText: true,
iconSize: 36.w,
).onPress(() async {
- LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingAppointmentPrescriptions.tr());
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingAppointmentPrescriptions.tr(context: context));
await prescriptionsViewModel.getPrescriptionDetails(
getPrescriptionRequestModel(),
onSuccess: (val) {
@@ -453,7 +453,7 @@ class _AppointmentDetailsPageState extends State {
} else {
showCommonBottomSheetWithoutHeight(
context,
- child: Utils.getErrorWidget(loadingText: LocaleKeys.noPrescriptionsForAppointment.tr()),
+ child: Utils.getErrorWidget(loadingText: LocaleKeys.noPrescriptionsForAppointment.tr(context: context)),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,
@@ -522,7 +522,7 @@ class _AppointmentDetailsPageState extends State {
// ],
// ),
// SizedBox(height: 16.h),
- // LocaleKeys.prescriptions.tr().toText18(isBold: true),
+ // LocaleKeys.prescriptions.tr(context: context).toText18(isBold: true),
// SizedBox(height: 16.h),
// Consumer(builder: (context, prescriptionVM, child) {
// return prescriptionVM.isPrescriptionsDetailsLoading
@@ -708,7 +708,7 @@ class _AppointmentDetailsPageState extends State {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- LocaleKeys.amountBeforeTax.tr().toText18(isBold: true),
+ LocaleKeys.amountBeforeTax.tr(context: context).toText18(isBold: true),
Utils.getPaymentAmountWithSymbol(
widget.patientAppointmentHistoryResponseModel.patientShare!.toString().toText16(isBold: true),
AppColors.blackColor,
@@ -752,7 +752,7 @@ class _AppointmentDetailsPageState extends State {
).paddingOnly(left: 16.h, top: 24.h, right: 16.h, bottom: 0.h),
AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)
? CustomButton(
- text: LocaleKeys.rebookAppointment.tr(),
+ text: LocaleKeys.rebookAppointment.tr(context: context),
onPressed: () {
openDoctorScheduleCalendar();
},
@@ -810,13 +810,13 @@ class _AppointmentDetailsPageState extends State {
projectName: widget.patientAppointmentHistoryResponseModel.projectName,
);
bookAppointmentsViewModel.setSelectedDoctor(doctor);
- LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingDoctorSchedulePleaseWait.tr());
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.fetchingDoctorSchedulePleaseWait.tr(context: context));
await bookAppointmentsViewModel.getDoctorFreeSlots(
isBookingForLiveCare: false,
onSuccess: (dynamic respData) async {
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(
- title: LocaleKeys.pickADate.tr(),
+ title: LocaleKeys.pickADate.tr(context: context),
context,
child: AppointmentCalendar(),
isFullScreen: false,
@@ -841,14 +841,14 @@ class _AppointmentDetailsPageState extends State {
case 0:
break;
case 10:
- LoaderBottomSheet.showLoader(loadingText: LocaleKeys.confirmingAppointmentPleaseWait.tr());
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.confirmingAppointmentPleaseWait.tr(context: context));
await myAppointmentsViewModel.confirmAppointment(
patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
onSuccess: (apiResponse) {
LoaderBottomSheet.hideLoader();
myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true);
myAppointmentsViewModel.getPatientAppointments(true, false);
- showCommonBottomSheet(context, child: Utils.getSuccessWidget(loadingText: LocaleKeys.appointmentConfirmedSuccessfully.tr()), callBackFunc: (str) {
+ showCommonBottomSheet(context, child: Utils.getSuccessWidget(loadingText: LocaleKeys.appointmentConfirmedSuccessfully.tr(context: context)), callBackFunc: (str) {
Navigator.of(context).pop();
},
title: "",
@@ -869,10 +869,10 @@ class _AppointmentDetailsPageState extends State {
),
);
case 50:
- // return LocaleKeys.confirmLiveCare.tr();
+ // return LocaleKeys.confirmLiveCare.tr(context: context);
case 90:
showCommonBottomSheetWithoutHeight(context,
- title: LocaleKeys.onlineCheckIn.tr(),
+ title: LocaleKeys.onlineCheckIn.tr(context: context),
child: AppointmentCheckinBottomSheet(
patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
myAppointmentsViewModel: myAppointmentsViewModel,
diff --git a/lib/presentation/appointments/appointment_payment_page.dart b/lib/presentation/appointments/appointment_payment_page.dart
index a38a9f1..f817a89 100644
--- a/lib/presentation/appointments/appointment_payment_page.dart
+++ b/lib/presentation/appointments/appointment_payment_page.dart
@@ -90,7 +90,7 @@ class _AppointmentPaymentPageState extends State {
children: [
Expanded(
child: CollapsingListView(
- title: LocaleKeys.appointmentPayment.tr(),
+ title: LocaleKeys.appointmentPayment.tr(context: context),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -248,7 +248,7 @@ class _AppointmentPaymentPageState extends State {
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- LocaleKeys.insuranceExpiredOrInactive.tr()
+ LocaleKeys.insuranceExpiredOrInactive.tr(context: context)
.toText14(color: AppColors.primaryRedColor, weight: FontWeight.w500)
.paddingSymmetrical(24.h, 0.h),
CustomButton(
@@ -274,12 +274,12 @@ class _AppointmentPaymentPageState extends State {
)
: const SizedBox(),
SizedBox(height: 24.h),
- LocaleKeys.totalAmountToPay.tr().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: [
- LocaleKeys.amountBeforeTax.tr().toText14(isBold: true),
+ LocaleKeys.amountBeforeTax.tr(context: context).toText14(isBold: true),
Utils.getPaymentAmountWithSymbol(
myAppointmentsVM.patientAppointmentShareResponseModel!.patientShare!.toString().toText16(isBold: true),
AppColors.blackColor,
@@ -380,7 +380,7 @@ class _AppointmentPaymentPageState extends State {
}
void checkPaymentStatus() async {
- LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingPaymentStatusPleaseWait.tr());
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingPaymentStatusPleaseWait.tr(context: context));
if (selectedPaymentMethod == "TAMARA") {
await payfortViewModel.checkTamaraPaymentStatus(
transactionID: transID,
@@ -438,7 +438,7 @@ class _AppointmentPaymentPageState extends State {
LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(
context,
- child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr()),
+ child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr(context: context)),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,
@@ -519,7 +519,7 @@ class _AppointmentPaymentPageState extends State {
} else {
showCommonBottomSheetWithoutHeight(
context,
- child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr()),
+ child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr(context: context)),
callBackFunc: () {},
isFullScreen: false,
isCloseButtonVisible: true,
diff --git a/lib/presentation/appointments/my_appointments_page.dart b/lib/presentation/appointments/my_appointments_page.dart
index 1209467..c9e7048 100644
--- a/lib/presentation/appointments/my_appointments_page.dart
+++ b/lib/presentation/appointments/my_appointments_page.dart
@@ -155,7 +155,7 @@ class _MyAppointmentsPageState extends State {
isLoading: true,
isFromHomePage: false,
),
- ).paddingSymmetrical(24.h, 0.h)
+ )
: filteredAppointmentList.isNotEmpty
? AnimationConfiguration.staggeredList(
position: index,
diff --git a/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart b/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart
index eed45df..f3301f0 100644
--- a/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart
+++ b/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart
@@ -32,7 +32,7 @@ import '../../../emergency_services/call_ambulance/widgets/type_selection_widget
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text(
-// LocaleKeys.selectHospital.tr(),
+// LocaleKeys.selectHospital.tr(context: context),
// style: TextStyle(
// fontSize: 21,
// fontWeight: FontWeight.w600,
@@ -40,7 +40,7 @@ import '../../../emergency_services/call_ambulance/widgets/type_selection_widget
// ),
// ),
// Text(
-// LocaleKeys.selectHospitalSubTitle.tr(),
+// LocaleKeys.selectHospitalSubTitle.tr(context: context),
// style: TextStyle(
// fontSize: 16,
// fontWeight: FontWeight.w500,
@@ -49,8 +49,8 @@ import '../../../emergency_services/call_ambulance/widgets/type_selection_widget
// ),
// SizedBox(height: 16.h),
// TextInputWidget(
-// labelText: LocaleKeys.search.tr(),
-// hintText: LocaleKeys.searchHospital.tr(),
+// labelText: LocaleKeys.search.tr(context: context),
+// hintText: LocaleKeys.searchHospital.tr(context: context),
// controller: searchText,
// onChange: (value) {
// appointmentsViewModel.filterHospitalListByString(
@@ -135,8 +135,8 @@ class HospitalBottomSheetBody extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextInputWidget(
- labelText: LocaleKeys.search.tr(),
- hintText: LocaleKeys.searchHospital.tr(),
+ labelText: LocaleKeys.search.tr(context: context),
+ hintText: LocaleKeys.searchHospital.tr(context: context),
controller: searchText,
onChange: (value) {
debouncer.run((){
diff --git a/lib/presentation/authentication/login.dart b/lib/presentation/authentication/login.dart
index a59062d..6dcf15f 100644
--- a/lib/presentation/authentication/login.dart
+++ b/lib/presentation/authentication/login.dart
@@ -71,10 +71,10 @@ class LoginScreenState extends State {
children: [
Utils.showLottie(context: context, assetPath: AppAnimations.login, width: 200.h, height: 200.h, repeat: true, fit: BoxFit.cover),
SizedBox(height: 130.h), // Adjusted to sizer unit
- LocaleKeys.welcomeToDrSulaiman.tr().toText32(isBold: true, color: AppColors.textColor),
+ LocaleKeys.welcomeToDrSulaiman.tr(context: context).toText32(isBold: true, color: AppColors.textColor),
SizedBox(height: 32.h),
TextInputWidget(
- labelText: "${LocaleKeys.nationalId.tr()} / ${LocaleKeys.fileNo.tr()}",
+ labelText: "${LocaleKeys.nationalId.tr(context: context)} / ${LocaleKeys.fileNo.tr(context: context)}",
hintText: "xxxxxxxxx",
controller: authVm.nationalIdController,
focusNode: _nationalIdFocusNode,
@@ -87,13 +87,13 @@ class LoginScreenState extends State {
isAllowLeadingIcon: true,
padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 10.h),
leadingIcon: AppAssets.student_card,
- errorMessage: LocaleKeys.enterValidIDorIqama.tr(),
+ errorMessage: LocaleKeys.enterValidIDorIqama.tr(context: context),
hasError: false,
),
SizedBox(height: 16.h),
CustomButton(
height: 50.h,
- text: LocaleKeys.login.tr(),
+ text: LocaleKeys.login.tr(context: context),
icon: AppAssets.login1,
iconColor: Colors.white,
onPressed: () {
@@ -116,10 +116,10 @@ class LoginScreenState extends State {
text: TextSpan(
style: context.dynamicTextStyle(color: Colors.black, fontSize: 14.f, height: 26 / 16, fontWeight: FontWeight.w500),
children: [
- TextSpan(text: LocaleKeys.dontHaveAccount.tr(), style: context.dynamicTextStyle()),
+ TextSpan(text: LocaleKeys.dontHaveAccount.tr(context: context), style: context.dynamicTextStyle()),
TextSpan(text: " "),
TextSpan(
- text: LocaleKeys.registernow.tr(),
+ text: LocaleKeys.registernow.tr(context: context),
style: context.dynamicTextStyle(
color: AppColors.primaryRedColor,
fontSize: 14.f, // Adjusted to sizer unit
@@ -172,7 +172,7 @@ class LoginScreenState extends State {
Padding(
padding: EdgeInsets.only(bottom: 10.h),
child: CustomButton(
- text: LocaleKeys.sendOTPSMS.tr(),
+ text: LocaleKeys.sendOTPSMS.tr(context: context),
onPressed: () async {
if (ValidationUtils.isValidatePhone(
phoneNumber: phoneNumberController!.text,
@@ -196,14 +196,14 @@ class LoginScreenState extends State {
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 8.h),
- child: LocaleKeys.oR.tr().toText16(color: AppColors.textColor),
+ child: LocaleKeys.oR.tr(context: context).toText16(color: AppColors.textColor),
),
],
),
Padding(
padding: EdgeInsets.only(bottom: 10.h, top: 10.h),
child: CustomButton(
- text: LocaleKeys.sendOTPWHATSAPP.tr(),
+ text: LocaleKeys.sendOTPWHATSAPP.tr(context: context),
onPressed: () async {
if (ValidationUtils.isValidatePhone(
phoneNumber: phoneNumberController!.text,
diff --git a/lib/presentation/authentication/quick_login.dart b/lib/presentation/authentication/quick_login.dart
index bdeb0ff..fbcb17d 100644
--- a/lib/presentation/authentication/quick_login.dart
+++ b/lib/presentation/authentication/quick_login.dart
@@ -49,7 +49,7 @@ class QuickLoginState extends State {
],
),
Utils.showLottie(context: context, assetPath: AppAnimations.checkmark, width: 120, height: 120, repeat: true),
- LocaleKeys.allSet.tr().toText16(textAlign: TextAlign.center, weight: FontWeight.w500)
+ LocaleKeys.allSet.tr(context: context).toText16(textAlign: TextAlign.center, weight: FontWeight.w500)
// Text(
// ' TranslationBase.of(context).allSet',
// textAlign: TextAlign.center,
@@ -67,7 +67,7 @@ class QuickLoginState extends State {
children: [
Image.asset(AppAssets.lockIcon, height: 100),
SizedBox(height: 10.h),
- LocaleKeys.enableQuickLogin.tr().toText26(isBold: true),
+ LocaleKeys.enableQuickLogin.tr(context: context).toText26(isBold: true),
// Text(
// ' TranslationBase.of(context).enableQuickLogin',
// style: context.dynamicTextStyle(
@@ -77,7 +77,7 @@ class QuickLoginState extends State {
// ),
// ),
SizedBox(height: 5.h),
- LocaleKeys.enableQuickLogin.tr().toText16(color: AppColors.quickLoginColor),
+ LocaleKeys.enableQuickLogin.tr(context: context).toText16(color: AppColors.quickLoginColor),
// Description
// Text(
// 'TranslationBase.of(context).enableMsg',
@@ -94,7 +94,7 @@ class QuickLoginState extends State {
children: [
Expanded(
child: CustomButton(
- text: LocaleKeys.enableQuickLogin.tr(),
+ text: LocaleKeys.enableQuickLogin.tr(context: context),
onPressed: () {
widget.onPressed();
},
@@ -114,7 +114,7 @@ class QuickLoginState extends State {
children: [
Expanded(
child: CustomButton(
- text: LocaleKeys.notNow.tr(),
+ text: LocaleKeys.notNow.tr(context: context),
onPressed: () {
cacheService.saveBool(key: CacheConst.quickLoginEnabled, value: false);
Navigator.pop(context, "true");
diff --git a/lib/presentation/authentication/register.dart b/lib/presentation/authentication/register.dart
index fa10b95..d14419f 100644
--- a/lib/presentation/authentication/register.dart
+++ b/lib/presentation/authentication/register.dart
@@ -80,7 +80,7 @@ class _RegisterNew extends State {
children: [
Utils.showLottie(context: context, assetPath: 'assets/animations/lottie/register.json', width: 200.w, height: 200.h, fit: BoxFit.cover, repeat: true),
SizedBox(height: 16.h),
- LocaleKeys.prepareToElevate.tr().toText32(isBold: true),
+ LocaleKeys.prepareToElevate.tr(context: context).toText32(isBold: true),
SizedBox(height: 24.h),
Directionality(
textDirection: Directionality.of(context),
@@ -96,7 +96,7 @@ class _RegisterNew extends State {
).withVerticalPadding(8.h),
Divider(height: 1.h),
TextInputWidget(
- labelText: LocaleKeys.nationalIdNumber.tr(),
+ labelText: LocaleKeys.nationalIdNumber.tr(context: context),
hintText: "xxxxxxxxx",
controller: authVm.nationalIdController,
focusNode: _nationalIdFocusNode,
@@ -111,7 +111,7 @@ class _RegisterNew extends State {
).withVerticalPadding(8),
Divider(height: 1),
TextInputWidget(
- labelText: LocaleKeys.dob.tr(),
+ labelText: LocaleKeys.dob.tr(context: context),
hintText: "11 July, 1994",
controller: authVm.dobController,
focusNode: _dobFocusNode,
@@ -156,7 +156,7 @@ class _RegisterNew extends State {
Row(
children: [
Text(
- LocaleKeys.iAcceptThe.tr(),
+ LocaleKeys.iAcceptThe.tr(context: context),
style: context.dynamicTextStyle(fontSize: 14.f, fontWeight: FontWeight.w500, color: Color(0xFF2E3039)),
),
GestureDetector(
@@ -165,7 +165,7 @@ class _RegisterNew extends State {
Navigator.of(context).pushNamed('/terms');
},
child: Text(
- LocaleKeys.termsConditoins.tr(),
+ LocaleKeys.termsConditoins.tr(context: context),
style: context.dynamicTextStyle(
fontSize: 14.f,
fontWeight: FontWeight.w500,
@@ -179,7 +179,7 @@ class _RegisterNew extends State {
),
// Expanded(
// child: Text(
- // LocaleKeys.iAcceptTermsConditions.tr().split("the").first,
+ // LocaleKeys.iAcceptTermsConditions.tr(context: context).split("the").first,
// style: context.dynamicTextStyle(fontSize: 14.fSize, fontWeight: FontWeight.w500, color: Color(0xFF2E3039)),
// ),
// ),
@@ -188,7 +188,7 @@ class _RegisterNew extends State {
),
SizedBox(height: 25.h),
CustomButton(
- text: LocaleKeys.registernow.tr(),
+ text: LocaleKeys.registernow.tr(context: context),
icon: AppAssets.note_edit,
onPressed: () {
// Dismiss keyboard before proceeding
@@ -220,10 +220,10 @@ class _RegisterNew extends State {
fontWeight: FontWeight.w500,
),
children: [
- TextSpan(text: LocaleKeys.alreadyHaveAccount.tr(), style: context.dynamicTextStyle()),
+ TextSpan(text: LocaleKeys.alreadyHaveAccount.tr(context: context), style: context.dynamicTextStyle()),
TextSpan(text: " "),
TextSpan(
- text: LocaleKeys.loginNow.tr(),
+ text: LocaleKeys.loginNow.tr(context: context),
style: context.dynamicTextStyle(
color: AppColors.primaryRedColor,
fontSize: 16.f,
@@ -271,7 +271,7 @@ class _RegisterNew extends State {
Padding(
padding: const EdgeInsets.only(bottom: 10),
child: CustomButton(
- text: LocaleKeys.sendOTPSMS.tr(),
+ text: LocaleKeys.sendOTPSMS.tr(context: context),
onPressed: () async {
// Dismiss keyboard before validation
FocusScope.of(context).unfocus();
@@ -298,14 +298,14 @@ class _RegisterNew extends State {
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 8.h),
- child: LocaleKeys.oR.tr().toText16(color: AppColors.textColor),
+ child: LocaleKeys.oR.tr(context: context).toText16(color: AppColors.textColor),
),
],
),
Padding(
padding: EdgeInsets.only(bottom: 10.h, top: 10.h),
child: CustomButton(
- text: LocaleKeys.sendOTPWHATSAPP.tr(),
+ text: LocaleKeys.sendOTPWHATSAPP.tr(context: context),
onPressed: () async {
FocusScope.of(context).unfocus();
if (ValidationUtils.isValidatePhone(
diff --git a/lib/presentation/authentication/register_step2.dart b/lib/presentation/authentication/register_step2.dart
index 71cef96..c4bdf0f 100644
--- a/lib/presentation/authentication/register_step2.dart
+++ b/lib/presentation/authentication/register_step2.dart
@@ -73,7 +73,7 @@ class _RegisterNew extends State {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.personalDetailsVerification.tr().toText26(color: AppColors.textColor, weight: FontWeight.w600, letterSpacing: -2),
+ LocaleKeys.personalDetailsVerification.tr(context: context).toText26(color: AppColors.textColor, weight: FontWeight.w600, letterSpacing: -2),
SizedBox(height: 24.h),
Container(
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)),
@@ -81,8 +81,8 @@ class _RegisterNew extends State {
child: Column(
children: [
TextInputWidget(
- labelText: authVM!.isUserFromUAE() ? LocaleKeys.fullName.tr() : LocaleKeys.name.tr(),
- hintText: authVM!.isUserFromUAE() ? LocaleKeys.enterNameHere.tr() : (name),
+ labelText: authVM!.isUserFromUAE() ? LocaleKeys.fullName.tr(context: context) : LocaleKeys.name.tr(context: context),
+ hintText: authVM!.isUserFromUAE() ? LocaleKeys.enterNameHere.tr(context: context) : (name),
controller: authVM!.isUserFromUAE() ? authVM!.nameController : null,
isEnable: true,
prefix: null,
@@ -100,7 +100,7 @@ class _RegisterNew extends State {
).paddingSymmetrical(0.h, 16.h),
Divider(height: 1.h, color: AppColors.greyColor),
TextInputWidget(
- labelText: LocaleKeys.nationalIdNumber.tr(),
+ labelText: LocaleKeys.nationalIdNumber.tr(context: context),
hintText: authVM!.isUserFromUAE() ? appState.getUserRegistrationPayload.patientIdentificationId.toString() : (appState.getNHICUserData.idNumber ?? ""),
controller: null,
isEnable: true,
@@ -120,8 +120,8 @@ class _RegisterNew extends State {
builder: (context, genderType, child) {
final authVM = context.read();
return DropdownWidget(
- labelText: LocaleKeys.gender.tr(),
- hintText: LocaleKeys.malE.tr(),
+ labelText: LocaleKeys.gender.tr(context: context),
+ hintText: LocaleKeys.malE.tr(context: context),
isEnable: true,
dropdownItems: GenderTypeEnum.values.map((e) => appState.isArabic() ? e.typeAr : e.type).toList(),
selectedValue: genderType != null ? (appState.isArabic() ? genderType.typeAr : genderType.type) : "",
@@ -136,7 +136,7 @@ class _RegisterNew extends State {
).withVerticalPadding(8);
})
: TextInputWidget(
- labelText: LocaleKeys.gender.tr(),
+ labelText: LocaleKeys.gender.tr(context: context),
hintText: (appState.getNHICUserData.gender ?? ""),
controller: null,
isEnable: true,
@@ -157,8 +157,8 @@ class _RegisterNew extends State {
builder: (context, maritalStatus, child) {
final authVM = context.read(); // For onChange
return DropdownWidget(
- labelText: LocaleKeys.maritalStatus.tr(),
- hintText: LocaleKeys.married.tr(),
+ labelText: LocaleKeys.maritalStatus.tr(context: context),
+ hintText: LocaleKeys.married.tr(context: context),
isEnable: true,
dropdownItems: MaritalStatusTypeEnum.values.map((e) => appState.isArabic() ? e.typeAr : e.type).toList(),
selectedValue: maritalStatus != null ? (appState.isArabic() ? maritalStatus.typeAr : maritalStatus.type) : "",
@@ -174,7 +174,7 @@ class _RegisterNew extends State {
},
)
: TextInputWidget(
- labelText: LocaleKeys.maritalStatus.tr(),
+ labelText: LocaleKeys.maritalStatus.tr(context: context),
hintText: appState.isArabic()
? (MaritalStatusTypeExtension.fromValue(appState.getNHICUserData.maritalStatusCode)!.typeAr)
: (MaritalStatusTypeExtension.fromValue(appState.getNHICUserData.maritalStatusCode)!.type),
@@ -203,8 +203,8 @@ class _RegisterNew extends State {
builder: (context, data, child) {
final authVM = context.read();
return DropdownWidget(
- labelText: LocaleKeys.country.tr(),
- hintText: LocaleKeys.uae.tr(),
+ labelText: LocaleKeys.country.tr(context: context),
+ hintText: LocaleKeys.uae.tr(context: context),
isEnable: true,
dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(),
selectedValue: data.selectedCountry != null
@@ -224,7 +224,7 @@ class _RegisterNew extends State {
},
)
: TextInputWidget(
- labelText: LocaleKeys.nationality.tr(),
+ labelText: LocaleKeys.nationality.tr(context: context),
hintText: appState.isArabic()
? (authVM!.countriesList!.firstWhere((e) => e.id == (appState.getNHICUserData.nationalityCode ?? ""), orElse: () => NationalityCountries()).nameN ?? "")
: (authVM!.countriesList!.firstWhere((e) => e.id == (appState.getNHICUserData.nationalityCode ?? ""), orElse: () => NationalityCountries()).name ?? ""),
@@ -243,7 +243,7 @@ class _RegisterNew extends State {
color: AppColors.greyColor,
),
TextInputWidget(
- labelText: LocaleKeys.mobileNumber.tr(),
+ labelText: LocaleKeys.mobileNumber.tr(context: context),
hintText: (appState.getUserRegistrationPayload.patientMobileNumber.toString() ?? ""),
controller: null,
isEnable: false,
@@ -260,7 +260,7 @@ class _RegisterNew extends State {
color: AppColors.greyColor,
),
TextInputWidget(
- labelText: LocaleKeys.dob.tr(),
+ labelText: LocaleKeys.dob.tr(context: context),
hintText: authVM!.isUserFromUAE() ? appState.getUserRegistrationPayload.dob! : appState.getNHICUserData.dateOfBirth ?? "",
controller: authVM!.isUserFromUAE() ? authVM!.dobController : null,
isEnable: false,
@@ -280,7 +280,7 @@ class _RegisterNew extends State {
children: [
Expanded(
child: CustomButton(
- text: LocaleKeys.cancel.tr(),
+ text: LocaleKeys.cancel.tr(context: context),
icon: AppAssets.cancel,
onPressed: () {
Navigator.of(context).pop();
@@ -298,7 +298,7 @@ class _RegisterNew extends State {
backgroundColor: AppColors.primaryRedColor,
borderColor: AppColors.primaryRedColor,
textColor: AppColors.whiteColor,
- text: LocaleKeys.confirm.tr(),
+ text: LocaleKeys.confirm.tr(context: context),
icon: AppAssets.confirm,
iconColor: AppColors.whiteColor,
onPressed: () {
@@ -345,7 +345,7 @@ class _RegisterNew extends State {
Padding(
padding: const EdgeInsets.only(bottom: 10),
child: CustomButton(
- text: LocaleKeys.submit.tr(),
+ text: LocaleKeys.submit.tr(context: context),
onPressed: () {
if (ValidationUtils.isValidateEmail(
email: authVM!.emailController.text,
diff --git a/lib/presentation/book_appointment/book_appointment_page.dart b/lib/presentation/book_appointment/book_appointment_page.dart
index 39d5eee..bc0c49a 100644
--- a/lib/presentation/book_appointment/book_appointment_page.dart
+++ b/lib/presentation/book_appointment/book_appointment_page.dart
@@ -89,8 +89,8 @@ class _BookAppointmentPageState extends State {
activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
initialIndex: bookAppointmentsVM.selectedTabIndex,
tabs: [
- CustomTabBarModel(null, LocaleKeys.general.tr()),
- CustomTabBarModel(null, LocaleKeys.liveCare.tr()),
+ CustomTabBarModel(null, LocaleKeys.general.tr(context: context)),
+ CustomTabBarModel(null, LocaleKeys.liveCare.tr(context: context)),
],
onTabChange: (index) {
bookAppointmentsVM.onTabChanged(index);
@@ -121,7 +121,7 @@ class _BookAppointmentPageState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (appState.isAuthenticated) ...[],
- LocaleKeys.recentVisits.tr().toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
+ LocaleKeys.recentVisits.tr(context: context).toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
SizedBox(height: 16.h),
SizedBox(
height: 110.h,
@@ -232,8 +232,8 @@ class _BookAppointmentPageState extends State {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.searchByClinic.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500),
- LocaleKeys.tapToSelectClinic.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
+ LocaleKeys.searchByClinic.tr(context: context).toText14(color: AppColors.textColor, weight: FontWeight.w500),
+ LocaleKeys.tapToSelectClinic.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
],
),
],
@@ -264,8 +264,8 @@ class _BookAppointmentPageState extends State {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.searchByDoctor.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500),
- LocaleKeys.tapToSelect.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
+ LocaleKeys.searchByDoctor.tr(context: context).toText14(color: AppColors.textColor, weight: FontWeight.w500),
+ LocaleKeys.tapToSelect.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
],
),
],
@@ -294,8 +294,8 @@ class _BookAppointmentPageState extends State {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.searchByRegion.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500),
- LocaleKeys.centralRegion.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
+ LocaleKeys.searchByRegion.tr(context: context).toText14(color: AppColors.textColor, weight: FontWeight.w500),
+ LocaleKeys.centralRegion.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
],
),
],
@@ -340,8 +340,8 @@ class _BookAppointmentPageState extends State {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.immediateConsultation.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500),
- LocaleKeys.tapToSelectClinic.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
+ LocaleKeys.immediateConsultation.tr(context: context).toText14(color: AppColors.textColor, weight: FontWeight.w500),
+ LocaleKeys.tapToSelectClinic.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
],
),
],
@@ -382,8 +382,8 @@ class _BookAppointmentPageState extends State {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.scheduledConsultation.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500),
- LocaleKeys.tapToSelectClinic.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
+ LocaleKeys.scheduledConsultation.tr(context: context).toText14(color: AppColors.textColor, weight: FontWeight.w500),
+ LocaleKeys.tapToSelectClinic.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
],
),
],
@@ -412,7 +412,7 @@ class _BookAppointmentPageState extends State {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.pharmaLiveCare.tr().toText14(color: AppColors.textColor, weight: FontWeight.w500),
+ LocaleKeys.pharmaLiveCare.tr(context: context).toText14(color: AppColors.textColor, weight: FontWeight.w500),
"".toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
],
),
@@ -447,9 +447,9 @@ class _BookAppointmentPageState extends State {
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.notSureHelpMeChooseClinic.tr().toText16(weight: FontWeight.w600, color: AppColors.textColor),
+ LocaleKeys.notSureHelpMeChooseClinic.tr(context: context).toText16(weight: FontWeight.w600, color: AppColors.textColor),
SizedBox(height: 8.h),
- LocaleKeys.mentionYourSymptomsAndFindDoctors.tr().toText12(
+ LocaleKeys.mentionYourSymptomsAndFindDoctors.tr(context: context).toText12(
fontWeight: FontWeight.w500,
color: AppColors.greyTextColor,
),
@@ -531,7 +531,7 @@ class _BookAppointmentPageState extends State {
getTitle(AppointmentViaRegionViewmodel data) {
if (data.selectedRegionId == null) {
- return LocaleKeys.selectRegion.tr().toText20(weight: FontWeight.w600);
+ return LocaleKeys.selectRegion.tr(context: context).toText20(weight: FontWeight.w600);
} else {
return Transform.flip(
flipX: data.isArabic ? true : false,
@@ -558,8 +558,8 @@ class _BookAppointmentPageState extends State {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.immediateService.tr().toText18(color: AppColors.textColor, isBold: true),
- LocaleKeys.noNeedToWaitGetMedicalConsultation.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+ LocaleKeys.immediateService.tr(context: context).toText18(color: AppColors.textColor, isBold: true),
+ LocaleKeys.noNeedToWaitGetMedicalConsultation.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
],
),
),
@@ -574,7 +574,7 @@ class _BookAppointmentPageState extends State {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.noVisitRequired.tr().toText18(color: AppColors.textColor, isBold: true),
+ LocaleKeys.noVisitRequired.tr(context: context).toText18(color: AppColors.textColor, isBold: true),
LocaleKeys.livecarePoint5.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
],
),
@@ -590,8 +590,8 @@ class _BookAppointmentPageState extends State {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.doctorWillContact.tr().toText18(color: AppColors.textColor, isBold: true),
- LocaleKeys.specialisedDoctorWillContactYou.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+ LocaleKeys.doctorWillContact.tr(context: context).toText18(color: AppColors.textColor, isBold: true),
+ LocaleKeys.specialisedDoctorWillContactYou.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
],
),
),
@@ -606,8 +606,8 @@ class _BookAppointmentPageState extends State {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.freeMedicineDelivery.tr().toText18(color: AppColors.textColor, isBold: true),
- LocaleKeys.offersFreeMedicineDelivery.tr().toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+ LocaleKeys.freeMedicineDelivery.tr(context: context).toText18(color: AppColors.textColor, isBold: true),
+ LocaleKeys.offersFreeMedicineDelivery.tr(context: context).toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
],
),
),
diff --git a/lib/presentation/book_appointment/select_clinic_page.dart b/lib/presentation/book_appointment/select_clinic_page.dart
index e76e1c9..d96c9da 100644
--- a/lib/presentation/book_appointment/select_clinic_page.dart
+++ b/lib/presentation/book_appointment/select_clinic_page.dart
@@ -79,7 +79,7 @@ class _SelectClinicPageState extends State {
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.only(topLeft: Radius.circular(24.r), topRight: Radius.circular(24.r))),
padding: EdgeInsets.symmetric(vertical: 20.h, horizontal: 20.h),
child: CustomButton(
- text: LocaleKeys.bookAppo.tr(),
+ text: LocaleKeys.bookAppo.tr(context: context),
onPressed: () {
if (widget.calculatedResult["clinicId"] == null) {
bookAppointmentsViewModel.setIsDoctorsListLoading(true);
@@ -1097,7 +1097,7 @@ class _SelectClinicPageState extends State {
getTitle(AppointmentViaRegionViewmodel data) {
if (data.selectedRegionId == null) {
- return LocaleKeys.selectRegion.tr().toText20(weight: FontWeight.w600);
+ return LocaleKeys.selectRegion.tr(context: context).toText20(weight: FontWeight.w600);
} else {
return Transform.flip(
flipX: data.isArabic ? true : false,
@@ -1185,7 +1185,7 @@ class _SelectClinicPageState extends State {
children: [
Expanded(
child: CustomButton(
- text: LocaleKeys.cancel.tr(),
+ text: LocaleKeys.cancel.tr(context: context),
onPressed: () {
bookAppointmentsViewModel.setIsContinueDentalPlan(false);
bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true);
@@ -1206,7 +1206,7 @@ class _SelectClinicPageState extends State {
SizedBox(width: 8.h),
Expanded(
child: CustomButton(
- text: LocaleKeys.confirm.tr(),
+ text: LocaleKeys.confirm.tr(context: context),
onPressed: () async {
bookAppointmentsViewModel.setIsContinueDentalPlan(true);
Navigator.of(context).pop();
diff --git a/lib/presentation/book_appointment/select_doctor_page.dart b/lib/presentation/book_appointment/select_doctor_page.dart
index e57ed51..3723bee 100644
--- a/lib/presentation/book_appointment/select_doctor_page.dart
+++ b/lib/presentation/book_appointment/select_doctor_page.dart
@@ -178,7 +178,7 @@ class _SelectDoctorPageState extends State {
children: [
LocaleKeys.nearestAppo.tr(context: context).toText13(isBold: true),
SizedBox(height: 4.h),
- LocaleKeys.viewNearestAppos.toText11(color: AppColors.textColorLight, weight: FontWeight.w500),
+ LocaleKeys.viewNearestAppos.tr(context: context).toText11(color: AppColors.textColorLight, weight: FontWeight.w500),
],
),
const Spacer(),
diff --git a/lib/presentation/book_appointment/widgets/appointment_calendar.dart b/lib/presentation/book_appointment/widgets/appointment_calendar.dart
index c91e7a7..8fa72d4 100644
--- a/lib/presentation/book_appointment/widgets/appointment_calendar.dart
+++ b/lib/presentation/book_appointment/widgets/appointment_calendar.dart
@@ -204,13 +204,13 @@ class _AppointmentCalendarState extends State {
children: [
Lottie.asset(AppAnimations.errorAnimation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 100.h, height: 100.h, fit: BoxFit.fill),
SizedBox(height: 8.h),
- (LocaleKeys.loginToUseService.tr()).toText16(color: AppColors.blackColor),
+ (LocaleKeys.loginToUseService.tr(context: context)).toText16(color: AppColors.blackColor),
SizedBox(height: 16.h),
Row(
children: [
Expanded(
child: CustomButton(
- text: LocaleKeys.cancel.tr(),
+ text: LocaleKeys.cancel.tr(context: context),
onPressed: () {
Navigator.of(context).pop();
},
@@ -224,7 +224,7 @@ class _AppointmentCalendarState extends State {
SizedBox(width: 8.h),
Expanded(
child: CustomButton(
- text: LocaleKeys.confirm.tr(),
+ text: LocaleKeys.confirm.tr(context: context),
onPressed: () async {
Navigator.of(context).pop();
Navigator.pushAndRemoveUntil(
diff --git a/lib/presentation/home/data/landing_page_data.dart b/lib/presentation/home/data/landing_page_data.dart
index ef2832b..c52d5e1 100644
--- a/lib/presentation/home/data/landing_page_data.dart
+++ b/lib/presentation/home/data/landing_page_data.dart
@@ -1,4 +1,6 @@
+import 'package:easy_localization/easy_localization.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/home/data/service_card_data.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
@@ -7,8 +9,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "emergency",
icon: AppAssets.emergency_services_icon,
- title: "Emergency",
- subtitle: "Services",
+ title: LocaleKeys.emergency,
+ subtitle: LocaleKeys.services2,
backgroundColor: AppColors.primaryRedColor,
iconColor: AppColors.whiteColor,
textColor: AppColors.whiteColor,
@@ -17,8 +19,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "indoor_navigation",
icon: AppAssets.indoor_nav_icon,
- title: "Indoor",
- subtitle: "Navigation",
+ title: LocaleKeys.indoor,
+ subtitle: LocaleKeys.navigation,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -27,8 +29,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "search_doctor",
icon: AppAssets.search_doctor_icon,
- title: "Search",
- subtitle: "Doctor",
+ title: LocaleKeys.search,
+ subtitle: LocaleKeys.doctor,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -37,8 +39,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "health_calculators_and_converts",
icon: AppAssets.health_calculators_icon,
- title: "Health",
- subtitle: "Calculators",
+ title: LocaleKeys.health,
+ subtitle: LocaleKeys.calculators,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -47,8 +49,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "health_converters",
icon: AppAssets.health_converters_icon,
- title: "Health",
- subtitle: "Converters",
+ title: LocaleKeys.health,
+ subtitle: LocaleKeys.converters,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -57,8 +59,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "parking_guide",
icon: AppAssets.car_parking_icon,
- title: "Parking",
- subtitle: "Guide",
+ title: LocaleKeys.parking,
+ subtitle: LocaleKeys.guide,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -70,8 +72,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "emergency",
icon: AppAssets.emergency_services_icon,
- title: "Emergency",
- subtitle: "Services",
+ title: LocaleKeys.emergency,
+ subtitle: LocaleKeys.services2,
backgroundColor: AppColors.primaryRedColor,
iconColor: AppColors.whiteColor,
textColor: AppColors.whiteColor,
@@ -80,8 +82,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "lab_results",
icon: AppAssets.home_lab_result_icon,
- title: "Lab",
- subtitle: "Results",
+ title: LocaleKeys.lab,
+ subtitle: LocaleKeys.labSubtitle,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -90,8 +92,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "radiology_results",
icon: AppAssets.my_radiology_icon,
- title: "Radiology",
- subtitle: "Results",
+ title: LocaleKeys.radiology,
+ subtitle: LocaleKeys.radiologySubtitle,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -100,8 +102,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "prescriptions",
icon: AppAssets.my_prescription_icon,
- title: "Prescriptions",
- subtitle: "Details",
+ title: LocaleKeys.medicinesSubtitle,
+ subtitle: LocaleKeys.details,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -110,8 +112,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "insurance_update",
icon: AppAssets.insurance_update_icon,
- title: "Insurance",
- subtitle: "Details",
+ title: LocaleKeys.insurance,
+ subtitle: LocaleKeys.details,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -130,8 +132,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "sick_leaves",
icon: AppAssets.my_sick_leave_icon,
- title: "Sick",
- subtitle: "Leaves",
+ title: LocaleKeys.sick,
+ subtitle: LocaleKeys.sickSubtitle,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -143,8 +145,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "livecare",
icon: AppAssets.small_livecare_icon,
- title: "LiveCare",
- subtitle: "Explore our app, View our services and offers",
+ title: LocaleKeys.liveCare,
+ subtitle: LocaleKeys.liveCareServiceDesc,
largeCardIcon: AppAssets.liveCareService,
backgroundColor: AppColors.successColor,
iconColor: AppColors.whiteColor,
@@ -161,8 +163,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "home_health_care",
icon: AppAssets.homeBottom,
- title: "Home Health Care",
- subtitle: "Explore our app, View our services and offers",
+ title: LocaleKeys.homeHealthCare,
+ subtitle: LocaleKeys.liveCareServiceDesc,
largeCardIcon: AppAssets.homeHealthCareService,
backgroundColor: AppColors.primaryRedColor,
iconColor: AppColors.whiteColor,
@@ -171,8 +173,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "pharmacy",
icon: AppAssets.pharmacy_icon, //359846
- title: "Pharmacy",
- subtitle: "Explore our app, View our services and offers",
+ title: LocaleKeys.hmgPharmacy,
+ subtitle: LocaleKeys.liveCareServiceDesc,
largeCardIcon: AppAssets.pharmacyService,
backgroundColor: AppColors.pharmacyBGColor,
iconColor: null,
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index 5ea5b21..b633404 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -195,10 +195,11 @@ class _LandingPageState extends State {
mainAxisSize: MainAxisSize.min,
spacing: 12.h,
children: [
- Stack(children: [
- Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 18.h, width: 18.h).onPress(() async {
- if (appState.isAuthenticated) {
- notificationsViewModel.setNotificationStatusID(2);
+ appState.isAuthenticated
+ ? Stack(children: [
+ Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 18.h, width: 18.h).onPress(() async {
+ if (appState.isAuthenticated) {
+ notificationsViewModel.setNotificationStatusID(2);
notificationsViewModel.getAllNotifications();
Navigator.of(context).push(
CustomPageRoute(
@@ -233,7 +234,8 @@ class _LandingPageState extends State {
),
)
: SizedBox.shrink(),
- ]),
+ ])
+ : SizedBox.shrink(),
Utils.buildSvgWithAssets(icon: AppAssets.indoor_nav_icon, height: 18.h, width: 18.h).onPress(() {
openIndoorNavigationBottomSheet(context);
}),
@@ -246,6 +248,11 @@ class _LandingPageState extends State {
isFullScreen: false,
);
}),
+ !appState.isAuthenticated
+ ? Utils.buildSvgWithAssets(icon: appState.isArabic() ? AppAssets.enLangIcon : AppAssets.arLangIcon, height: 18.h, width: 18.h).onPress(() {
+ context.setLocale(appState.isArabic() ? Locale('en', 'US') : Locale('ar', 'SA'));
+ })
+ : SizedBox.shrink()
],
);
}),
@@ -302,7 +309,7 @@ class _LandingPageState extends State {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- "Appointments & Visits".toText16(isBold: true),
+ LocaleKeys.appointmentsAndVisits.tr(context: context).toText16(isBold: true),
Row(
children: [
LocaleKeys.viewAll.tr(context: context).toText12(color: AppColors.primaryRedColor),
@@ -463,7 +470,7 @@ class _LandingPageState extends State {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppCustomChipWidget(
- labelText: "ER Online Check-In Request",
+ labelText: LocaleKeys.erOnlineCheckInRequest.tr(context: context),
backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.10),
textColor: AppColors.primaryRedColor,
),
@@ -599,10 +606,10 @@ class _LandingPageState extends State {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- "Services".toText16(isBold: true),
+ LocaleKeys.services2.tr(context: context).toText16(isBold: true),
Row(
children: [
- "View all services".toText12(color: AppColors.primaryRedColor),
+ LocaleKeys.viewAllServices.tr(context: context).toText12(color: AppColors.primaryRedColor),
SizedBox(width: 2.h),
Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
],
@@ -855,7 +862,7 @@ class _LandingPageState extends State {
hasShadow: true,
),
child: AppointmentCard(
- patientAppointmentHistoryResponseModel: myAppointmentsViewModel.patientUpcomingAppointmentsHistoryList.first,
+ patientAppointmentHistoryResponseModel: myAppointmentsViewModel.patientAppointmentsHistoryList.first,
myAppointmentsViewModel: myAppointmentsViewModel,
bookAppointmentsViewModel: bookAppointmentsViewModel,
isLoading: false,
@@ -901,7 +908,7 @@ class _LandingPageState extends State {
}
} else if (index == 2) {
if ((myAppointmentsViewModel.isPatientHasQueueAppointment || immediateLiveCareViewModel.patientHasPendingLiveCareRequest) &&
- myAppointmentsViewModel.patientUpcomingAppointmentsHistoryList.isNotEmpty) {
+ todoSectionViewModel.patientAncillaryOrdersList.isNotEmpty) {
return AncillaryOrderCard(
order: todoSectionViewModel.patientAncillaryOrdersList.first,
isLoading: false,
diff --git a/lib/presentation/home/widgets/habib_wallet_card.dart b/lib/presentation/home/widgets/habib_wallet_card.dart
index 9058c8f..fb04baf 100644
--- a/lib/presentation/home/widgets/habib_wallet_card.dart
+++ b/lib/presentation/home/widgets/habib_wallet_card.dart
@@ -23,10 +23,10 @@ class HabibWalletCard extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- "My Balance".toText16(isBold: true),
+ LocaleKeys.myBalance.tr(context: context).toText16(isBold: true),
Row(
children: [
- "View all services".toText12(color: AppColors.primaryRedColor),
+ LocaleKeys.viewAllServices.tr(context: context).toText12(color: AppColors.primaryRedColor),
SizedBox(width: 2.h),
Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
],
@@ -54,7 +54,7 @@ class HabibWalletCard extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- "Habib Wallet".toText15(isBold: true),
+ LocaleKeys.habibWallet.tr(context: context).toText15(isBold: true),
Container(
height: 40.h,
width: 40.h,
@@ -94,7 +94,7 @@ class HabibWalletCard extends StatelessWidget {
padding: EdgeInsets.symmetric(horizontal: 50.h),
child: Row(
children: [
- "View details".toText12(color: AppColors.primaryRedColor),
+ LocaleKeys.viewDetails.tr(context: context).toText12(color: AppColors.primaryRedColor),
SizedBox(width: 2.h),
Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
],
diff --git a/lib/presentation/home/widgets/large_service_card.dart b/lib/presentation/home/widgets/large_service_card.dart
index 6025ba8..9292004 100644
--- a/lib/presentation/home/widgets/large_service_card.dart
+++ b/lib/presentation/home/widgets/large_service_card.dart
@@ -89,16 +89,15 @@ class LargeServiceCard extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- serviceCardData.title.toText14(isBold: true, color: AppColors.textColor),
- SizedBox(width: 6.h),
- serviceCardData.subtitle.toText14(weight: FontWeight.w500, color: AppColors.textColorLight),
+ serviceCardData.title.tr(context: context).toText14(isBold: true, color: AppColors.textColor),
+ serviceCardData.subtitle.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
],
),
),
],
- ).paddingSymmetrical(16.w, 20.h),
+ ).paddingSymmetrical(12.w, 24.h),
CustomButton(
- text: serviceCardData.isBold ? LocaleKeys.visitPharmacyOnline.tr() : LocaleKeys.bookNow.tr(context: context),
+ text: serviceCardData.isBold ? LocaleKeys.visitPharmacyOnline.tr(context: context) : LocaleKeys.bookNow.tr(context: context),
onPressed: () {
handleOnTap();
},
diff --git a/lib/presentation/home/widgets/small_service_card.dart b/lib/presentation/home/widgets/small_service_card.dart
index 49db8bf..390c001 100644
--- a/lib/presentation/home/widgets/small_service_card.dart
+++ b/lib/presentation/home/widgets/small_service_card.dart
@@ -65,8 +65,8 @@ class SmallServiceCard extends StatelessWidget {
children: [
Utils.buildSvgWithAssets(icon: icon, iconColor: iconColor, width: 32.h, height: 32.h),
SizedBox(height: 6.h),
- title.toText11(color: textColor, isBold: isBold, isCenter: true),
- subtitle.toText11(color: textColor, isBold: isBold, isCenter: true),
+ title.tr(context: context).toText11(color: textColor, isBold: isBold, isCenter: true),
+ subtitle.tr(context: context).toText11(color: textColor, isBold: isBold, isCenter: true),
],
),
),
@@ -173,7 +173,7 @@ class SmallServiceCard extends StatelessWidget {
void openIndoorNavigationBottomSheet(BuildContext context) {
showCommonBottomSheetWithoutHeight(
- title: LocaleKeys.selectHospital.tr(),
+ title: LocaleKeys.selectHospital.tr(context: context),
context,
child: ChangeNotifierProvider(
create: (context) => HospitalSelectionBottomSheetViewModel(getIt()),
diff --git a/lib/presentation/lab/lab_orders_page.dart b/lib/presentation/lab/lab_orders_page.dart
index 799f574..538f250 100644
--- a/lib/presentation/lab/lab_orders_page.dart
+++ b/lib/presentation/lab/lab_orders_page.dart
@@ -1 +1 @@
-import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
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/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/utils/date_util.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_toolbar.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:provider/provider.dart';
import 'alphabeticScroll.dart';
class LabOrdersPage extends StatefulWidget {
const LabOrdersPage({super.key});
@override
State createState() => _LabOrdersPageState();
}
class _LabOrdersPageState extends State {
late LabViewModel labProvider;
late DateRangeSelectorRangeViewModel rangeViewModel;
late AppState _appState;
List?> labSuggestions = [];
int? expandedIndex;
String? selectedFilterText = '';
int activeIndex = 0;
@override
void initState() {
scheduleMicrotask(() {
labProvider.initLabProvider();
});
super.initState();
}
@override
Widget build(BuildContext context) {
labProvider = Provider.of(context, listen: false);
rangeViewModel = Provider.of(context);
_appState = getIt();
return CollapsingToolbar(
title: LocaleKeys.labResults.tr(),
search: () async {
final lavVM = Provider.of(context, listen: false);
if (lavVM.isLabOrdersLoading) {
return;
} else {
String? value = await Navigator.of(context).push(
CustomPageRoute(
page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
fullScreenDialog: true,
direction: AxisDirection.down,
),
);
if (value != null) {
selectedFilterText = value;
lavVM.filterLabReports(value);
}
}
},
child: Consumer(
builder: (context, model, child) {
return SingleChildScrollView(
physics: AlwaysScrollableScrollPhysics(),
padding: EdgeInsets.all(24.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: CustomTabBar(
activeTextColor: Color(0xffED1C2B),
activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
tabs: [
CustomTabBarModel(null, LocaleKeys.byVisit.tr()),
CustomTabBarModel(null, LocaleKeys.byTest.tr()),
// CustomTabBarModel(null, "Completed".needTranslation),
],
onTabChange: (index) {
activeIndex = index;
setState(() {});
},
),
),
],
),
if (activeIndex == 0)
Padding(
padding: EdgeInsets.symmetric(vertical: 10.h),
child: Row(
children: [
CustomButton(
text: LocaleKeys.byClinic.tr(context: context),
onPressed: () {
model.setIsSortByClinic(true);
},
backgroundColor: model.isSortByClinic ? AppColors.bgRedLightColor : AppColors.whiteColor,
borderColor: model.isSortByClinic ? AppColors.primaryRedColor : AppColors.textColor.withValues(alpha: 0.2),
textColor: model.isSortByClinic ? AppColors.primaryRedColor : AppColors.blackColor,
fontSize: 12,
fontWeight: FontWeight.w500,
borderRadius: 10,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
),
SizedBox(width: 8.h),
CustomButton(
text: LocaleKeys.byHospital.tr(context: context),
onPressed: () {
model.setIsSortByClinic(false);
},
backgroundColor: model.isSortByClinic ? AppColors.whiteColor : AppColors.bgRedLightColor,
borderColor: model.isSortByClinic ? AppColors.textColor.withValues(alpha: 0.2) : AppColors.primaryRedColor,
textColor: model.isSortByClinic ? AppColors.blackColor : AppColors.primaryRedColor,
fontSize: 12,
fontWeight: FontWeight.w500,
borderRadius: 10,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
),
],
),
),
SizedBox(height: 8.h),
selectedFilterText!.isNotEmpty
? CustomChipWidget(
chipText: selectedFilterText!,
chipType: ChipTypeEnum.alert,
isSelected: true,
)
: SizedBox(),
activeIndex == 0
? // By Visit - show grouped view when available
model.isLabOrdersLoading
? ListView.builder(
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: 5,
itemBuilder: (context, index) => LabResultItemView(
onTap: () {},
labOrder: null,
index: index,
isLoading: true,
),
)
: (model.patientLabOrdersViewList.isNotEmpty
? ListView.builder(
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: model.patientLabOrdersViewList.length,
itemBuilder: (context, index) {
final group = model.patientLabOrdersViewList[index];
final isExpanded = expandedIndex == index;
return AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 500),
child: SlideAnimation(
verticalOffset: 100.0,
child: FadeInAnimation(
child: AnimatedContainer(
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
margin: EdgeInsets.symmetric(vertical: 8.h),
decoration: RoundedRectangleBorder()
.toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 20.h, hasShadow: true),
child: InkWell(
onTap: () {
setState(() {
expandedIndex = isExpanded ? null : index;
});
},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.all(16.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppCustomChipWidget(labelText: "${group.length} ${LocaleKeys.results.tr(context: context)}"),
Icon(isExpanded ? Icons.expand_less : Icons.expand_more),
],
),
SizedBox(height: 8.h),
Text(
model.isSortByClinic ? (group.first.clinicDescription ?? 'Unknown') : (group.first.projectName ?? 'Unknown'),
style: TextStyle(fontSize: 16.h, fontWeight: FontWeight.w600),
overflow: TextOverflow.ellipsis,
),
],
),
),
AnimatedSwitcher(
duration: Duration(milliseconds: 500),
switchInCurve: Curves.easeIn,
switchOutCurve: Curves.easeOut,
transitionBuilder: (Widget child, Animation animation) {
return FadeTransition(
opacity: animation,
child: SizeTransition(
sizeFactor: animation,
axisAlignment: 0.0,
child: child,
),
);
},
child: isExpanded
? Container(
key: ValueKey(index),
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 0.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
...group.map((order) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisSize: MainAxisSize.min,
children: [
Image.network(
order.doctorImageURL ?? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
width: 24.w,
height: 24.h,
fit: BoxFit.cover,
).circle(100),
SizedBox(width: 8.h),
Expanded(child: (order.doctorName ?? order.doctorNameEnglish ?? "").toString().toText14(weight: FontWeight.w500)),
],
),
SizedBox(height: 8.h),
Wrap(
direction: Axis.horizontal,
spacing: 4.h,
runSpacing: 4.h,
children: [
AppCustomChipWidget(
labelText: ("${LocaleKeys.orderNo.tr()}: ${order.orderNo!}"),
),
AppCustomChipWidget(
labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(order.orderDate ?? ""), false),
),
AppCustomChipWidget(
labelText: model.isSortByClinic ? (order.clinicDescription ?? "") : (order.projectName ?? ""),
),
],
),
// Row(
// children: [
// CustomButton(
// text: ("Order No: ".needTranslation + order.orderNo!),
// onPressed: () {},
// backgroundColor: AppColors.greyColor,
// borderColor: AppColors.greyColor,
// textColor: AppColors.blackColor,
// fontSize: 10,
// fontWeight: FontWeight.w500,
// borderRadius: 8,
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
// height: 24.h,
// ),
// SizedBox(width: 8.h),
// CustomButton(
// text: DateUtil.formatDateToDate(DateUtil.convertStringToDate(order.orderDate ?? ""), false),
// onPressed: () {},
// backgroundColor: AppColors.greyColor,
// borderColor: AppColors.greyColor,
// textColor: AppColors.blackColor,
// fontSize: 10,
// fontWeight: FontWeight.w500,
// borderRadius: 8,
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
// height: 24.h,
// ),
// ],
// ),
// SizedBox(height: 8.h),
// Row(
// children: [
// CustomButton(
// text: model.isSortByClinic ? (order.clinicDescription ?? "") : (order.projectName ?? ""),
// onPressed: () {},
// backgroundColor: AppColors.greyColor,
// borderColor: AppColors.greyColor,
// textColor: AppColors.blackColor,
// fontSize: 10,
// fontWeight: FontWeight.w500,
// borderRadius: 8,
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
// height: 24.h,
// ),
// ],
// ),
SizedBox(height: 12.h),
Row(
children: [
Expanded(flex: 2, child: SizedBox()),
// Expanded(
// flex: 1,
// child: Container(
// height: 40.h,
// width: 40.w,
// decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
// color: AppColors.textColor,
// borderRadius: 12,
// ),
// child: Padding(
// padding: EdgeInsets.all(12.h),
// child: Transform.flip(
// flipX: _appState.isArabic(),
// child: Utils.buildSvgWithAssets(
// icon: AppAssets.forward_arrow_icon_small,
// iconColor: AppColors.whiteColor,
// fit: BoxFit.contain,
// ),
// ),
// ),
// ).onPress(() {
// model.currentlySelectedPatientOrder = order;
// labProvider.getPatientLabResultByHospital(order);
// labProvider.getPatientSpecialResult(order);
// Navigator.of(context).push(
// CustomPageRoute(page: LabResultByClinic(labOrder: order)),
// );
// }),
// )
Expanded(
flex:2,
child: CustomButton(
icon: AppAssets.view_report_icon,
iconColor: AppColors.primaryRedColor,
iconSize: 16.h,
text: LocaleKeys.viewResults.tr(context: context),
onPressed: () {
model.currentlySelectedPatientOrder = order;
labProvider.getPatientLabResultByHospital(order);
labProvider.getPatientSpecialResult(order);
Navigator.of(context).push(
CustomPageRoute(page: LabResultByClinic(labOrder: order)),
);
},
backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor,
fontSize: 14,
fontWeight: FontWeight.w500,
borderRadius: 12,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
),
)
],
),
SizedBox(height: 12.h),
Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.05), height: 1.h),
SizedBox(height: 12.h),
],
);
}),
],
),
)
: SizedBox.shrink(),
),
],
),
),
),
),
));
},
)
: Utils.getNoDataWidget(context, noDataText: LocaleKeys.noLabResults.tr(context: context)))
: // By Test or other tabs keep existing behavior
(model.isLabOrdersLoading)
? Column(
children: List.generate(
5,
(index) => LabResultItemView(
onTap: () {},
labOrder: null,
index: index,
isLoading: true,
)),
)
: AlphabeticScroll(
alpahbetsAvailable: model.indexedCharacterForUniqueTest,
details: model.uniqueTestsList,
labViewModel: model,
rangeViewModel: rangeViewModel,
appState: _appState,
)
],
) );
},
),
);
}
Color getLabOrderStatusColor(num status) {
switch (status) {
case 44:
return AppColors.warningColorYellow;
case 45:
return AppColors.warningColorYellow;
case 16:
return AppColors.successColor;
case 17:
return AppColors.successColor;
default:
return AppColors.greyColor;
}
}
String getLabOrderStatusText(num status) {
switch (status) {
case 44:
return LocaleKeys.resultsPending.tr(context: context);
case 45:
return LocaleKeys.resultsPending.tr(context: context);
case 16:
return LocaleKeys.resultsAvailable.tr(context: context);
case 17:
return LocaleKeys.resultsAvailable.tr(context: context);
default:
return "";
}
}
getLabSuggestions(LabViewModel model) {
if (model.patientLabOrders.isEmpty) {
return [];
}
return model.patientLabOrders.map((m) => m.testDetails).toList();
}
}
\ No newline at end of file
+import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
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/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/utils/date_util.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_toolbar.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:provider/provider.dart';
import 'alphabeticScroll.dart';
class LabOrdersPage extends StatefulWidget {
const LabOrdersPage({super.key});
@override
State createState() => _LabOrdersPageState();
}
class _LabOrdersPageState extends State {
late LabViewModel labProvider;
late DateRangeSelectorRangeViewModel rangeViewModel;
late AppState _appState;
List?> labSuggestions = [];
int? expandedIndex;
String? selectedFilterText = '';
int activeIndex = 0;
@override
void initState() {
scheduleMicrotask(() {
labProvider.initLabProvider();
});
super.initState();
}
@override
Widget build(BuildContext context) {
labProvider = Provider.of(context, listen: false);
rangeViewModel = Provider.of(context);
_appState = getIt();
return CollapsingToolbar(
title: LocaleKeys.labResults.tr(context: context),
search: () async {
final lavVM = Provider.of(context, listen: false);
if (lavVM.isLabOrdersLoading) {
return;
} else {
String? value = await Navigator.of(context).push(
CustomPageRoute(
page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
fullScreenDialog: true,
direction: AxisDirection.down,
),
);
if (value != null) {
selectedFilterText = value;
lavVM.filterLabReports(value);
}
}
},
child: Consumer(
builder: (context, model, child) {
return SingleChildScrollView(
physics: AlwaysScrollableScrollPhysics(),
padding: EdgeInsets.all(24.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: CustomTabBar(
activeTextColor: Color(0xffED1C2B),
activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
tabs: [
CustomTabBarModel(null, LocaleKeys.byVisit.tr(context: context)),
CustomTabBarModel(null, LocaleKeys.byTest.tr(context: context)),
// CustomTabBarModel(null, "Completed".needTranslation),
],
onTabChange: (index) {
activeIndex = index;
setState(() {});
},
),
),
],
),
if (activeIndex == 0)
Padding(
padding: EdgeInsets.symmetric(vertical: 10.h),
child: Row(
children: [
CustomButton(
text: LocaleKeys.byClinic.tr(context: context),
onPressed: () {
model.setIsSortByClinic(true);
},
backgroundColor: model.isSortByClinic ? AppColors.bgRedLightColor : AppColors.whiteColor,
borderColor: model.isSortByClinic ? AppColors.primaryRedColor : AppColors.textColor.withValues(alpha: 0.2),
textColor: model.isSortByClinic ? AppColors.primaryRedColor : AppColors.blackColor,
fontSize: 12,
fontWeight: FontWeight.w500,
borderRadius: 10,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
),
SizedBox(width: 8.h),
CustomButton(
text: LocaleKeys.byHospital.tr(context: context),
onPressed: () {
model.setIsSortByClinic(false);
},
backgroundColor: model.isSortByClinic ? AppColors.whiteColor : AppColors.bgRedLightColor,
borderColor: model.isSortByClinic ? AppColors.textColor.withValues(alpha: 0.2) : AppColors.primaryRedColor,
textColor: model.isSortByClinic ? AppColors.blackColor : AppColors.primaryRedColor,
fontSize: 12,
fontWeight: FontWeight.w500,
borderRadius: 10,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
),
],
),
),
SizedBox(height: 8.h),
selectedFilterText!.isNotEmpty
? CustomChipWidget(
chipText: selectedFilterText!,
chipType: ChipTypeEnum.alert,
isSelected: true,
)
: SizedBox(),
activeIndex == 0
? // By Visit - show grouped view when available
model.isLabOrdersLoading
? ListView.builder(
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: 5,
itemBuilder: (context, index) => LabResultItemView(
onTap: () {},
labOrder: null,
index: index,
isLoading: true,
),
)
: (model.patientLabOrdersViewList.isNotEmpty
? ListView.builder(
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
padding: EdgeInsets.zero,
itemCount: model.patientLabOrdersViewList.length,
itemBuilder: (context, index) {
final group = model.patientLabOrdersViewList[index];
final isExpanded = expandedIndex == index;
return AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 500),
child: SlideAnimation(
verticalOffset: 100.0,
child: FadeInAnimation(
child: AnimatedContainer(
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
margin: EdgeInsets.symmetric(vertical: 8.h),
decoration: RoundedRectangleBorder()
.toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 20.h, hasShadow: true),
child: InkWell(
onTap: () {
setState(() {
expandedIndex = isExpanded ? null : index;
});
},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.all(16.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppCustomChipWidget(labelText: "${group.length} ${LocaleKeys.results.tr(context: context)}"),
Icon(isExpanded ? Icons.expand_less : Icons.expand_more),
],
),
SizedBox(height: 8.h),
Text(
model.isSortByClinic ? (group.first.clinicDescription ?? 'Unknown') : (group.first.projectName ?? 'Unknown'),
style: TextStyle(fontSize: 16.h, fontWeight: FontWeight.w600),
overflow: TextOverflow.ellipsis,
),
],
),
),
AnimatedSwitcher(
duration: Duration(milliseconds: 500),
switchInCurve: Curves.easeIn,
switchOutCurve: Curves.easeOut,
transitionBuilder: (Widget child, Animation animation) {
return FadeTransition(
opacity: animation,
child: SizeTransition(
sizeFactor: animation,
axisAlignment: 0.0,
child: child,
),
);
},
child: isExpanded
? Container(
key: ValueKey(index),
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 0.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
...group.map((order) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisSize: MainAxisSize.min,
children: [
Image.network(
order.doctorImageURL ?? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
width: 24.w,
height: 24.h,
fit: BoxFit.cover,
).circle(100),
SizedBox(width: 8.h),
Expanded(child: (order.doctorName ?? order.doctorNameEnglish ?? "").toString().toText14(weight: FontWeight.w500)),
],
),
SizedBox(height: 8.h),
Wrap(
direction: Axis.horizontal,
spacing: 4.h,
runSpacing: 4.h,
children: [
AppCustomChipWidget(
labelText: ("${LocaleKeys.orderNo.tr(context: context)}: ${order.orderNo!}"),
),
AppCustomChipWidget(
labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(order.orderDate ?? ""), false),
),
AppCustomChipWidget(
labelText: model.isSortByClinic ? (order.clinicDescription ?? "") : (order.projectName ?? ""),
),
],
),
// Row(
// children: [
// CustomButton(
// text: ("Order No: ".needTranslation + order.orderNo!),
// onPressed: () {},
// backgroundColor: AppColors.greyColor,
// borderColor: AppColors.greyColor,
// textColor: AppColors.blackColor,
// fontSize: 10,
// fontWeight: FontWeight.w500,
// borderRadius: 8,
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
// height: 24.h,
// ),
// SizedBox(width: 8.h),
// CustomButton(
// text: DateUtil.formatDateToDate(DateUtil.convertStringToDate(order.orderDate ?? ""), false),
// onPressed: () {},
// backgroundColor: AppColors.greyColor,
// borderColor: AppColors.greyColor,
// textColor: AppColors.blackColor,
// fontSize: 10,
// fontWeight: FontWeight.w500,
// borderRadius: 8,
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
// height: 24.h,
// ),
// ],
// ),
// SizedBox(height: 8.h),
// Row(
// children: [
// CustomButton(
// text: model.isSortByClinic ? (order.clinicDescription ?? "") : (order.projectName ?? ""),
// onPressed: () {},
// backgroundColor: AppColors.greyColor,
// borderColor: AppColors.greyColor,
// textColor: AppColors.blackColor,
// fontSize: 10,
// fontWeight: FontWeight.w500,
// borderRadius: 8,
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
// height: 24.h,
// ),
// ],
// ),
SizedBox(height: 12.h),
Row(
children: [
Expanded(flex: 2, child: SizedBox()),
// Expanded(
// flex: 1,
// child: Container(
// height: 40.h,
// width: 40.w,
// decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
// color: AppColors.textColor,
// borderRadius: 12,
// ),
// child: Padding(
// padding: EdgeInsets.all(12.h),
// child: Transform.flip(
// flipX: _appState.isArabic(),
// child: Utils.buildSvgWithAssets(
// icon: AppAssets.forward_arrow_icon_small,
// iconColor: AppColors.whiteColor,
// fit: BoxFit.contain,
// ),
// ),
// ),
// ).onPress(() {
// model.currentlySelectedPatientOrder = order;
// labProvider.getPatientLabResultByHospital(order);
// labProvider.getPatientSpecialResult(order);
// Navigator.of(context).push(
// CustomPageRoute(page: LabResultByClinic(labOrder: order)),
// );
// }),
// )
Expanded(
flex:2,
child: CustomButton(
icon: AppAssets.view_report_icon,
iconColor: AppColors.primaryRedColor,
iconSize: 16.h,
text: LocaleKeys.viewResults.tr(context: context),
onPressed: () {
model.currentlySelectedPatientOrder = order;
labProvider.getPatientLabResultByHospital(order);
labProvider.getPatientSpecialResult(order);
Navigator.of(context).push(
CustomPageRoute(page: LabResultByClinic(labOrder: order)),
);
},
backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor,
fontSize: 14,
fontWeight: FontWeight.w500,
borderRadius: 12,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
),
)
],
),
SizedBox(height: 12.h),
Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.05), height: 1.h),
SizedBox(height: 12.h),
],
);
}),
],
),
)
: SizedBox.shrink(),
),
],
),
),
),
),
));
},
)
: Utils.getNoDataWidget(context, noDataText: LocaleKeys.noLabResults.tr(context: context)))
: // By Test or other tabs keep existing behavior
(model.isLabOrdersLoading)
? Column(
children: List.generate(
5,
(index) => LabResultItemView(
onTap: () {},
labOrder: null,
index: index,
isLoading: true,
)),
)
: AlphabeticScroll(
alpahbetsAvailable: model.indexedCharacterForUniqueTest,
details: model.uniqueTestsList,
labViewModel: model,
rangeViewModel: rangeViewModel,
appState: _appState,
)
],
) );
},
),
);
}
Color getLabOrderStatusColor(num status) {
switch (status) {
case 44:
return AppColors.warningColorYellow;
case 45:
return AppColors.warningColorYellow;
case 16:
return AppColors.successColor;
case 17:
return AppColors.successColor;
default:
return AppColors.greyColor;
}
}
String getLabOrderStatusText(num status) {
switch (status) {
case 44:
return LocaleKeys.resultsPending.tr(context: context);
case 45:
return LocaleKeys.resultsPending.tr(context: context);
case 16:
return LocaleKeys.resultsAvailable.tr(context: context);
case 17:
return LocaleKeys.resultsAvailable.tr(context: context);
default:
return "";
}
}
getLabSuggestions(LabViewModel model) {
if (model.patientLabOrders.isEmpty) {
return [];
}
return model.patientLabOrders.map((m) => m.testDetails).toList();
}
}
\ No newline at end of file
diff --git a/lib/presentation/lab/lab_results/lab_result_details.dart b/lib/presentation/lab/lab_results/lab_result_details.dart
index eb39fef..29e15ee 100644
--- a/lib/presentation/lab/lab_results/lab_result_details.dart
+++ b/lib/presentation/lab/lab_results/lab_result_details.dart
@@ -74,7 +74,7 @@ class LabResultDetails extends StatelessWidget {
.getSeverityText(
recentLabResult.calculatedResultFlag ?? "",
)
- .tr()
+ .tr(context: context)
.toText10(weight: FontWeight.w500, color: AppColors.greyTextColor),
Utils.buildSvgWithAssets(
icon: AppAssets.lab_result_indicator,
@@ -151,8 +151,8 @@ class LabResultDetails extends StatelessWidget {
children: [
Text(
labmodel.isGraphVisible
- ? LocaleKeys.historyFlowchart.tr()
- : LocaleKeys.history.tr(),
+ ? LocaleKeys.historyFlowchart.tr(context: context)
+ : LocaleKeys.history.tr(context: context),
style: TextStyle(
fontSize: 16,
fontFamily: 'Poppins',
@@ -181,7 +181,7 @@ class LabResultDetails extends StatelessWidget {
height: 24)
.onPress(() {
showCommonBottomSheetWithoutHeight(
- title: LocaleKeys.setTheDateRange.tr(),
+ title: LocaleKeys.setTheDateRange.tr(context: context),
context,
child: DateRangeSelector(
onRangeSelected: (start, end) {
diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index ad2461f..fa8a591 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -192,7 +192,7 @@ class _MedicalFilePageState extends State {
SizedBox(width: 4.h),
Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, height: 22.h, width: 22.w)
],
- ).withHorizontalPadding(24.w).onPress(() {
+ ).onPress(() {
DialogService dialogService = getIt.get();
dialogService.showFamilyBottomSheetWithoutH(
label: LocaleKeys.familyTitle.tr(context: context),
@@ -276,12 +276,12 @@ class _MedicalFilePageState extends State {
runSpacing: 4.h,
children: [
AppCustomChipWidget(
- labelText: "${appState.getAuthenticatedUser()!.age} Years Old",
+ labelText: LocaleKeys.ageYearsOld.tr(namedArgs: {'age': '${appState.getAuthenticatedUser()!.age}', 'yearsOld': LocaleKeys.yearsOld.tr(context: context)}, context: context),
labelPadding: EdgeInsetsDirectional.only(start: 8.w, end: 8.w),
),
AppCustomChipWidget(
icon: AppAssets.blood_icon,
- labelText: "Blood: ${appState.getUserBloodGroup.isEmpty ? "N/A" : appState.getUserBloodGroup}",
+ labelText: LocaleKeys.bloodGroup.tr(namedArgs: {'bloodType': appState.getUserBloodGroup.isEmpty ? "N/A" : appState.getUserBloodGroup}, context: context),
iconColor: AppColors.primaryRedColor,
labelPadding: EdgeInsetsDirectional.only(start: -4.w, end: 6.w),
padding: EdgeInsets.zero,
@@ -319,7 +319,7 @@ class _MedicalFilePageState extends State {
LocaleKeys.vitalSigns.tr(context: context).toText16(weight: FontWeight.w500, letterSpacing: -0.2),
Row(
children: [
- LocaleKeys.viewAll.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
+ LocaleKeys.viewAll.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
SizedBox(width: 2.h),
Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
],
@@ -359,7 +359,7 @@ class _MedicalFilePageState extends State {
children: [
Utils.buildSvgWithAssets(icon: AppAssets.call_for_vitals, width: 32.h, height: 32.h),
SizedBox(height: 12.h),
- LocaleKeys.noVitalSignsRecordedYet.tr().toText12(isCenter: true),
+ LocaleKeys.noVitalSignsRecordedYet.tr(context: context).toText12(isCenter: true),
],
),
),
@@ -439,14 +439,14 @@ class _MedicalFilePageState extends State {
itemPadding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 14.h),
items: [
ExpandableListItem(
- title: "Medical Services".toText18(weight: FontWeight.w600),
+ title: LocaleKeys.medicalServices.tr(context: context).toText18(weight: FontWeight.w600),
children: [
SizedBox(height: 10.h),
getSelectedTabData(0),
],
),
ExpandableListItem(
- title: "Medical Reports".toText18(
+ title: LocaleKeys.medicalReports.tr(context: context).toText18(
weight: FontWeight.w600,
),
expandedBackgroundColor: Colors.transparent,
@@ -455,7 +455,7 @@ class _MedicalFilePageState extends State {
getSelectedTabData(2),
]),
ExpandableListItem(
- title: "Insurance & Payments".toText18(weight: FontWeight.w600),
+ title: LocaleKeys.insuranceAndPayments.tr(context: context).toText18(weight: FontWeight.w600),
expandedBackgroundColor: Colors.transparent,
children: [
SizedBox(height: 10.h),
@@ -463,7 +463,7 @@ class _MedicalFilePageState extends State {
],
),
ExpandableListItem(
- title: "Tracker & Others".toText18(weight: FontWeight.w600),
+ title: LocaleKeys.trackerAndOthers.tr(context: context).toText18(weight: FontWeight.w600),
expandedBackgroundColor: Colors.transparent,
children: [
SizedBox(height: 10.h),
@@ -577,10 +577,10 @@ class _MedicalFilePageState extends State {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- LocaleKeys.appointmentsAndVisits.tr().toText16(weight: FontWeight.w500, letterSpacing: -0.2),
+ LocaleKeys.appointmentsAndVisits.tr(context: context).toText16(weight: FontWeight.w500, letterSpacing: -0.2),
Row(
children: [
- LocaleKeys.viewAll.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
+ LocaleKeys.viewAll.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
SizedBox(width: 2.h),
Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
],
@@ -645,6 +645,7 @@ class _MedicalFilePageState extends State {
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: myAppointmentsVM.patientAppointmentsHistoryList.length,
+ padding: EdgeInsets.zero,
itemBuilder: (context, index) {
return AnimationConfiguration.staggeredList(
position: index,
@@ -699,12 +700,12 @@ class _MedicalFilePageState extends State {
),
));
},
- separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 12.h),
+ separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 12.w),
),
- ).paddingSymmetrical(0.w, 0.h);
+ );
}),
SizedBox(height: 10.h),
- LocaleKeys.labAndRadiology.tr().toText16(weight: FontWeight.w500, letterSpacing: -0.2),
+ LocaleKeys.labAndRadiology.tr(context: context).toText16(weight: FontWeight.w500, letterSpacing: -0.2),
SizedBox(height: 16.h),
Row(
children: [
@@ -743,7 +744,7 @@ class _MedicalFilePageState extends State {
],
).paddingSymmetrical(0.w, 0.h),
SizedBox(height: 24.h),
- LocaleKeys.activeMedicationsAndPrescriptions.tr().toText16(weight: FontWeight.w500, letterSpacing: -0.2),
+ LocaleKeys.activeMedicationsAndPrescriptions.tr(context: context).toText16(weight: FontWeight.w500, letterSpacing: -0.2),
SizedBox(height: 16.h),
Consumer(builder: (context, prescriptionVM, child) {
return prescriptionVM.isPrescriptionsOrdersLoading
@@ -901,7 +902,7 @@ class _MedicalFilePageState extends State {
LocaleKeys.myDoctor.tr(context: context).toText16(weight: FontWeight.w500, letterSpacing: -0.2),
Row(
children: [
- LocaleKeys.viewAll.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
+ LocaleKeys.viewAll.tr(context: context).toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
SizedBox(width: 2.w),
Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
],
@@ -1351,7 +1352,7 @@ class _MedicalFilePageState extends State {
SizedBox(height: 16.h),
Row(
children: [
- LocaleKeys.others.tr().toText16(weight: FontWeight.w500, color: AppColors.textColor),
+ LocaleKeys.others.tr(context: context).toText16(weight: FontWeight.w500, color: AppColors.textColor),
],
),
SizedBox(height: 16.h),
@@ -1484,7 +1485,7 @@ class _MedicalFilePageState extends State {
Expanded(
child: _buildVitalSignCard(
icon: AppAssets.bmiVital,
- label: "BMI",
+ label: LocaleKeys.bmi.tr(context: context),
value: vitalSign.bodyMassIndex?.toString() ?? '--',
unit: '',
status: vitalSign.bodyMassIndex != null ? _getBMIStatus(vitalSign.bodyMassIndex) : null,
@@ -1495,7 +1496,7 @@ class _MedicalFilePageState extends State {
Expanded(
child: _buildVitalSignCard(
icon: AppAssets.heightVital,
- label: "Height",
+ label: LocaleKeys.height.tr(context: context),
value: vitalSign.heightCm?.toString() ?? '--',
unit: 'cm',
status: null,
@@ -1511,7 +1512,7 @@ class _MedicalFilePageState extends State {
Expanded(
child: _buildVitalSignCard(
icon: AppAssets.weightVital,
- label: "Weight",
+ label: LocaleKeys.weight.tr(context: context),
value: vitalSign.weightKg?.toString() ?? '--',
unit: 'kg',
status: vitalSign.weightKg != null ? "Normal" : null,
@@ -1522,7 +1523,7 @@ class _MedicalFilePageState extends State {
Expanded(
child: _buildVitalSignCard(
icon: AppAssets.bloodPressure,
- label: "Blood Pressure",
+ label: LocaleKeys.bloodPressure.tr(context: context),
value: vitalSign.bloodPressureLower != null && vitalSign.bloodPressureHigher != null
? "${vitalSign.bloodPressureHigher}/${vitalSign.bloodPressureLower}"
: '--',
diff --git a/lib/presentation/profile_settings/profile_settings.dart b/lib/presentation/profile_settings/profile_settings.dart
index 0bf7058..8cc2103 100644
--- a/lib/presentation/profile_settings/profile_settings.dart
+++ b/lib/presentation/profile_settings/profile_settings.dart
@@ -114,8 +114,8 @@ class ProfileSettingsState extends State {
onAddFamilyMemberPress: () {
DialogService dialogService = getIt.get();
dialogService.showAddFamilyFileSheet(
- label: LocaleKeys.addFamilyMember.tr(),
- message: LocaleKeys.pleaseFillBelowFieldToAddNewFamilyMember.tr(),
+ label: LocaleKeys.addFamilyMember.tr(context: context),
+ message: LocaleKeys.pleaseFillBelowFieldToAddNewFamilyMember.tr(context: context),
onVerificationPress: () {
medicalVm.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms);
});
@@ -197,19 +197,18 @@ class ProfileSettingsState extends State {
1.divider,
actionItem(AppAssets.bell, LocaleKeys.notificationsSettings.tr(context: context), () {}),
1.divider,
- actionItem(AppAssets.touch_face_id, LocaleKeys.touchIDFaceIDServices.tr(), () {}, switchValue: true),
+ actionItem(AppAssets.touch_face_id, LocaleKeys.touchIDFaceIDServices.tr(context: context), () {}, switchValue: true),
],
),
),
- LocaleKeys.personalInformation.tr().toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1)
- .paddingOnly(left: 24.w, right: 24.w),
+ LocaleKeys.personalInformation.tr(context: context).toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1).paddingOnly(left: 24.w, right: 24.w),
Container(
margin: EdgeInsets.only(left: 24.w, right: 24.w, top: 16.h, bottom: 24.h),
padding: EdgeInsets.only(top: 4.h, bottom: 4.h),
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
child: Column(
children: [
- actionItem(AppAssets.email_transparent, LocaleKeys.updateEmailAddress.tr(), () {}),
+ actionItem(AppAssets.email_transparent, LocaleKeys.updateEmailAddress.tr(context: context), () {}),
// 1.divider,
// actionItem(AppAssets.smart_phone_fill, "Phone Number".needTranslation, () {}),
// 1.divider,
@@ -219,8 +218,7 @@ class ProfileSettingsState extends State {
],
),
),
- LocaleKeys.helpAndSupport.tr().toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1)
- .paddingOnly(left: 24.w, right: 24.w),
+ LocaleKeys.helpAndSupport.tr(context: context).toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1).paddingOnly(left: 24.w, right: 24.w),
Container(
margin: EdgeInsets.only(left: 24.w, right: 24.w, top: 16.h),
padding: EdgeInsets.only(top: 4.h, bottom: 4.h),
@@ -231,9 +229,9 @@ class ProfileSettingsState extends State {
launchUrl(Uri.parse("tel://" + "+966 11 525 9999"));
}, trailingLabel: "011 525 9999"),
1.divider,
- actionItem(AppAssets.permission, LocaleKeys.permissions.tr(), () {}, trailingLabel: "Location, Camera"),
+ actionItem(AppAssets.permission, LocaleKeys.permissions.tr(context: context), () {}, trailingLabel: "Location, Camera"),
1.divider,
- actionItem(AppAssets.rate, LocaleKeys.rateApp.tr(), () {
+ actionItem(AppAssets.rate, LocaleKeys.rateApp.tr(context: context), () {
if (Platform.isAndroid) {
Utils.openWebView(
url: 'https://play.google.com/store/apps/details?id=com.ejada.hmg',
@@ -245,7 +243,7 @@ class ProfileSettingsState extends State {
}
}, isExternalLink: true),
1.divider,
- actionItem(AppAssets.privacy_terms, LocaleKeys.privacyPolicy.tr(), () {
+ actionItem(AppAssets.privacy_terms, LocaleKeys.privacyPolicy.tr(context: context), () {
Utils.openWebView(
url: 'https://hmg.com/en/Pages/Privacy.aspx',
);
@@ -262,7 +260,7 @@ class ProfileSettingsState extends State {
CustomButton(
height: 56.h,
icon: AppAssets.minus,
- text: LocaleKeys.deactivateAccount.tr(),
+ text: LocaleKeys.deactivateAccount.tr(context: context),
onPressed: () {},
).paddingAll(24.w),
],
@@ -346,7 +344,8 @@ class FamilyCardWidget extends StatelessWidget {
),
],
).expanded,
- Icon(Icons.qr_code, size: 56.h)
+ // Icon(Icons.qr_code, size: 56.h)
+ Image.network("https://api.qrserver.com/v1/create-qr-code/?size=250x250&data=${profile.responseId.toString()}", fit: BoxFit.contain, height: 56.h, width: 56.w)
],
),
SizedBox(height: 4.h),
@@ -421,7 +420,7 @@ class FamilyCardWidget extends StatelessWidget {
),
],
).paddingOnly(top: 16.h, right: 16.w, left: 16.w, bottom: 12.h),
- 1.divider,
+ 1.divider.paddingSymmetrical(16.w, 0.h),
_buildActionButton(appState),
],
),
@@ -445,7 +444,7 @@ class FamilyCardWidget extends StatelessWidget {
return CustomButton(
icon: canSwitch ? AppAssets.switch_user : AppAssets.add_family,
- text: canSwitch ? LocaleKeys.switchFamilyFile.tr() : LocaleKeys.addANewFamilyMember.tr(),
+ text: canSwitch ? LocaleKeys.switchAccount.tr() : LocaleKeys.addANewFamilyMember.tr(),
onPressed: canSwitch ? () => onFamilySwitchPress(profile) : onAddFamilyMemberPress,
backgroundColor: canSwitch ? AppColors.secondaryLightRedColor : AppColors.primaryRedColor,
borderColor: canSwitch ? AppColors.secondaryLightRedColor : AppColors.primaryRedColor,
@@ -461,7 +460,7 @@ class FamilyCardWidget extends StatelessWidget {
return CustomButton(
icon: AppAssets.switch_user,
- text: canSwitchBack ? LocaleKeys.switchBackFamilyFile.tr() : LocaleKeys.switchLogin.tr(),
+ text: canSwitchBack ? LocaleKeys.switchBackFamilyFile.tr() : LocaleKeys.switchAccount.tr(),
backgroundColor: canSwitchBack ? AppColors.primaryRedColor : Colors.grey.shade200,
borderColor: canSwitchBack ? AppColors.primaryRedColor : Colors.grey.shade200,
textColor: canSwitchBack ? AppColors.whiteColor : AppColors.greyTextColor,
diff --git a/lib/presentation/todo_section/widgets/ancillary_orders_list.dart b/lib/presentation/todo_section/widgets/ancillary_orders_list.dart
index aa4d0ba..71d2cf0 100644
--- a/lib/presentation/todo_section/widgets/ancillary_orders_list.dart
+++ b/lib/presentation/todo_section/widgets/ancillary_orders_list.dart
@@ -145,7 +145,7 @@ class AncillaryOrderCard extends StatelessWidget {
if (!isLoading) ...[
Image.network(
"https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown.png",
- width: 63.w,
+ width: 63.h,
height: 63.h,
fit: BoxFit.cover,
).circle(100.r),
@@ -177,11 +177,11 @@ class AncillaryOrderCard extends StatelessWidget {
labelText: order.projectName ?? '-',
).toShimmer2(isShow: isLoading),
// orderNo
- // if (order.orderNo != null || isLoading)
- // AppCustomChipWidget(
- // // icon: AppAssets.calendar,
- // labelText: "${"Order# :".needTranslation}${order.orderNo ?? '-'}",
- // ).toShimmer2(isShow: isLoading),
+ if (order.orderNo != null || isLoading)
+ AppCustomChipWidget(
+ // icon: AppAssets.calendar,
+ labelText: "${LocaleKeys.orderNumber.tr(context: context)}${order.orderNo ?? '-'}",
+ ).toShimmer2(isShow: isLoading),
// Appointment Date
if (order.appointmentDate != null || isLoading)
diff --git a/lib/presentation/vital_sign/vital_sign_page.dart b/lib/presentation/vital_sign/vital_sign_page.dart
index fbf9fc6..e457023 100644
--- a/lib/presentation/vital_sign/vital_sign_page.dart
+++ b/lib/presentation/vital_sign/vital_sign_page.dart
@@ -1,5 +1,6 @@
import 'dart:ui';
+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/utils/size_utils.dart';
@@ -8,6 +9,7 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/vital_sign_respo_model.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';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
@@ -42,7 +44,7 @@ class _VitalSignPageState extends State {
return Scaffold(
backgroundColor: AppColors.bgScaffoldColor,
body: CollapsingListView(
- title: 'Vital Signs',
+ title: LocaleKeys.vitalSigns.tr(context: context),
child: Consumer(
builder: (context, viewModel, child) {
@@ -70,14 +72,14 @@ class _VitalSignPageState extends State {
// BMI Card
_buildVitalSignCard(
icon: AppAssets.bmiVital,
- label: 'BMI',
+ label: LocaleKeys.bmi.tr(context: context),
value: latestVitalSign?.bodyMassIndex?.toString() ?? '--',
unit: '',
status: VitalSignUiModel.bmiStatus(latestVitalSign?.bodyMassIndex),
onTap: () => _openDetails(
- const VitalSignDetailsArgs(
+ VitalSignDetailsArgs(
metric: VitalSignMetric.bmi,
- title: 'BMI',
+ title: LocaleKeys.bmi.tr(context: context),
icon: AppAssets.bmiVital,
unit: '',
),
@@ -88,14 +90,14 @@ class _VitalSignPageState extends State {
// Height Card
_buildVitalSignCard(
icon: AppAssets.heightVital,
- label: 'Height',
+ label: LocaleKeys.height.tr(context: context),
value: latestVitalSign?.heightCm?.toString() ?? '--',
unit: 'cm',
status: null,
onTap: () => _openDetails(
- const VitalSignDetailsArgs(
+ VitalSignDetailsArgs(
metric: VitalSignMetric.height,
- title: 'Height',
+ title: LocaleKeys.height.tr(context: context),
icon: AppAssets.heightVital,
unit: 'cm',
),
@@ -106,14 +108,14 @@ class _VitalSignPageState extends State {
// Weight Card
_buildVitalSignCard(
icon: AppAssets.weightVital,
- label: 'Weight',
+ label: LocaleKeys.weight.tr(context: context),
value: latestVitalSign?.weightKg?.toString() ?? '--',
unit: 'kg',
status: (latestVitalSign?.weightKg != null) ? 'Normal' : null,
onTap: () => _openDetails(
- const VitalSignDetailsArgs(
+ VitalSignDetailsArgs(
metric: VitalSignMetric.weight,
- title: 'Weight',
+ title: LocaleKeys.height.tr(context: context),
icon: AppAssets.weightVital,
unit: 'kg',
),
@@ -124,7 +126,7 @@ class _VitalSignPageState extends State {
// Blood Pressure Card
_buildVitalSignCard(
icon: AppAssets.bloodPressure,
- label: 'Blood Pressure',
+ label: LocaleKeys.bloodPressure.tr(context: context),
value: latestVitalSign != null &&
latestVitalSign.bloodPressureHigher != null &&
latestVitalSign.bloodPressureLower != null
@@ -136,9 +138,9 @@ class _VitalSignPageState extends State {
diastolic: latestVitalSign?.bloodPressureLower,
),
onTap: () => _openDetails(
- const VitalSignDetailsArgs(
+ VitalSignDetailsArgs(
metric: VitalSignMetric.bloodPressure,
- title: 'Blood Pressure',
+ title: LocaleKeys.bloodPressure.tr(context: context),
icon: AppAssets.bloodPressure,
unit: 'mmHg',
low: 90,
@@ -151,14 +153,14 @@ class _VitalSignPageState extends State {
// Temperature Card
_buildVitalSignCard(
icon: AppAssets.temperature,
- label: 'Temperature',
+ label: LocaleKeys.temperature.tr(context: context),
value: latestVitalSign?.temperatureCelcius?.toString() ?? '--',
unit: '°C',
status: null,
onTap: () => _openDetails(
- const VitalSignDetailsArgs(
+ VitalSignDetailsArgs(
metric: VitalSignMetric.temperature,
- title: 'Temperature',
+ title: LocaleKeys.temperature.tr(context: context),
icon: AppAssets.temperature,
unit: '°C',
low: 36.1,
@@ -226,14 +228,14 @@ class _VitalSignPageState extends State {
bottom: 12.h,
child: _buildVitalSignCard(
icon: AppAssets.heart,
- label: 'Heart Rate',
+ label: LocaleKeys.heart.tr(context: context),
value: latestVitalSign?.heartRate?.toString() ?? latestVitalSign?.pulseBeatPerMinute?.toString() ?? '--',
unit: 'bpm',
status: 'Normal',
onTap: () => _openDetails(
- const VitalSignDetailsArgs(
+ VitalSignDetailsArgs(
metric: VitalSignMetric.heartRate,
- title: 'Heart Rate',
+ title: LocaleKeys.heart.tr(context: context),
icon: AppAssets.heart,
unit: 'bpm',
low: 60,
@@ -250,15 +252,15 @@ class _VitalSignPageState extends State {
// Respiratory rate Card
_buildVitalSignCard(
icon: AppAssets.respRate,
- label: 'Respiratory rate',
- value: latestVitalSign?.respirationBeatPerMinute?.toString() ?? '--',
+ label: LocaleKeys.respirationRate.tr(context: context),
+ value: latestVitalSign?.respirationBeatPerMinute?.toString() ?? '--',
unit: 'bpm',
status: 'Normal',
onTap: () => _openDetails(
- const VitalSignDetailsArgs(
- metric: VitalSignMetric.respiratoryRate,
- title: 'Respiratory rate',
- icon: AppAssets.respRate,
+ VitalSignDetailsArgs(
+ metric: VitalSignMetric.respiratoryRate,
+ title: LocaleKeys.respirationRate.tr(context: context),
+ icon: AppAssets.respRate,
unit: 'bpm',
low: 12,
high: 20,
diff --git a/lib/services/dialog_service.dart b/lib/services/dialog_service.dart
index 3092674..79cc3a9 100644
--- a/lib/services/dialog_service.dart
+++ b/lib/services/dialog_service.dart
@@ -212,7 +212,7 @@ Widget exceptionBottomSheetWidget(
children: [
Expanded(
child: CustomButton(
- text: LocaleKeys.cancel.tr(),
+ text: LocaleKeys.cancel.tr(context: context),
onPressed: () {
Navigator.of(context).pop();
},
@@ -226,7 +226,7 @@ Widget exceptionBottomSheetWidget(
SizedBox(width: 10.h),
Expanded(
child: CustomButton(
- text: LocaleKeys.confirm.tr(),
+ text: LocaleKeys.confirm.tr(context: context),
onPressed: onOkPressed,
backgroundColor: AppColors.bgGreenColor,
borderColor: AppColors.bgGreenColor,
@@ -240,7 +240,7 @@ Widget exceptionBottomSheetWidget(
Padding(
padding: EdgeInsets.only(bottom: 10.h),
child: CustomButton(
- text: LocaleKeys.cancel.tr(),
+ text: LocaleKeys.cancel.tr(context: context),
onPressed: (onCancelPressed == null)
? () {
context.pop();
@@ -266,7 +266,7 @@ Widget showPhoneNumberPickerWidget(
Padding(
padding: EdgeInsets.only(bottom: 10.h),
child: CustomButton(
- text: LocaleKeys.sendOTPSMS.tr(),
+ text: LocaleKeys.sendOTPSMS.tr(context: context),
onPressed: onSMSPress,
backgroundColor: AppColors.primaryRedColor,
borderColor: AppColors.primaryRedBorderColor,
@@ -280,14 +280,14 @@ Widget showPhoneNumberPickerWidget(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 8.h),
- child: LocaleKeys.oR.tr().toText16(color: AppColors.textColor),
+ child: LocaleKeys.oR.tr(context: context).toText16(color: AppColors.textColor),
),
],
),
Padding(
padding: EdgeInsets.only(bottom: 10.h, top: 10.h),
child: CustomButton(
- text: LocaleKeys.sendOTPWHATSAPP.tr(),
+ text: LocaleKeys.sendOTPWHATSAPP.tr(context: context),
onPressed: onWhatsappPress,
backgroundColor: Colors.white,
borderColor: AppColors.borderOnlyColor,
diff --git a/lib/widgets/app_language_change.dart b/lib/widgets/app_language_change.dart
index 67a52db..c94195a 100644
--- a/lib/widgets/app_language_change.dart
+++ b/lib/widgets/app_language_change.dart
@@ -48,7 +48,7 @@ class _AppLanguageChangeState extends State {
),
),
CustomButton(
- text: LocaleKeys.save.tr(),
+ text: LocaleKeys.save.tr(context: context),
onPressed: () {
context.setLocale(selectedValue == 'en' ? Locale('en', 'US') : Locale('ar', 'SA')).then((val) {
Navigator.pop(context);
diff --git a/lib/widgets/buttons/custom_button.dart b/lib/widgets/buttons/custom_button.dart
index 7b248db..7fa5c3f 100644
--- a/lib/widgets/buttons/custom_button.dart
+++ b/lib/widgets/buttons/custom_button.dart
@@ -75,7 +75,7 @@ class CustomButton extends StatelessWidget {
children: [
if (icon != null)
Padding(
- padding: text.isNotEmpty ? EdgeInsets.only(right: 8.w, left: 8.w) : EdgeInsets.zero,
+ padding: text.isNotEmpty ? EdgeInsets.only(right: 4.w, left: 4.w) : EdgeInsets.zero,
child: Utils.buildSvgWithAssets(icon: icon!, iconColor: iconColor, isDisabled: isDisabled, width: iconS, height: iconS),
),
Visibility(
diff --git a/lib/widgets/common_bottom_sheet.dart b/lib/widgets/common_bottom_sheet.dart
index 4cfde1b..1f8593a 100644
--- a/lib/widgets/common_bottom_sheet.dart
+++ b/lib/widgets/common_bottom_sheet.dart
@@ -42,13 +42,13 @@ class BottomSheetUtils{
Future _showReminderBottomSheet(BuildContext providedContext, DateTime dateTime, String doctorName, String eventId, String appoDateFormatted, String appoTimeFormatted,
{required Function onSuccess, String? title, String? description, Function(int)? onMultiDateSuccess, bool? isMultiAllowed}) async {
- showCommonBottomSheetWithoutHeight(providedContext, title: LocaleKeys.setTimerOfReminder.tr(), child: PrescriptionReminderView(
+ showCommonBottomSheetWithoutHeight(providedContext, title: LocaleKeys.setTimerOfReminder.tr(context: providedContext), child: PrescriptionReminderView(
setReminder: (int value) async {
if (!isMultiAllowed!) {
if (onMultiDateSuccess == null) {
CalenderUtilsNew calendarUtils = CalenderUtilsNew.instance;
await calendarUtils.createOrUpdateEvent(
- title: title ?? LocaleKeys.youHaveAppointmentWithDr.tr() + doctorName,
+ title: title ?? LocaleKeys.youHaveAppointmentWithDr.tr(context: providedContext) + doctorName,
description: description ?? "At " + appoDateFormatted + " " + appoTimeFormatted,
scheduleDateTime: dateTime,
eventId: eventId,
diff --git a/lib/widgets/expandable_list_widget.dart b/lib/widgets/expandable_list_widget.dart
index b948299..db4e398 100644
--- a/lib/widgets/expandable_list_widget.dart
+++ b/lib/widgets/expandable_list_widget.dart
@@ -282,9 +282,9 @@ class ExpandableListTheme {
dividerColor: dividerColor ?? Colors.grey.shade300,
defaultTrailingIcon: defaultTrailingIcon ??
Icon(Icons.keyboard_arrow_down, color: Colors.black, size: 24),
- itemPadding: itemPadding ?? const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
- contentPadding: contentPadding ?? const EdgeInsets.only(left: 16.0, right: 16.0, bottom: 16.0),
- leadingSpacing: leadingSpacing ?? 12.0,
+ itemPadding: itemPadding ?? EdgeInsets.symmetric(horizontal: 16.w, vertical: 12.h),
+ contentPadding: contentPadding ?? EdgeInsets.only(left: 16.w, right: 16.w, bottom: 16.h),
+ leadingSpacing: leadingSpacing ?? 12.w,
);
}
}
diff --git a/lib/widgets/input_widget.dart b/lib/widgets/input_widget.dart
index 9f101d4..ad2a579 100644
--- a/lib/widgets/input_widget.dart
+++ b/lib/widgets/input_widget.dart
@@ -153,10 +153,18 @@ class TextInputWidget extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- _buildLabelText(labelColor).paddingOnly(right: (appState.getLanguageCode() == "ar" ? 10 : 0)),
+ _buildLabelText(labelColor).paddingOnly(
+ right: (appState.getLanguageCode() == "ar" ? 10 : 0),
+ left: (appState.getLanguageCode() == "en" ? 10 : 0),
+ ),
Row(
children: [
- Expanded(child: _buildTextField(context)),
+ Expanded(
+ child: _buildTextField(context).paddingOnly(
+ right: (appState.getLanguageCode() == "ar" ? 10 : 0),
+ left: (appState.getLanguageCode() == "en" ? 10 : 0),
+ ),
+ )
],
),
],
@@ -191,7 +199,7 @@ class TextInputWidget extends StatelessWidget {
return Container(
height: 40.h,
width: 40.h,
- margin: EdgeInsets.only(right: 10.h),
+ // margin: EdgeInsets.symmetric(horizontal: 10.w),
padding: EdgeInsets.all(8.h),
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
borderRadius: 12.r,
@@ -204,7 +212,7 @@ class TextInputWidget extends StatelessWidget {
final AppState appState = getIt.get();
return Container(
height: 40.h,
- width: 40.h,
+ width: 40.w,
margin: EdgeInsets.zero,
padding: EdgeInsets.all(8.h),
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(borderRadius: 12.r, color: AppColors.whiteColor),