diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 0e1749d6..fef05b1a 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -39,7 +39,6 @@
-
@@ -52,7 +51,7 @@
-
+
diff --git a/assets/images/png/ambulance_section.png b/assets/images/png/ambulance_section.png
new file mode 100644
index 00000000..62ca1716
Binary files /dev/null and b/assets/images/png/ambulance_section.png differ
diff --git a/assets/images/png/rrt_section.png b/assets/images/png/rrt_section.png
new file mode 100644
index 00000000..b28d5993
Binary files /dev/null and b/assets/images/png/rrt_section.png differ
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index eaf844e7..5df2dcbd 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -69,7 +69,7 @@
"date": "التاريخ",
"time": "الوقت",
"pendingPayment": "معلق للدفع",
- "payNow": "ادفع الآن",
+ "payNow": "الدفع",
"viewQR": "عرض رمز الاستجابة السريعة",
"instruction": "تعليمات",
"livecare": "لايف كير",
@@ -173,9 +173,9 @@
"emailSentError": "خطأ في إرسال البريد الإلكتروني",
"close": "إغلاق",
"closeIt": "أغلق",
- "booked": "محجوز",
+ "booked": "تم الحجز",
"confirmed": "مؤكد",
- "arrived": "وصل",
+ "arrived": " تم الوصول",
"payNowBookSuccess": "ادفع الآن عبر تطبيق الحبيب",
"payNowBookSuccesstext1": "ادفع الآن باستخدام خدمة الدفع عبر الإنترنت من بوابات الدفع الآمنة",
"payNowBookSuccesstext2": "يمكنك أيضًا الدفع لاحقًا عبر الدفع الإلكتروني أو في المستشفى.",
@@ -276,7 +276,7 @@
"parkingDescription": "خدمة المواقف هي لك لمسح موقع السيارة حتى تتمكن من العثور عليها بسهولة عند مغادرتك. انقر على زر (مسح الموقف) لحفظ موقع الموقف، ثم سيظهر زر (عرض موقفي) لإظهار الطريق إلى الموقف. إذا كنت ترغب في إعادة مسح موقف السيارة QR فقط انقر على (مسح بياناتي).",
"appointments": "المواعيد",
"all2": "الكل",
- "checkinOption": "تسجيل الوصول",
+ "checkinOption": "تسجيل الحضور",
"readBarcode": "قراءة الكود",
"showMyPark": "عرض الموقف",
"clearMyData": "امسح البيانات",
@@ -298,7 +298,7 @@
"radiology": "الأشعة",
"radiologySubtitle": "النتيجة",
"lab": "المختبر",
- "labSubtitle": "النتائج",
+ "labSubtitle": "نتائج",
"medicines": "الأدوية",
"medicinesSubtitle": "الوصفات",
"vitalSigns": "علامات حيوية",
@@ -314,9 +314,11 @@
"myMedicalSubtitle": "الأدوية",
"myDoctor": "أطبائي",
"myDoctorSubtitle": "القائمة",
+ "myDoctorSubtitle2": "قائمة",
"eye": "العين",
"eyeSubtitle": "القياس",
"insurance": "التأمين",
+ "insurance2": "تأمين",
"insuranceSubtitle": "البطاقة",
"updateInsurance": "تحديث",
"updateInsuranceSubtitle": "التأمين",
@@ -331,6 +333,7 @@
"monthly": "شهري",
"monthlySubtitle": "التقرير",
"sick": "مريض",
+ "sick2": "المريضة",
"sickSubtitle": "الإجازات",
"myBalance": "رصيدي",
"myBalanceSubtitle": "الرصيد",
@@ -493,9 +496,11 @@
"refferalTitle": "إحالة إلكترونية",
"refferalSubTitle": "الخدمة",
"healthCare": "الرعاية الصحية",
- "emergency": "حالة طوارئ",
+ "emergency": "طوارئ",
+ "emergency2": "الطوارئ",
"erservices": "خدمات الطوارئ",
"services2": "الخدمات",
+ "services3": "خدمات",
"cantSeeProfile": "لرؤية ملفك الطبي، يرجى تسجيل الدخول أو التسجيل الآن",
"loginRegisterNow": "تسجيل الدخول أو التسجيل الآن",
"hmgPharmacy": "صيدلية الحبيب",
@@ -768,6 +773,7 @@
"erConsultation": "تتيح لك هذه الخدمة إجراء استشارة افتراضية عبر الإنترنت عبر مكالمة فيديو مباشرة مع الطبيب من أي مكان وفي أي وقت.",
"myInvoice": "القائمة",
"invoiceList": "فواتيري",
+ "invoiceList2": "فواتيري",
"allInvoices": "كل الفواتير",
"hospitals": "المستشفيات",
"clinics": "العيادات",
@@ -891,7 +897,7 @@
"to": "إلى",
"startDate": "تاريخ البدء",
"endDate": "تاريخ الانتهاء",
- "walkin": "زيارة بدون موعد",
+ "walkin": "بدون موعد",
"laserClinic": "عيادة الليزر",
"continueString": "يكمل",
"covid_info": "تجري مستشفيات د. سليمان الحبيب فحص فيروس كورونا المستجد وتصدر شهادات السفر على مدار الساعة، طوال أيام الأسبوع، وبسرعة ودقة عالية. يمكن للراغبين في الاستفادة من هذه الخدمة زيارة أحد فروع مستشفيات د. سليمان الحبيب وإجراء فحص كورونا خلال بضع دقائق والحصول على النتائج خلال عدة ساعات خدمة فحص فيروس كورونا Covid 19 بتقنية PCR للكشف عن الفيروس وفقاً لأعلى المعايير العالمية وبأحدث أجهزة RT-PCR عالية الدقة (GeneXpert الأمريكي وغيره)، وهي طرق معتمدة من قبل هيئة الغذاء والدواء وكذلك من قبل المركز السعودي للوقاية من الأمراض المُعدية",
@@ -934,7 +940,7 @@
"immediateConsultation": "استشارة فورية",
"scheduledConsultation": "استشارة مجدولة",
"pharmaLiveCare": "لايف كير الصيدلية",
- "notSureHelpMeChooseClinic": "غير متأكد؟ ساعدني في اختيار عيادة!",
+ "notSureHelpMeChooseClinic": "هل تريد مساعدة في اختيار العياة؟",
"mentionYourSymptomsAndFindDoctors": "اذكر أعراضك واعثر على قائمة الأطباء وفقاً لذلك",
"immediateService": "خدمة فورية",
"noNeedToWaitGetMedicalConsultation": "لا حاجة للانتظار، ستحصل على استشارة طبية فورية عبر مكالمة فيديو",
@@ -998,7 +1004,7 @@
"processingCheckIn": "جاري معالجة تسجيل الحضور...",
"bookingWaitingAppointment": "جاري حجز موعد الانتظار، يرجى الانتظار...",
"enterValidIDorIqama": "يرجى إدخال رقم هوية وطنية أو رقم ملف صالح",
- "selectAppointment": "حدد الموعد",
+ "selectAppointment": "اختر الموعد",
"rebookSameDoctor": "أعد الحجز مع نفس الطبيب",
"queueing": "قائمة الانتظار",
"inQueue": "في قائمة الانتظار",
@@ -1294,7 +1300,7 @@
"rebook": "إعادة الحجز",
"noOphthalmologyAppointments": "لم يتم العثور على أي مواعيد في قسم طب العيون...",
"noVitalSignsRecordedYet": "لا توجد علامات حيوية مسجلة بعد",
- "appointmentsAndVisits": "المواعيد والزيارات",
+ "appointmentsAndVisits": "المواعيد",
"labAndRadiology": "المختبر والأشعة",
"activeMedicationsAndPrescriptions": "الوصفات الطبية",
"allPrescriptions": "جميع الوصفات",
@@ -1470,6 +1476,7 @@
"distanceDescription": "المسافة المقطوعة على مدار اليوم",
"overview": "نظرة عامة",
"details": "التفاصيل",
+ "details2": "تفاصيل",
"healthy": "صحي",
"warning": "تحذير",
"vitalSignDetails": "تفاصيل العلامات الحيوية",
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index 9d685cb3..ca64e0a9 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -69,7 +69,7 @@
"date": "Date",
"time": "Time",
"pendingPayment": "Pending for payment",
- "payNow": "Pay Now",
+ "payNow": "Payment",
"viewQR": "View QR Code",
"instruction": "Instructions",
"livecare": "LiveCare",
@@ -311,6 +311,7 @@
"myMedicalSubtitle": "Medications",
"myDoctor": "My Doctors",
"myDoctorSubtitle": "List",
+ "myDoctorSubtitle2": "List",
"eye": "Eye",
"eyeSubtitle": "Measurement",
"insurance": "Insurance",
@@ -328,6 +329,7 @@
"monthly": "Monthly",
"monthlySubtitle": "Report",
"sick": "Sick",
+ "sick2": "Sick",
"sickSubtitle": "Leaves",
"myBalance": "My Balance",
"myBalanceSubtitle": "Credit",
@@ -485,8 +487,10 @@
"refferalSubTitle": "Service",
"healthCare": "Health Care",
"emergency": "Emergency",
+ "emergency2": "Emergency",
"erservices": "Emergency",
"services2": "Services",
+ "services3": "Services",
"cantSeeProfile": "To view your medical profile, please log in or register now",
"loginRegisterNow": "Login or Register Now",
"hmgPharmacy": "HMG Pharmacy",
@@ -758,6 +762,7 @@
"erConsultation": "This service allows you to make an online virtual consultation via video call directly with the doctor from anywhere at any time.",
"myInvoice": "List",
"invoiceList": "My Invoice",
+ "invoiceList2": "My Invoice",
"allInvoices": "All Invoices",
"hospitals": "Hospitals",
"clinics": "Clinics",
@@ -1460,6 +1465,7 @@
"distanceDescription": "Distance covered throughout the day",
"overview": "Overview",
"details": "Details",
+ "details2": "Details",
"healthy": "Healthy",
"warning": "Warning",
"vitalSignDetails": "Vital Sign Details",
diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
index 2b5abbe9..ef1cd36a 100644
--- a/lib/core/api_consts.dart
+++ b/lib/core/api_consts.dart
@@ -205,6 +205,9 @@ class ApiConsts {
static String updateDiabeticResult = 'Services/Patients.svc/REST/Patient_UpdateDiabtecResult';
static String deactivateDiabeticStatus = 'Services/Patients.svc/REST/Patient_DeactivateDiabeticStatus';
static String sendAverageBloodSugarReport = 'Services/Notifications.svc/REST/SendAverageBloodSugarReport';
+ static String averageBloodSugarReportDownload = 'Services/Notifications.svc/REST/SendAverageBloodSugarReportDownload';
+ static String averageWeightReportDownload = 'Services/Notifications.svc/REST/SendAverageBodyWeightReportDownload';
+ static String averageBloodPressureReportDownload = 'Services/Notifications.svc/REST/SendAverageBloodPressureReportDownload';
// Blood Pressure
static String getBloodPressureResultAverage = 'Services/Patients.svc/REST/Patient_GetBloodPressureResultAverage';
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index eae42b71..743505b9 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -402,6 +402,11 @@ class AppAssets {
static const String bmiFullBody = '$pngBasePath/bmi_image_1.png';
static const String bmiFullBodyFemale = '$pngBasePath/female_bmi.png';
static const String defaultMEP = '$pngBasePath/default_MEP.png';
+
+
+
+ static const String ambulance_section = '$pngBasePath/ambulance_section.png';
+ static const String rrt_section = '$pngBasePath/rrt_section.png';
}
class AppAnimations {
diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index bc4b82c0..615641b5 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -820,6 +820,28 @@ class Utils {
// return Image.asset(icon, width: width, height: height, fit: fit, );
}
+ static Widget buildImgWithAssetsWithBorderRadius({
+ required String icon,
+ Color? iconColor,
+ bool isDisabled = false,
+ double? width,
+ double? height,
+ BoxFit fit = BoxFit.cover,
+ double? border,
+ double? borderRadius,
+ }) {
+ final iconH = height ?? 24.h;
+ final iconW = width ?? 24.w;
+ return Container(
+ width: iconW, height: iconH,
+ decoration: BoxDecoration(
+ border: border != null ? Border.all(color: AppColors.whiteColor, width: border) : null,
+ borderRadius: borderRadius != null ? BorderRadius.circular(borderRadius ?? 12.r) : null,
+ image: DecorationImage(image: AssetImage(icon,), fit: fit)
+ ),
+ );
+ }
+
/// Widget to build an SVG from network
static Widget buildImgWithNetwork({
required String url,
diff --git a/lib/features/emergency_services/emergency_services_view_model.dart b/lib/features/emergency_services/emergency_services_view_model.dart
index c8a16455..255f4892 100644
--- a/lib/features/emergency_services/emergency_services_view_model.dart
+++ b/lib/features/emergency_services/emergency_services_view_model.dart
@@ -274,7 +274,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
void navigateTOAmbulancePage() {
placeValueInController();
- getProjects();
flushData();
selectedFacility = FacilitySelection.ALL;
@@ -282,6 +281,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
locationUtils!.getLocation(
isShowConfirmDialog: true,
onSuccess: (position) {
+ getProjects();
updateBottomSheetState(BottomSheetType.FIXED);
navServices.push(
CustomPageRoute(page: CallAmbulancePage(), direction: AxisDirection.down),
@@ -310,17 +310,21 @@ class EmergencyServicesViewModel extends ChangeNotifier {
}
void updateBottomSheetState(BottomSheetType sheetType) {
- if (sheetType == BottomSheetType.EXPANDED && selectedHospital == null) {
- dialogService.showErrorBottomSheet(message: LocaleKeys.selectHospital.tr());
- return;
- }
+ // if (sheetType == BottomSheetType.EXPANDED && selectedHospital == null) {
+ // dialogService.showErrorBottomSheet(message: LocaleKeys.selectHospital.tr());
+ // return;
+ // }
bottomSheetType = sheetType;
- if (sheetType == BottomSheetType.EXPANDED) {
- clearAppointmentData();
- }
+ // if (sheetType == BottomSheetType.FIXED) {
+ // clearAppointmentData();
+ // }
notifyListeners();
}
+ void showError(String message) {
+ dialogService.showErrorBottomSheet(message: message);
+ }
+
void setIsGMSAvailable(bool value) {
notifyListeners();
}
@@ -732,6 +736,10 @@ class EmergencyServicesViewModel extends ChangeNotifier {
}
FutureOr submitAmbulanceRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction) async {
+ if (false == haveAnAppointment && null == selectedHospital) {
+ dialogService.showErrorBottomSheet(message: LocaleKeys.selectHospital.tr());
+ return;
+ }
PatientER_RC request = createRequest(result, place, placePrediction);
navServices.push(CustomPageRoute(page: RequestingServicesPage()));
@@ -802,19 +810,19 @@ class EmergencyServicesViewModel extends ChangeNotifier {
request.patientERTransportationMethod = selectedTransportOption;
transportationDetails.pickupUrgency = 1;
switch (callingPlace) {
- case AmbulanceCallingPlace.FROM_HOSPITAL:
- transportationDetails.dropoffLatitude = selectedHospital!.latitude;
- transportationDetails.dropoffLongitude = selectedHospital!.longitude;
- transportationDetails.dropoffLocationName = selectedHospital!.name;
+ case AmbulanceCallingPlace.TO_HOSPITAL:
+ transportationDetails.dropoffLatitude = selectedHospital?.latitude;
+ transportationDetails.dropoffLongitude = selectedHospital?.longitude;
+ transportationDetails.dropoffLocationName = selectedHospital?.name;
transportationDetails.pickupLatitude = ((result?.geometry.location.lat) ?? place?.lat)?.toStringAsFixed(6);
transportationDetails.pickupLongitude = ((result?.geometry.location.lng) ?? place?.lng)?.toStringAsFixed(6);
transportationDetails.pickupLocationName = result?.formattedAddress ?? placePrediction?.description;
transportationDetails.direction = 1;
break;
- case AmbulanceCallingPlace.TO_HOSPITAL:
- transportationDetails.pickupLatitude = selectedHospital!.latitude;
- transportationDetails.pickupLongitude = selectedHospital!.longitude;
- transportationDetails.pickupLocationName = selectedHospital!.name;
+ case AmbulanceCallingPlace.FROM_HOSPITAL:
+ transportationDetails.pickupLatitude = selectedHospital?.latitude;
+ transportationDetails.pickupLongitude = selectedHospital?.longitude;
+ transportationDetails.pickupLocationName = selectedHospital?.name;
transportationDetails.dropoffLatitude = ((result?.geometry.location.lat) ?? place?.lat)?.toStringAsFixed(6);
transportationDetails.dropoffLongitude = ((result?.geometry.location.lng) ?? place?.lng)?.toStringAsFixed(6);
transportationDetails.dropoffLocationName = result?.formattedAddress ?? placePrediction?.description;
diff --git a/lib/features/health_trackers/health_trackers_repo.dart b/lib/features/health_trackers/health_trackers_repo.dart
index 2a64fc46..52bc40f6 100644
--- a/lib/features/health_trackers/health_trackers_repo.dart
+++ b/lib/features/health_trackers/health_trackers_repo.dart
@@ -15,6 +15,9 @@ abstract class HealthTrackersRepo {
/// Get blood sugar results (week, month, year).
Future>> getDiabeticResults();
+ Future>> downloadBloodSugarReport();
+ Future>> downloadWeightReport();
+ Future>> downloadBloodPressureReport();
/// Add new blood sugar result.
Future>> addDiabeticResult({
@@ -211,6 +214,114 @@ class HealthTrackersRepoImp implements HealthTrackersRepo {
}
}
+ @override
+ Future>> downloadBloodSugarReport() async {
+ try {
+ GenericApiModel? apiResponse;
+ Failure? failure;
+
+ await apiClient.post(
+ ApiConsts.averageBloodSugarReportDownload,
+ body: {},
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ dynamic pdf = response['ReportPDFContent'];
+
+ apiResponse = GenericApiModel(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: errorMessage,
+ data: pdf,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
+
+
+ @override
+ Future>> downloadWeightReport() async {
+ try {
+ GenericApiModel? apiResponse;
+ Failure? failure;
+
+ await apiClient.post(
+ ApiConsts.averageWeightReportDownload,
+ body: {},
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ dynamic pdf = response['ReportPDFContent'];
+
+ apiResponse = GenericApiModel(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: errorMessage,
+ data: pdf,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
+ @override
+ Future>> downloadBloodPressureReport() async {
+ try {
+ GenericApiModel? apiResponse;
+ Failure? failure;
+
+ await apiClient.post(
+ ApiConsts.averageBloodPressureReportDownload,
+ body: {},
+ onFailure: (error, statusCode, {messageStatus, failureType}) {
+ failure = failureType;
+ },
+ onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+ try {
+ dynamic pdf = response['ReportPDFContent'];
+
+ apiResponse = GenericApiModel(
+ messageStatus: messageStatus,
+ statusCode: statusCode,
+ errorMessage: errorMessage,
+ data: pdf,
+ );
+ } catch (e) {
+ failure = DataParsingFailure(e.toString());
+ }
+ },
+ );
+
+ if (failure != null) return Left(failure!);
+ if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+ return Right(apiResponse!);
+ } catch (e) {
+ return Left(UnknownFailure(e.toString()));
+ }
+ }
+
@override
Future>> addDiabeticResult({
required String bloodSugarDateChart,
diff --git a/lib/features/health_trackers/health_trackers_view_model.dart b/lib/features/health_trackers/health_trackers_view_model.dart
index ab54f595..8f7e0ffa 100644
--- a/lib/features/health_trackers/health_trackers_view_model.dart
+++ b/lib/features/health_trackers/health_trackers_view_model.dart
@@ -1,6 +1,8 @@
import 'dart:developer';
+import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
+import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/features/health_trackers/health_trackers_repo.dart';
import 'package:hmg_patient_app_new/features/health_trackers/models/blood_pressure/blood_pressure_result.dart';
import 'package:hmg_patient_app_new/features/health_trackers/models/blood_pressure/month_blood_pressure_result_average.dart';
@@ -14,7 +16,9 @@ import 'package:hmg_patient_app_new/features/health_trackers/models/weight/month
import 'package:hmg_patient_app_new/features/health_trackers/models/weight/week_weight_measurement_result_average.dart';
import 'package:hmg_patient_app_new/features/health_trackers/models/weight/weight_measurement_result.dart';
import 'package:hmg_patient_app_new/features/health_trackers/models/weight/year_weight_measurement_result_average.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/services/error_handler_service.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
class HealthTrackersViewModel extends ChangeNotifier {
HealthTrackersRepo healthTrackersRepo;
@@ -425,6 +429,91 @@ class HealthTrackersViewModel extends ChangeNotifier {
}
}
+
+ Future downloadBloodSugerReport({
+ Function(String)? onSuccess,
+ }) async {
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.generatingReport.tr());
+ try {
+ final result = await healthTrackersRepo.downloadBloodSugarReport();
+ LoaderBottomSheet.hideLoader();
+ bool success = false;
+
+ result.fold(
+ (failure) {
+ errorHandlerService.handleError(failure: failure);
+ },
+ (apiModel) {
+ success = true;
+ if (onSuccess != null) onSuccess(apiModel.data??"");
+ },
+ );
+
+ notifyListeners();
+
+ return success;
+ } catch (e) {
+ log('Error in sendWeightReportByEmail: $e');
+ return false;
+ }
+ }
+
+ Future downloadBloodPressureReport({
+ Function(String)? onSuccess,
+ }) async {
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.generatingReport.tr());
+ try {
+ final result = await healthTrackersRepo.downloadBloodPressureReport();
+ LoaderBottomSheet.hideLoader();
+ bool success = false;
+
+ result.fold(
+ (failure) {
+ errorHandlerService.handleError(failure: failure);
+ },
+ (apiModel) {
+ success = true;
+ if (onSuccess != null) onSuccess(apiModel.data??"");
+ },
+ );
+
+ notifyListeners();
+
+ return success;
+ } catch (e) {
+ log('Error in sendWeightReportByEmail: $e');
+ return false;
+ }
+ }
+ Future downloadWeightReport({
+ Function(String)? onSuccess,
+ }) async {
+ LoaderBottomSheet.showLoader(loadingText: LocaleKeys.generatingReport.tr());
+ try {
+ final result = await healthTrackersRepo.downloadWeightReport();
+ LoaderBottomSheet.hideLoader();
+ bool success = false;
+
+ result.fold(
+ (failure) {
+ errorHandlerService.handleError(failure: failure);
+ },
+ (apiModel) {
+ success = true;
+ if (onSuccess != null) onSuccess(apiModel.data??"");
+ },
+ );
+
+ notifyListeners();
+
+ return success;
+ } catch (e) {
+ log('Error in sendWeightReportByEmail: $e');
+ return false;
+ }
+ }
+
+
// ==================== BLOOD PRESSURE TRACKING METHODS ====================
/// Fetch blood pressure averages and results
@@ -1118,4 +1207,30 @@ class HealthTrackersViewModel extends ChangeNotifier {
diastolicController.dispose();
super.dispose();
}
+
+ Future downloadReport(HealthTrackerTypeEnum trackerType, {required Function(dynamic report) onSuccess}) async {
+ switch (trackerType) {
+ case HealthTrackerTypeEnum.bloodSugar:
+ await downloadBloodSugerReport(
+ onSuccess : (value){
+ onSuccess(value);
+ }
+ );
+ break;
+ case HealthTrackerTypeEnum.bloodPressure:
+ await downloadBloodPressureReport(
+ onSuccess : (value){
+ onSuccess(value);
+ }
+ );
+ break;
+ case HealthTrackerTypeEnum.weightTracker:
+ await downloadWeightReport(
+ onSuccess : (value){
+ onSuccess(value);
+ }
+ );
+ break;
+ }
+ }
}
diff --git a/lib/features/immediate_livecare/immediate_livecare_view_model.dart b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
index 6613b481..e61292d6 100644
--- a/lib/features/immediate_livecare/immediate_livecare_view_model.dart
+++ b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
@@ -39,6 +39,7 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
MyAppointmentsViewModel myAppointmentsViewModel;
List immediateLiveCareClinicsList = [];
+ List mainLiveCareClinicList = [];
bool isImmediateLiveCareClinicsLoading = false;
int liveCareSelectedCallType = 0; // 1- Video, 2- Audio, 3- Phone
late GetLiveCareClinicListResponseModel immediateLiveCareSelectedClinic;
@@ -61,6 +62,7 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
initImmediateLiveCare() {
_appState = getIt();
immediateLiveCareClinicsList = [];
+ mainLiveCareClinicList = [];
isImmediateLiveCareClinicsLoading = true;
liveCareSelectedCallType = 0; // 1- Video, 2- Audio, 3- Phone
immediateLiveCareSelectedClinic = GetLiveCareClinicListResponseModel();
@@ -90,9 +92,11 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
if (apiResponse.messageStatus == 2) {
// dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
} else if (apiResponse.messageStatus == 1) {
- immediateLiveCareClinicsList = apiResponse.data!;
+ mainLiveCareClinicList = apiResponse.data!;
- immediateLiveCareClinicsList.sort((a, b) => b.isOnline!.compareTo(a.isOnline!));
+ mainLiveCareClinicList.sort((a, b) => b.isOnline!.compareTo(a.isOnline!));
+ immediateLiveCareClinicsList.clear();
+ immediateLiveCareClinicsList.addAll(mainLiveCareClinicList);
isImmediateLiveCareClinicsLoading = false;
notifyListeners();
@@ -103,6 +107,18 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
},
);
}
+ void filterClinic(String query){
+ if(query.isEmpty){
+ immediateLiveCareClinicsList.clear();
+ immediateLiveCareClinicsList.addAll(mainLiveCareClinicList);
+ }else{
+
+ // bool isArabic = getIt.get().isArabic();
+ immediateLiveCareClinicsList = mainLiveCareClinicList.where((clinic) => clinic.serviceName!.toLowerCase().contains(query.toLowerCase()) || clinic.serviceNameN!.toLowerCase().contains(query.toLowerCase()
+ )).toList();
+ }
+ notifyListeners();
+ }
Future getLiveCareImmediateAppointmentFees({Function(dynamic)? onSuccess, Function(String)? onError}) async {
final result =
diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart
index 103da04c..64577cbb 100644
--- a/lib/generated/locale_keys.g.dart
+++ b/lib/generated/locale_keys.g.dart
@@ -315,9 +315,11 @@ abstract class LocaleKeys {
static const myMedicalSubtitle = 'myMedicalSubtitle';
static const myDoctor = 'myDoctor';
static const myDoctorSubtitle = 'myDoctorSubtitle';
+ static const myDoctorSubtitle2 = 'myDoctorSubtitle2';
static const eye = 'eye';
static const eyeSubtitle = 'eyeSubtitle';
static const insurance = 'insurance';
+ static const insurance2 = 'insurance2';
static const insuranceSubtitle = 'insuranceSubtitle';
static const updateInsurance = 'updateInsurance';
static const updateInsuranceSubtitle = 'updateInsuranceSubtitle';
@@ -332,6 +334,7 @@ abstract class LocaleKeys {
static const monthly = 'monthly';
static const monthlySubtitle = 'monthlySubtitle';
static const sick = 'sick';
+ static const sick2 = 'sick2';
static const sickSubtitle = 'sickSubtitle';
static const myBalance = 'myBalance';
static const myBalanceSubtitle = 'myBalanceSubtitle';
@@ -495,8 +498,10 @@ abstract class LocaleKeys {
static const refferalSubTitle = 'refferalSubTitle';
static const healthCare = 'healthCare';
static const emergency = 'emergency';
+ static const emergency2 = 'emergency2';
static const erservices = 'erservices';
static const services2 = 'services2';
+ static const services3 = 'services3';
static const cantSeeProfile = 'cantSeeProfile';
static const loginRegisterNow = 'loginRegisterNow';
static const hmgPharmacy = 'hmgPharmacy';
@@ -767,6 +772,7 @@ abstract class LocaleKeys {
static const erConsultation = 'erConsultation';
static const myInvoice = 'myInvoice';
static const invoiceList = 'invoiceList';
+ static const invoiceList2 = 'invoiceList2';
static const allInvoices = 'allInvoices';
static const hospitals = 'hospitals';
static const clinics = 'clinics';
@@ -1465,6 +1471,7 @@ abstract class LocaleKeys {
static const distanceDescription = 'distanceDescription';
static const overview = 'overview';
static const details = 'details';
+ static const details2 = 'details2';
static const healthy = 'healthy';
static const warning = 'warning';
static const vitalSignDetails = 'vitalSignDetails';
diff --git a/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart b/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
index 870c8ad8..16c7d421 100644
--- a/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
+++ b/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
@@ -3,6 +3,7 @@ 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_assets.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/utils/size_utils.dart';
@@ -22,6 +23,7 @@ import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/widge
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/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/input_widget.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:provider/provider.dart';
@@ -68,6 +70,34 @@ class _SelectImmediateLiveCareClinicPageState extends State(builder: (context, immediateLiveCareVM, child) {
return Column(
children: [
+ TextInputWidget(
+ labelText: LocaleKeys.search.tr(context: context),
+ hintText: LocaleKeys.clinicName.tr(context: context),
+ controller: searchEditingController,
+ isEnable: true,
+ prefix: null,
+ autoFocus: false,
+ isBorderAllowed: false,
+ keyboardType: TextInputType.text,
+ focusNode: textFocusNode,
+ suffix: searchEditingController.text.isNotEmpty
+ ? GestureDetector(
+ onTap: () {
+ searchEditingController.clear();
+ immediateLiveCareVM.filterClinic("");
+ textFocusNode.unfocus();
+ },
+ child: Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon, width: 20.h, height: 20.h, fit: BoxFit.scaleDown),
+ )
+ : null,
+ onChange: (value) {
+ immediateLiveCareVM.filterClinic(value!);
+ },
+ padding: EdgeInsets.symmetric(
+ vertical: ResponsiveExtension(10).h,
+ horizontal: ResponsiveExtension(15).h,
+ ),
+ ),
ListView.separated(
padding: EdgeInsets.only(top: 16.h),
shrinkWrap: true,
diff --git a/lib/presentation/emergency_services/call_ambulance/call_ambulance_page.dart b/lib/presentation/emergency_services/call_ambulance/call_ambulance_page.dart
index 55958048..3ac19814 100644
--- a/lib/presentation/emergency_services/call_ambulance/call_ambulance_page.dart
+++ b/lib/presentation/emergency_services/call_ambulance/call_ambulance_page.dart
@@ -53,8 +53,8 @@ class CallAmbulancePage extends StatelessWidget {
ExpandableBottomSheet(
bottomSheetType: context.watch().bottomSheetType,
children: {
- BottomSheetType.EXPANDED: ExpanedBottomSheet(context),
- BottomSheetType.FIXED: FixedBottomSheet(context),
+ BottomSheetType.EXPANDED: ExpandedBottomSheet(context),
+ BottomSheetType.FIXED: pickUpDetailAndAppointementSection(context),
},
),
],
@@ -92,7 +92,7 @@ class CallAmbulancePage extends StatelessWidget {
);
}
- Widget FixedBottomSheet(BuildContext context) {
+ Widget ExpandedBottomSheet(BuildContext context) {
return GestureDetector(
onVerticalDragUpdate: (details) {
// if(details.delta.dy<0){
@@ -172,7 +172,11 @@ class CallAmbulancePage extends StatelessWidget {
CustomButton(
text: LocaleKeys.selectDetails.tr(context: context),
onPressed: () {
- context.read().updateBottomSheetState(BottomSheetType.EXPANDED);
+ LocationViewModel locationViewModel = context.read();
+ GeocodeResponse? response = locationViewModel.geocodeResponse;
+ PlaceDetails? placeDetails = locationViewModel.placeDetails;
+ PlacePrediction? placePrediction = locationViewModel.selectedPrediction;
+ context.read().submitAmbulanceRequest(response?.results.first, placeDetails, placePrediction);
})
],
).paddingOnly(top: 24.h, bottom: 32.h, left: 24.h, right: 24.h),
@@ -185,7 +189,7 @@ class CallAmbulancePage extends StatelessWidget {
);
}
- Widget ExpanedBottomSheet(BuildContext context) {
+ Widget pickUpDetailAndAppointementSection(BuildContext context) {
return GestureDetector(
onVerticalDragUpdate: (details) {
if (details.delta.dy > 0) {
@@ -324,28 +328,34 @@ class CallAmbulancePage extends StatelessWidget {
)
],
),
+ if(AmbulanceCallingPlace.TO_HOSPITAL == context.read().callingPlace)
+ Row(
+ children: [
+ hospitalAndPickUpItemContent(
+ title: LocaleKeys.appointment.tr(context: context),
+ subTitle: LocaleKeys.haveAnyAppointment.tr(context: context),
+ leadingIcon: AppAssets.appointment_calendar_icon,
+ ),
+ CustomSwitch(
+ value: context.watch().haveAnAppointment,
+ onChanged: (value) async {
+ // if (value) {
+ // openAppointmentList(context);
+ // }
+ await context.read().updateAppointment(value);
+ if (context.read().appointments?.isNotEmpty == true) {
+ openAppointmentList(context);
+ }
+ },
+ )
+ ],
+ ),
- Row(
- children: [
- hospitalAndPickUpItemContent(
- title: LocaleKeys.appointment.tr(context: context),
- subTitle: LocaleKeys.haveAnyAppointment.tr(context: context),
- leadingIcon: AppAssets.appointment_calendar_icon,
- ),
- CustomSwitch(
- value: context.watch().haveAnAppointment,
- onChanged: (value) async {
- // if (value) {
- // openAppointmentList(context);
- // }
- await context.read().updateAppointment(value);
- if (context.read().appointments?.isNotEmpty == true) {
- openAppointmentList(context);
- }
- },
- )
- ],
- ),
+
+ // Visibility(
+ // visible: ,
+ // child:
+ // ),
],
).paddingAll(16.h),
);
@@ -460,12 +470,8 @@ class CallAmbulancePage extends StatelessWidget {
CustomButton(
text: LocaleKeys.submitRequest.tr(context: context),
onPressed: () {
- LocationViewModel locationViewModel = context.read();
- GeocodeResponse? response = locationViewModel.geocodeResponse;
- PlaceDetails? placeDetails = locationViewModel.placeDetails;
- PlacePrediction? placePrediction = locationViewModel.selectedPrediction;
- context.read().submitAmbulanceRequest(response?.results.first, placeDetails, placePrediction);
- })
+ context.read().updateBottomSheetState(BottomSheetType.EXPANDED);
+ })
],
).paddingOnly(top: 24.h, bottom: 12.h, left: 24.h, right: 24.h),
),
@@ -582,21 +588,24 @@ class CallAmbulancePage extends StatelessWidget {
}
hospitalField(BuildContext context) {
- return DecoratedBox(
- decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.h),
- child: Row(
- children: [
- hospitalAndPickUpItemContent(
- title: LocaleKeys.selectHospital.tr(context: context),
- subTitle: context.read().getSelectedHospitalName() ?? LocaleKeys.selectHospital.tr(context: context),
- leadingIcon: AppAssets.hospital,
- ),
- Utils.buildSvgWithAssets(icon: AppAssets.down_cheveron, width: 24.h, height: 24.h).paddingAll(16.h)
- ],
- ).onPress(() {
- showHospitalBottomSheet(context);
- }).paddingSymmetrical(
- 10.w, 12.h),
+ return Visibility(
+ visible: false == context.watch().haveAnAppointment,
+ child: DecoratedBox(
+ decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.h),
+ child: Row(
+ children: [
+ hospitalAndPickUpItemContent(
+ title: LocaleKeys.selectHospital.tr(context: context),
+ subTitle: context.read().getSelectedHospitalName() ?? LocaleKeys.selectHospital.tr(context: context),
+ leadingIcon: AppAssets.hospital,
+ ),
+ Utils.buildSvgWithAssets(icon: AppAssets.down_cheveron, width: 24.h, height: 24.h).paddingAll(16.h)
+ ],
+ ).onPress(() {
+ showHospitalBottomSheet(context);
+ }).paddingSymmetrical(
+ 10.w, 12.h),
+ ),
);
}
diff --git a/lib/presentation/emergency_services/call_ambulance/tracking_screen.dart b/lib/presentation/emergency_services/call_ambulance/tracking_screen.dart
index 0f4c587b..7c7f5db6 100644
--- a/lib/presentation/emergency_services/call_ambulance/tracking_screen.dart
+++ b/lib/presentation/emergency_services/call_ambulance/tracking_screen.dart
@@ -73,7 +73,10 @@ class TrackingScreen extends StatelessWidget {
child: SingleChildScrollView(
child: Column(
children: [
- animationSection(),
+ Padding(
+ padding: EdgeInsetsDirectional.only(top:16.h,start: 16.w,end: 16.w ),
+ child: animationSection(context),
+ ),
Column(
spacing: 16.h,
children: [orderStatus(context), orderTrackingId(context), contactSection()],
@@ -83,12 +86,12 @@ class TrackingScreen extends StatelessWidget {
);
}
- animationSection() {
+ animationSection(BuildContext context) {
switch (state) {
case OrderTrackingState.waitingForCall:
case OrderTrackingState.dispactched:
case OrderTrackingState.returning:
- return Lottie.asset(AppAnimations.ambulance, repeat: true, reverse: false, width: 260.h, height: 200.h);
+ return showImage(order != null ? AppAssets.ambulance_section : AppAssets.rrt_section, context);
case OrderTrackingState.ended:
return Lottie.asset(AppAnimations.checkmark, repeat: true, width: 260.h, height: 200.h);
case OrderTrackingState.failed:
@@ -489,6 +492,18 @@ class TrackingScreen extends StatelessWidget {
);
}
+ showImage(String imageUrl, BuildContext context) {
+ return Utils.buildImgWithAssetsWithBorderRadius(
+ icon: imageUrl,
+ iconColor: Colors.transparent,
+ width: MediaQuery.sizeOf(context).width,
+ height: 380.h,
+ borderRadius: 24.r,
+ border: 1.r/// did this as the function that is being called is wrongly coupled with the border radius and border, and in some cases like the ambulance and rrt section we don't need any
+ /// border or border radius
+ );
+ }
+
// Widget rrtOrderData() {
// return Row(
// spacing: 8.h,
diff --git a/lib/presentation/health_trackers/health_tracker_detail_page.dart b/lib/presentation/health_trackers/health_tracker_detail_page.dart
index 737a150f..28e035b0 100644
--- a/lib/presentation/health_trackers/health_tracker_detail_page.dart
+++ b/lib/presentation/health_trackers/health_tracker_detail_page.dart
@@ -27,6 +27,7 @@ import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/graph/custom_graph.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
+import 'package:open_filex/open_filex.dart';
import 'package:provider/provider.dart';
import 'package:shimmer/shimmer.dart';
@@ -1250,7 +1251,32 @@ class _HealthTrackerDetailPageState extends State {
return Scaffold(
backgroundColor: AppColors.bgScaffoldColor,
body: CollapsingListView(
- sendEmail: () async => onSendEmailPressed(context),
+ downloadReport: () async {
+
+
+
+ await context.read().downloadReport(widget.trackerType,
+ onSuccess: (report) async {
+
+ if (report.isEmpty) {}
+ String path = await Utils.createFileFromString(report, "pdf");
+ try {
+ OpenFilex.open(path);
+ } catch (ex) {
+ showCommonBottomSheetWithoutHeight(
+ context,
+ child: Utils.getErrorWidget(loadingText: "Cannot open file"),
+ callBackFunc: () {},
+ isFullScreen: false,
+ isCloseButtonVisible: true,
+ );
+ }
+ });
+
+
+
+ // .downloadBloodSugerReport();
+ },
title: _getPageTitle(),
bottomChild: Consumer(
builder: (context, viewModel, child) {
diff --git a/lib/presentation/home/data/landing_page_data.dart b/lib/presentation/home/data/landing_page_data.dart
index a60a7c18..fbf7043d 100644
--- a/lib/presentation/home/data/landing_page_data.dart
+++ b/lib/presentation/home/data/landing_page_data.dart
@@ -71,12 +71,12 @@ class LandingPageData {
),
];
- static List get getLoggedInServiceCardsList => [
+ List get getLoggedInServiceCardsList => [
ServiceCardData(
serviceName: "emergency",
icon: AppAssets.emergency_services_icon,
- title: LocaleKeys.emergency,
- subtitle: LocaleKeys.services2,
+ title: getIt.get().isArabic()?LocaleKeys.services3 :LocaleKeys.emergency2,
+ subtitle: getIt.get().isArabic()?LocaleKeys.emergency2:LocaleKeys.services3,
backgroundColor: AppColors.primaryRedColor,
iconColor: Colors.white,
textColor: Colors.white,
@@ -85,8 +85,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "lab_results",
icon: AppAssets.home_lab_result_icon,
- title: LocaleKeys.lab,
- subtitle: LocaleKeys.labSubtitle,
+ title: getIt.get().isArabic()?LocaleKeys.labSubtitle:LocaleKeys.lab,
+ subtitle: getIt.get().isArabic()?LocaleKeys.lab:LocaleKeys.labSubtitle ,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -95,8 +95,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "radiology_results",
icon: AppAssets.my_radiology_icon,
- title: LocaleKeys.radiology,
- subtitle: LocaleKeys.radiologySubtitle,
+ title: getIt.get().isArabic()?LocaleKeys.labSubtitle:LocaleKeys.radiology,
+ subtitle: getIt.get().isArabic()?LocaleKeys.radiology:LocaleKeys.labSubtitle ,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -105,8 +105,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "prescriptions",
icon: AppAssets.my_prescription_icon,
- title: LocaleKeys.medicinesSubtitle,
- subtitle: LocaleKeys.details,
+ title: getIt.get().isArabic()?LocaleKeys.details2:LocaleKeys.medicinesSubtitle,
+ subtitle: getIt.get().isArabic()?LocaleKeys.medicinesSubtitle:LocaleKeys.details2,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -115,8 +115,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "insurance_update",
icon: AppAssets.insurance_update_icon,
- title: LocaleKeys.insurance,
- subtitle: LocaleKeys.details,
+ title: getIt.get().isArabic()?LocaleKeys.details2: LocaleKeys.insurance2,
+ subtitle: getIt.get().isArabic()?LocaleKeys.insurance2: LocaleKeys.details2,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -135,8 +135,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "sick_leaves",
icon: AppAssets.my_sick_leave_icon,
- title: LocaleKeys.sick,
- subtitle: LocaleKeys.sickSubtitle,
+ title: getIt.get().isArabic()?LocaleKeys.sickSubtitle:LocaleKeys.sick2,
+ subtitle: getIt.get().isArabic()?LocaleKeys.sick2:LocaleKeys.sickSubtitle,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
@@ -145,8 +145,8 @@ class LandingPageData {
ServiceCardData(
serviceName: "my_invoice",
icon: AppAssets.invoiceListIcon,
- title: LocaleKeys.invoiceList,
- subtitle: LocaleKeys.myDoctorSubtitle,
+ title: getIt.get().isArabic()?LocaleKeys.myDoctorSubtitle2:LocaleKeys.invoiceList2,
+ subtitle: getIt.get().isArabic()?LocaleKeys.invoiceList2:LocaleKeys.myDoctorSubtitle2,
backgroundColor: AppColors.whiteColor,
iconColor: AppColors.blackColor,
textColor: AppColors.blackColor,
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index f103bd3f..fc5924ca 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -696,7 +696,7 @@ class _LandingPageState extends State {
.width / 2.5 - 10),
child: ListView.separated(
scrollDirection: Axis.horizontal,
- itemCount: LandingPageData.getLoggedInServiceCardsList.length,
+ itemCount: LandingPageData().getLoggedInServiceCardsList.length,
shrinkWrap: true,
controller: _horizontalScrollController,
padding: EdgeInsets.only(left: 0.h, right: 0.h, top: 16.h, bottom: 12.h),
@@ -708,14 +708,14 @@ class _LandingPageState extends State {
horizontalOffset: 100.0,
child: FadeInAnimation(
child: SmallServiceCard(
- icon: LandingPageData.getLoggedInServiceCardsList[index].icon,
- title: LandingPageData.getLoggedInServiceCardsList[index].title,
- subtitle: LandingPageData.getLoggedInServiceCardsList[index].subtitle,
- iconColor: LandingPageData.getLoggedInServiceCardsList[index].iconColor!,
- textColor: LandingPageData.getLoggedInServiceCardsList[index].textColor,
- backgroundColor: LandingPageData.getLoggedInServiceCardsList[index].backgroundColor,
- isBold: LandingPageData.getLoggedInServiceCardsList[index].isBold,
- serviceName: LandingPageData.getLoggedInServiceCardsList[index].serviceName,
+ icon: LandingPageData().getLoggedInServiceCardsList[index].icon,
+ title: LandingPageData().getLoggedInServiceCardsList[index].title,
+ subtitle: LandingPageData().getLoggedInServiceCardsList[index].subtitle,
+ iconColor: LandingPageData().getLoggedInServiceCardsList[index].iconColor!,
+ textColor: LandingPageData().getLoggedInServiceCardsList[index].textColor,
+ backgroundColor: LandingPageData().getLoggedInServiceCardsList[index].backgroundColor,
+ isBold: LandingPageData().getLoggedInServiceCardsList[index].isBold,
+ serviceName: LandingPageData().getLoggedInServiceCardsList[index].serviceName,
),
),
),
diff --git a/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart b/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart
index 7ae38db1..52dba2dd 100644
--- a/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart
+++ b/lib/presentation/lab/lab_result_via_clinic/lab_order_result_item.dart
@@ -91,35 +91,41 @@ class LabOrderResultItem extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Visibility(
- visible: tests?.checkIfGraphShouldBeDisplayed() == true,
- child: Column(
- spacing: 6.h,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- severityText.tr().toText10(isBold: true, color: AppColors.greyTextColor),
- Utils.buildSvgWithAssets(icon: AppAssets.lab_result_indicator, width: 21, height: 23, iconColor: iconColor),
- ],
+ Flexible(
+ flex: 2,
+ child: Visibility(
+ visible: tests?.checkIfGraphShouldBeDisplayed() == true,
+ child: Column(
+ spacing: 6.h,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ severityText.tr().toText10(isBold: true, color: AppColors.greyTextColor),
+ Utils.buildSvgWithAssets(icon: AppAssets.lab_result_indicator, width: 21, height: 23, iconColor: iconColor),
+ ],
+ ),
),
),
- Visibility(
- visible: tests?.checkIfGraphShouldBeDisplayed() == true,
- child: CustomButton(
- icon: AppAssets.view_report_icon,
- iconColor: AppColors.infoColor,
- iconSize: 16.h,
- text: LocaleKeys.viewReport.tr(context: context),
- onPressed: () {
- onTap();
- },
- backgroundColor: AppColors.infoColor.withAlpha(20),
- borderColor: AppColors.infoColor.withAlpha(0),
- textColor: AppColors.infoColor,
- fontSize: 14,
- fontWeight: FontWeight.w600,
- borderRadius: 12,
- padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
- height: 40.h,
+ Flexible(
+ flex:2,
+ child: Visibility(
+ visible: tests?.checkIfGraphShouldBeDisplayed() == true,
+ child: CustomButton(
+ icon: AppAssets.view_report_icon,
+ iconColor: AppColors.infoColor,
+ iconSize: 16.h,
+ text: LocaleKeys.viewReport.tr(context: context),
+ onPressed: () {
+ onTap();
+ },
+ backgroundColor: AppColors.infoColor.withAlpha(20),
+ borderColor: AppColors.infoColor.withAlpha(0),
+ textColor: AppColors.infoColor,
+ fontSize: 14,
+ fontWeight: FontWeight.w600,
+ borderRadius: 12,
+ padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
+ height: 40.h,
+ ),
),
),
],
diff --git a/lib/widgets/bottom_navigation/bottom_navigation.dart b/lib/widgets/bottom_navigation/bottom_navigation.dart
index 2518375a..fe586fe4 100644
--- a/lib/widgets/bottom_navigation/bottom_navigation.dart
+++ b/lib/widgets/bottom_navigation/bottom_navigation.dart
@@ -27,7 +27,7 @@ class BottomNavigation extends StatelessWidget {
BottomNavItem(
icon: AppAssets.bookAppoBottom,
fillIcon: AppAssets.bookAppoBottom,
- label: LocaleKeys.appointment.tr(context: context),
+ label: LocaleKeys.appointments.tr(context: context),
iconSize: 32, isSpecial: true),
appState.isAuthenticated
// ? BottomNavItem(icon: AppAssets.toDoBottom, label: LocaleKeys.todoList.tr(context: context))
@@ -80,7 +80,7 @@ class BottomNavigation extends StatelessWidget {
),
// const SizedBox(height: 10),
SizedBox(height: item.isSpecial ? 0 : 8.h),
- item.label.toText11(isBold: true),
+ item.label.toText10(isBold: true),
// SizedBox(height: item.isSpecial ? 5 : 0)
],
),
diff --git a/lib/widgets/buttons/custom_button.dart b/lib/widgets/buttons/custom_button.dart
index d2534587..d868755a 100644
--- a/lib/widgets/buttons/custom_button.dart
+++ b/lib/widgets/buttons/custom_button.dart
@@ -86,7 +86,8 @@ class CustomButton extends StatelessWidget {
),
if (text.isNotEmpty && icon != null)
Flexible(
- child: Text(
+ child:
+ Text(
text,
overflow: textOverflow ?? TextOverflow.ellipsis,
maxLines: 1,
diff --git a/lib/widgets/order_tracking/request_tracking.dart b/lib/widgets/order_tracking/request_tracking.dart
index f07c0b19..519a41c2 100644
--- a/lib/widgets/order_tracking/request_tracking.dart
+++ b/lib/widgets/order_tracking/request_tracking.dart
@@ -26,12 +26,7 @@ class OrderTrackingWidget extends StatelessWidget {
Widget? getBarAndDot(OrderTrackingState? state, BuildContext context,
double width) {
- print("the parent padding value is $parentPaddingValue");
- print("the parent padding value is ${(parentPaddingValue+24)}");
- print("the width - (parentPaddingValue+24) ${(width - (parentPaddingValue+24))}");
double widthOfOneState = (width/4) - (parentPaddingValue+8.h);
- print("te width of one state is $widthOfOneState");
- print("the value of${width/4}");
if(state == null) {
return Row(
children: List.generate(4, (index) {