Merge pull request 'haroon_dev' (#311) from haroon_dev into master

Reviewed-on: https://34.17.182.140/Haroon6138/HMG_Patient_App_New/pulls/311
haroon_dev
Haroon6138 15 hours ago
commit 9a54d51045

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

@ -286,7 +286,7 @@
"gate": "البوابة:",
"building": "المبنى:",
"branch": "الفرع:",
"emergencyServices": "خدمات الطوارئ",
"emergencyServices": "خدمات \n الطوارئ",
"nearester": "أقرب طوارئ",
"locationa": "الموقع",
"callNow": "الاتصال المباشر",
@ -1236,9 +1236,9 @@
"monitorBloodPressureLevels": "راقب مستويات ضغط الدم لديك، وتتبع القراءات الانقباضية والانبساطية، وحافظ على صحة قلبك.",
"trackWeightProgress": "تتبع تقدم وزنك، وضع الأهداف، وحافظ على كتلة جسم صحية من أجل العافية الشاملة.",
"bookAppointment": "حجز\nموعد",
"completeCheckup": "الفحص الشامل",
"completeCheckup": "الفحص \n الشامل",
"indoorNavigation": "الملاحة الداخلية",
"eReferralServices": "الإحالة الإلكترونية",
"eReferralServices": "الإحالة \n الإلكترونية",
"bloodDonation": "التبرع بالدم",
"dailyWaterMonitor": "مراقب الماء اليومي",
"fetchingYourWaterIntakeDetails": "يرجى الانتظار…",
@ -1844,5 +1844,6 @@
"submitRating": "إرسال التقييم",
"maxOneFileAllowed": "يمكن رفع ملف واحد فقط",
"fileSizeExceedsLimit": "يجب ألا يتجاوز حجم الملف 1 ميغابايت",
"completedPrescriptionOrder": "تمت الخدمة"
"completedPrescriptionOrder": "تمت الخدمة",
"submitEReferral": "تقديم الطلب"
}

@ -1801,7 +1801,7 @@
"watchUsOnYoutube": "Watch us on youtube",
"connectOnLinkedin": "Connect on LinkedIn",
"riskFactorPageTitle": "What do you feel?",
"bloodDonationService": "Blood Donation",
"bloodDonationService": "Blood \nDonation",
"bookAppointmentService": "Book\nAppointment",
"pinchToZoom": "Pinch to zoom",
"gotIt": "Got it",
@ -1834,7 +1834,8 @@
"submitRating": "Submit",
"maxOneFileAllowed": "Only 1 file can be uploaded",
"fileSizeExceedsLimit": "File size must not exceed 1 MB",
"completedPrescriptionOrder": "Completed"
"completedPrescriptionOrder": "Completed",
"submitEReferral": "Submit"
}

@ -58,8 +58,6 @@ class ApiConsts {
symptomsCheckerApi = symptomsCheckerApiLive;
symptomsCheckerUsername = 'mobile_user';
symptomsCheckerPassword = '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92';
CHAT_URL = "https://chat.hmg.com/geneysChat/Index.aspx?RequestedId=";
break;
case AppEnvironmentTypeEnum.dev:
baseUrl = "https://uat.hmgwebservices.com/";
@ -283,7 +281,7 @@ class ApiConsts {
static String googleCloudStorageENTranslationFileBaseURL = "https://storage.googleapis.com/hmg-patientapp-translations";
// ************ static values for Api ****************
static final double appVersionID = 21.0;
static final double appVersionID = 21.1;
// static final double appVersionID = 50.7;
static final int appChannelId = 3;

@ -417,6 +417,7 @@ class AppAssets {
static const String comprehensiveCheckupAr = '$pngBasePath/cc_ar.png';
static const String maleIcon = '$pngBasePath/male_icon.png';
static const String femaleIcon = '$pngBasePath/female_icon.png';
static const String lakumLogo = '$pngBasePath/lakum_logo.png';
static const String fullBodyFrontMale = '$pngBasePath/full_body_front_male.png';
static const String fullBodyBackMale = '$pngBasePath/full_body_back_male.png';

@ -442,7 +442,7 @@ class PushNotificationHandler {
badge: true,
sound: true,
);
if (permission.authorizationStatus == AuthorizationStatus.denied) return;
// if (permission.authorizationStatus == AuthorizationStatus.denied) return;
} else {
final permission = await FirebaseMessaging.instance.requestPermission();
}

@ -290,9 +290,9 @@ class ContactUsViewModel extends ChangeNotifier {
requestInsertCOCItem.isUserLoggedIn = true;
requestInsertCOCItem.projectID = 0;
requestInsertCOCItem.patientName = "${appState.getAuthenticatedUser()!.firstName!} ${appState.getAuthenticatedUser()!.lastName!}";
requestInsertCOCItem.fileName = "";
requestInsertCOCItem.fileName = "Image 1";
requestInsertCOCItem.appVersion = ApiConsts.appVersionID;
requestInsertCOCItem.uILanguage = appState.isArabic() ? "ar" : "en"; //TODO Change it to be dynamic
requestInsertCOCItem.uILanguage = appState.isArabic() ? "ar" : "en";
requestInsertCOCItem.browserInfo = Platform.localHostname;
requestInsertCOCItem.deviceInfo = Platform.localHostname;
requestInsertCOCItem.resolution = "400x847";

@ -42,6 +42,8 @@ class HabibWalletViewModel extends ChangeNotifier {
String? get amountError => _amountError;
String? get hospitalError => _hospitalError;
String yahalaAccountNumber = '';
// Clear amount error
void clearAmountError() {
_amountError = null;

@ -959,9 +959,9 @@ class HmgServicesRepoImp implements HmgServicesRepo {
final hasValidRespiration = _isValidValue(vitalSign.respirationBeatPerMinute);
final hasValidBloodPressure = _isValidValue(vitalSign.bloodPressureHigher) || _isValidValue(vitalSign.bloodPressureLower);
print('hasValidBloodPressure: $hasValidBloodPressure');
print('Will add to list: ${hasValidWeight || hasValidHeight || hasValidBMI || hasValidTemperature || hasValidHeartRate || hasValidRespiration || hasValidBloodPressure}');
print('=====================================');
// print('hasValidBloodPressure: $hasValidBloodPressure');
// print('Will add to list: ${hasValidWeight || hasValidHeight || hasValidBMI || hasValidTemperature || hasValidHeartRate || hasValidRespiration || hasValidBloodPressure}');
// print('=====================================');
// Add if ANY vital sign has valid data
if (hasValidWeight || hasValidHeight || hasValidBMI || hasValidTemperature ||

@ -1837,5 +1837,6 @@ abstract class LocaleKeys {
static const maxOneFileAllowed = 'maxOneFileAllowed';
static const fileSizeExceedsLimit = 'fileSizeExceedsLimit';
static const completedPrescriptionOrder = 'completedPrescriptionOrder';
static const submitEReferral = 'submitEReferral';
}

@ -219,14 +219,7 @@ class _MyDoctorsPageState extends State<MyDoctorsPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppCustomChipWidget(
richText: Row(
children: [
"${group.length} ".toText10(isEnglishOnly: true),
"${LocaleKeys.doctors2.tr(context: context)} ".toText10()
],
),
// labelText: "${group.length} ${'doctors'}",
isEnglishOnly: true,
labelText: "${group.length} ${LocaleKeys.doctors.tr(context: context)}",
),
Icon(isExpanded ? Icons.expand_less : Icons.expand_more),
],
@ -360,8 +353,8 @@ class _MyDoctorsPageState extends State<MyDoctorsPage> {
),
);
},
separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h),
),
separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 0.h),
),
SizedBox(height: 60.h),
],
);

@ -150,7 +150,7 @@ class _SavedLogin extends State<SavedLogin> {
fontSize: 12.f,
fontWeight: FontWeight.w600,
borderRadius: 12.r,
height: 40.h,
height: 44.h,
padding: EdgeInsets.symmetric(vertical: 10.h),
icon: (isOther == true && loginType == LoginTypeEnum.sms) ? AppAssets.whatsapp : getTypeIcons(loginType.toInt),
iconColor:

@ -356,7 +356,7 @@ class FeedbackPage extends StatelessWidget {
(String image, file) {
print(image);
print(file);
Navigator.pop(context);
// Navigator.pop(context);
contactUsViewModel.addFeedbackAttachment(image);
},
);

@ -185,7 +185,7 @@ class _NewReferralPageState extends State<NewReferralPage> {
color: AppColors.whiteColor,
padding: EdgeInsets.all(ResponsiveExtension(20).h),
child: CustomButton(
text: _currentStep <= 1 ? LocaleKeys.next.tr() : LocaleKeys.submit.tr(),
text: _currentStep <= 1 ? LocaleKeys.next.tr() : LocaleKeys.submitEReferral.tr(),
// icon: AppAssets.search_icon,
iconColor: Colors.white,
onPressed: () => {_handleNextStep()},

@ -290,10 +290,10 @@ class _OtherDetailsStepState extends State<OtherDetailsStep> {
void _addMedicalReport(String image, File file, ReferralFormManager formManager) {
// Max 1 file
if (formManager.formData.medicalReportImages.isNotEmpty) {
formManager.setFieldError('medicalReport', LocaleKeys.maxOneFileAllowed.tr(context: context));
return;
}
// if (formManager.formData.medicalReportImages.isNotEmpty) {
// formManager.setFieldError('medicalReport', LocaleKeys.maxOneFileAllowed.tr(context: context));
// return;
// }
// Max 1 MB
final fileSizeInBytes = file.lengthSync();
if (fileSizeInBytes > 1 * 1024 * 1024) {

@ -41,6 +41,7 @@ import 'package:hmg_patient_app_new/presentation/contact_us/contact_us.dart';
import 'package:hmg_patient_app_new/presentation/hmg_services/services_page.dart';
import 'package:hmg_patient_app_new/presentation/home/data/landing_page_data.dart';
import 'package:hmg_patient_app_new/presentation/home/widgets/habib_wallet_card.dart';
import 'package:hmg_patient_app_new/presentation/home/widgets/lakum_wallet_card.dart';
import 'package:hmg_patient_app_new/presentation/home/widgets/large_service_card.dart';
import 'package:hmg_patient_app_new/presentation/home/widgets/small_service_card.dart';
import 'package:hmg_patient_app_new/presentation/home/widgets/welcome_widget.dart';
@ -456,7 +457,7 @@ class _LandingPageState extends State<LandingPage> {
padding: EdgeInsets.only(left: 16.h, right: 16.h),
itemBuilder: (context, index) {
return SizedBox(
height: isTablet ? 290.h : 255.h,
height: isTablet ? 290.h : 255.h,
width: 250.w,
child: getIndexSwiperCard(index),
);
@ -833,7 +834,26 @@ class _LandingPageState extends State<LandingPage> {
separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 16.w),
),
),
appState.isAuthenticated ? HabibWalletCard() : SizedBox(),
appState.isAuthenticated
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.myBalanceSubtitle.tr(context: context).toText16(isBold: true).paddingSymmetrical(24.h, 0.h),
SizedBox(
height: 170.h,
child: ListView.separated(
scrollDirection: Axis.horizontal,
itemCount: 2,
padding: EdgeInsetsDirectional.only(start: 24.h, end: 24.h),
itemBuilder: (BuildContext context, int index) {
return index == 0 ? HabibWalletCard() : LakumWalletCard();
},
separatorBuilder: (BuildContext context, int index) => SizedBox(width: 12.h),
),
),
],
)
: SizedBox(),
],
),
),

@ -23,23 +23,23 @@ class HabibWalletCard extends StatelessWidget {
Widget build(BuildContext context) {
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
LocaleKeys.myBalanceSubtitle.tr(context: context).toText16(isBold: true),
// Row(
// children: [
// LocaleKeys.viewAllServices.tr(context: context).toText12(color: AppColors.primaryRedColor, isBold: true),
// SizedBox(width: 2.h),
// Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 14.h),
// ],
// ),
],
).paddingSymmetrical(24.h, 0.h),
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// LocaleKeys.myBalanceSubtitle.tr(context: context).toText16(isBold: true),
// // Row(
// // children: [
// // LocaleKeys.viewAllServices.tr(context: context).toText12(color: AppColors.primaryRedColor, isBold: true),
// // SizedBox(width: 2.h),
// // Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 14.h),
// // ],
// // ),
// ],
// ).paddingSymmetrical(24.h, 0.h),
SizedBox(height: 16.h),
Container(
// height: 150.h,
width: double.infinity,
width: 355.h,
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
borderRadius: 24,
@ -104,7 +104,7 @@ class HabibWalletCard extends StatelessWidget {
.toShimmer2(isShow: habibWalletVM.isWalletAmountLoading, radius: 12.h, width: 80.h, height: 40.h),
],
),
Spacer(),
// Spacer(),
Utils.getPaymentMethods(),
],
);
@ -171,7 +171,7 @@ class HabibWalletCard extends StatelessWidget {
),
),
]),
).paddingSymmetrical(24.h, 0.h).onPress(() {
).paddingSymmetrical(0.h, 0.h).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
page: HabibWalletPage(),

@ -0,0 +1,189 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.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/habib_wallet/habib_wallet_view_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/habib_wallet/habib_wallet_page.dart';
import 'package:hmg_patient_app_new/presentation/habib_wallet/recharge_wallet_page.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:provider/provider.dart';
class LakumWalletCard extends StatelessWidget {
const LakumWalletCard({super.key});
@override
Widget build(BuildContext context) {
return Column(
children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// LocaleKeys.myBalanceSubtitle.tr(context: context).toText16(isBold: true),
// // Row(
// // children: [
// // LocaleKeys.viewAllServices.tr(context: context).toText12(color: AppColors.primaryRedColor, isBold: true),
// // SizedBox(width: 2.h),
// // Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 14.h),
// // ],
// // ),
// ],
// ).paddingSymmetrical(24.h, 0.h),
SizedBox(height: 16.h),
Container(
// height: 150.h,
width: 355.h,
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
borderRadius: 24,
),
child: Stack(children: [
Positioned(
right: 0,
child: ClipRRect(
borderRadius: BorderRadius.circular(24.0),
child: Utils.buildImgWithAssets(
icon: AppAssets.lakumLogo,
width: 150.h,
height: 150.h,
)),
),
Padding(
padding: EdgeInsets.all(16.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// LocaleKeys.habibWallet.tr(context: context).toText16(isBold: true, letterSpacing: -0.2),
"Lakum Wallet".toText16(isBold: true, letterSpacing: -0.2),
// Container(
// height: 40.h,
// width: 40.h,
// decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
// color: AppColors.textColor,
// borderRadius: 8.h,
// ),
// child: Padding(
// padding: EdgeInsets.all(8.h),
// child: Utils.buildSvgWithAssets(
// icon: AppAssets.show_icon,
// width: 12.h,
// height: 12.h,
// fit: BoxFit.contain,
// ),
// ),
// ),
// ],
// ),
SizedBox(height: 4.h),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Consumer<HabibWalletViewModel>(builder: (context, habibWalletVM, child) {
return Row(
mainAxisSize: MainAxisSize.max,
children: [
Row(
children: [
Utils.buildSvgWithAssets(
icon: AppAssets.saudi_riyal_icon,
iconColor: AppColors.inputLabelTextColor,
width: 24.h,
height: 24.h,
fit: BoxFit.contain,
),
SizedBox(width: 8.h),
NumberFormat.decimalPattern()
.format(habibWalletVM.habibWalletAmount)
.toString()
.toText32(isBold: true, isEnglishOnly: true)
.toShimmer2(isShow: habibWalletVM.isWalletAmountLoading, radius: 12.h, width: 80.h, height: 40.h),
],
),
// Spacer(),
Utils.getPaymentMethods(),
],
);
}),
],
),
SizedBox(height: 16.h),
Row(
children: [
Expanded(
flex: 6,
child: CustomButton(
height: 40.h,
icon: AppAssets.recharge_icon,
iconColor: AppColors.infoColor,
iconSize: 24.h,
backgroundColor: AppColors.infoColor.withAlpha(15),
textColor: AppColors.infoColor,
text: LocaleKeys.recharge.tr(context: context),
borderWidth: 0.w,
fontWeight: FontWeight.w600,
borderColor: AppColors.infoColor.withAlpha(15),
padding: EdgeInsets.fromLTRB(4, 0, 12, 0),
fontSize: 14.f,
onPressed: () {
Navigator.of(context).push(CustomPageRoute(page: RechargeWalletPage()));
},
),
),
SizedBox(width: 8.h),
Expanded(
flex: 1,
child: Container(
height: (isFoldable || isTablet) ? 50.h : 40.h,
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.textColor,
borderRadius: 10.h,
side: BorderSide(
color: AppColors.textColor,
width: 1.2,
),
),
child: Transform.flip(
flipX: getIt.get<AppState>().isArabic(),
child: Utils.buildSvgWithAssets(
icon: AppAssets.forward_arrow_icon,
iconColor: AppColors.whiteColor,
width: 24.w,
height: 24.h,
fit: BoxFit.contain,
),
),
).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
page: HabibWalletPage(),
),
);
}),
),
],
),
],
),
),
]),
).paddingSymmetrical(0.h, 0.h).onPress(() {
Navigator.of(context).push(
CustomPageRoute(
page: HabibWalletPage(),
),
);
}),
],
);
}
}

@ -117,7 +117,7 @@ class InsuranceApprovalCard extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
(isLoading ? "John Smith" : insuranceApprovalResponseModel.doctorName!).toText16(isBold: true).toShimmer2(isShow: isLoading),
(isLoading ? "John Smith" : insuranceApprovalResponseModel.doctorName ?? "").toText16(isBold: true).toShimmer2(isShow: isLoading),
SizedBox(height: 8.h),
Wrap(
direction: Axis.horizontal,
@ -128,7 +128,7 @@ class InsuranceApprovalCard extends StatelessWidget {
// backgroundColor: insuranceApprovalResponseModel.status == 9 ? AppColors.successColor.withValues(alpha: 0.1) : AppColors.primaryRedColor.withValues(alpha: 0.1),
// textColor: insuranceApprovalResponseModel.status == 9 ? AppColors.successColor : AppColors.primaryRedColor,
// ).toShimmer2(isShow: isLoading),
AppCustomChipWidget(labelText: isLoading ? "Cardiology" : insuranceApprovalResponseModel.clinicName!).toShimmer2(isShow: isLoading),
AppCustomChipWidget(labelText: isLoading ? "Cardiology" : insuranceApprovalResponseModel.clinicName ?? "").toShimmer2(isShow: isLoading),
Directionality(
textDirection: ui.TextDirection.ltr,
child: AppCustomChipWidget(

@ -241,8 +241,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
children: [
AppCustomChipWidget(
icon: AppAssets.file_icon,
richText: "${LocaleKeys.fileno.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}"
.toText10(isEnglishOnly: true),
labelText: "${LocaleKeys.fileno.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}",
labelPadding: EdgeInsetsDirectional.only(start: -4.w, end: 6.w),
),
AppCustomChipWidget(

@ -123,9 +123,9 @@ class PatientSickLeaveCard extends StatelessWidget {
backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor,
fontSize: 14,
fontSize: 14.f,
isBold: true,
borderRadius: 12,
borderRadius: 12.r,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
icon: AppAssets.download,

@ -48,11 +48,11 @@ class AttachmentOptions extends StatelessWidget {
).onPress(() async {
await onGalleryTap();
}),
if (showFilesOption) SizedBox(height: 16.h),
if (!showFilesOption) SizedBox(height: 16.h),
if (showFilesOption)
checkInOptionCard(
appState,
AppAssets.files,
AppAssets.file_icon,
LocaleKeys.openFiles.tr(context: context),
LocaleKeys.selectDocumentFiles.tr(context: context),
).onPress(() async {

@ -2,8 +2,8 @@ name: hmg_patient_app_new
description: "New HMG Patient App"
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.0.25+24
#version: 0.0.1+23
#version: 0.0.30+29
version: 0.0.4+1
environment:
sdk: ">=3.6.0 <4.0.0"

Loading…
Cancel
Save