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

Reviewed-on: #308
master
Haroon6138 2 days ago
commit fa3a4029cc

@ -179,7 +179,8 @@ dependencies {
implementation("androidx.room:room-runtime:$room_version")
annotationProcessor("androidx.room:room-compiler:$room_version")
implementation("net.zetetic:android-database-sqlcipher:4.5.4")
// implementation("net.zetetic:android-database-sqlcipher:4.6.1")
implementation("net.zetetic:sqlcipher-android:4.6.1@aar")
implementation("com.intuit.ssp:ssp-android:1.1.0")
implementation("com.intuit.sdp:sdp-android:1.1.0")

@ -1843,5 +1843,6 @@
"weatherIndicators": "طقس",
"submitRating": "إرسال التقييم",
"maxOneFileAllowed": "يمكن رفع ملف واحد فقط",
"fileSizeExceedsLimit": "يجب ألا يتجاوز حجم الملف 1 ميغابايت"
"fileSizeExceedsLimit": "يجب ألا يتجاوز حجم الملف 1 ميغابايت",
"completedPrescriptionOrder": "تمت الخدمة"
}

@ -1833,7 +1833,8 @@
"weatherIndicators": "Weather",
"submitRating": "Submit",
"maxOneFileAllowed": "Only 1 file can be uploaded",
"fileSizeExceedsLimit": "File size must not exceed 1 MB"
"fileSizeExceedsLimit": "File size must not exceed 1 MB",
"completedPrescriptionOrder": "Completed"
}

@ -54,7 +54,7 @@ class ApiConsts {
GET_TAMARA_PAYMENT_STATUS = 'https://mdlaboratories.com/tamaralive/api/OnlineTamara/order_status?orderid=';
rcBaseUrl = 'https://rc.hmg.com/';
QLINE_URL = "https://qline.hmg.com/api/PatientCall/PatientInQueue_Detail";
CHAT_URL = "https://chat.hmg.com/Index.aspx?RequestedId=";
CHAT_URL = "https://chat.hmg.com/geneysChat/Index.aspx?RequestedId=";
symptomsCheckerApi = symptomsCheckerApiLive;
symptomsCheckerUsername = 'mobile_user';
symptomsCheckerPassword = '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92';

@ -1076,11 +1076,11 @@ class MyAppointmentsViewModel extends ChangeNotifier {
notifyListeners();
} else if (apiResponse.messageStatus == 1) {
appointmentRatedResponseModel = apiResponse.data!;
isAppointmentRatedResponseLoading = false;
notifyListeners();
if (onSuccess != null) {
onSuccess(apiResponse.data);
}
isAppointmentRatedResponseLoading = false;
}
},
);

@ -1,4 +1,6 @@
import 'package:flutter/material.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/features/my_invoices/models/get_invoice_details_response_model.dart';
import 'package:hmg_patient_app_new/features/my_invoices/models/get_invoices_list_response_model.dart';
import 'package:hmg_patient_app_new/features/my_invoices/my_invoices_repo.dart';
@ -229,7 +231,7 @@ class MyInvoicesViewModel extends ChangeNotifier {
} else if (filterType == InvoiceFilterType.clinic) {
itemName = invoice.clinicName;
} else if (filterType == InvoiceFilterType.doctor) {
itemName = invoice.doctorName;
itemName = getIt<AppState>().isArabic() ? invoice.doctorNameN : invoice.doctorName;
}
if (itemName != null && itemName.isNotEmpty) {

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

@ -656,7 +656,7 @@ class _AppointmentDetailsPageState extends State<AppointmentDetailsPage> {
crossAxisCount: 3,
crossAxisSpacing: 16.h,
mainAxisSpacing: 16.w,
childAspectRatio: isFoldable ? 1.2 : (isTablet ? 1.1 : 0.78),
childAspectRatio: isFoldable ? 1.2 : (isTablet ? 1.4 : 0.98),
),
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,

@ -162,9 +162,11 @@ class AppointmentDoctorCard extends StatelessWidget {
],
),
),
patientAppointmentHistoryResponseModel.isLiveCareAppointment! ||
(patientAppointmentHistoryResponseModel.isLiveCareAppointment! ||
patientAppointmentHistoryResponseModel.isExecludeDoctor! ||
patientAppointmentHistoryResponseModel.isClinicReBookingAllowed! == false ||
patientAppointmentHistoryResponseModel.isActiveDoctor! == false
patientAppointmentHistoryResponseModel.isActiveDoctor! == false ||
!Utils.isClinicAllowedForRebook(patientAppointmentHistoryResponseModel.clinicID))
? SizedBox.shrink()
: Utils.buildSvgWithAssets(icon: AppAssets.doctor_profile_icon, width: 20.h, height: 20.h, fit: BoxFit.scaleDown)
.onPress(() async {

@ -100,7 +100,6 @@ class _SavedLogin extends State<SavedLogin> {
child: Column(
children: [
// Last login info - show WhatsApp only if isOther AND loginType is SMS
("${LocaleKeys.lastLoginBy.tr()} ${(isOther == true && loginType == LoginTypeEnum.sms) ? LoginTypeEnum.whatsapp.displayName : loginType.displayName}")
.toText14(isBold: true, color: AppColors.greyTextColor, letterSpacing: -1),
Directionality(
@ -251,7 +250,7 @@ class _SavedLogin extends State<SavedLogin> {
}),
);
},
height: isFoldable ? 50.h : 40.h,
height: isFoldable ? 56.h : 50.h,
backgroundColor: AppColors.whiteColor,
borderColor: AppColors.borderOnlyColor,
textColor: AppColors.textColor,

@ -133,7 +133,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
children: [
Image.network(
"https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
width: 64.w,
width: 64.h,
height: 64.h,
fit: BoxFit.cover,
).circle(100).toShimmer2(isShow: true, radius: 50.r),
@ -172,7 +172,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
),
SizedBox(height: 16.h),
SizedBox(
height: 110.h,
height: 115.h,
child: ListView.separated(
scrollDirection: Axis.horizontal,
itemCount: myAppointmentsVM.patientMyDoctorsList.length,

@ -475,7 +475,7 @@ class _ServicesPageState extends State<ServicesPage> {
ConstrainedBox(
constraints: BoxConstraints(
minHeight: 320.h,
maxHeight: isFoldable ? 400.h : (isTablet ? 360.h : 340.h),
maxHeight: isFoldable ? 380.h : (isTablet ? 370.h : 340.h),
),
child: ListView.separated(
scrollDirection: Axis.horizontal,

@ -418,7 +418,8 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
return ConstrainedBox(
constraints: BoxConstraints(
minHeight: 135.h,
maxHeight: isFoldable ? 160.h : (isTablet ? 165.h : 135.h),
maxHeight: 150.h,
// maxHeight: isFoldable ? 150.h : (isTablet ? 140.h : 140.h),
),
child: PageView(
controller: hmgServicesVM.vitalSignPageController,
@ -628,6 +629,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
crossAxisCount: 3,
crossAxisSpacing: 10.h,
mainAxisSpacing: 16.w,
childAspectRatio: isFoldable ? 1.2 : (isTablet ? 1.4 : 0.98),
// mainAxisExtent: 120.h,
),
physics: NeverScrollableScrollPhysics(),
@ -719,7 +721,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
return ConstrainedBox(
constraints: BoxConstraints(
minHeight: 150.h,
maxHeight: isFoldable ? 230.h : (isTablet ? 240.h : 180.h),
maxHeight: isFoldable ? 210.h : (isTablet ? 200.h : 180.h),
),
child: myAppointmentsVM.isMyAppointmentsLoading
? MedicalFileAppointmentCard(
@ -1173,7 +1175,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 1,
childAspectRatio: isFoldable ? 1.2 : (isTablet ? 1.4 : 0.98),
crossAxisSpacing: 10.h,
),
physics: NeverScrollableScrollPhysics(),
@ -1277,10 +1279,10 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
context,
noDataText: LocaleKeys.youDontHaveAnySickLeavesYet.tr(context: context),
isSmallWidget: true,
width: 62.w,
width: 62.h,
height: 62.h,
),
).paddingSymmetrical(0.w, 0.h);
);
}),
SizedBox(height: 16.h),
Selector<MedicalFileViewModel,
@ -1308,6 +1310,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
crossAxisCount: 3,
crossAxisSpacing: 10.h,
mainAxisSpacing: 16.w,
childAspectRatio: isFoldable ? 1.2 : (isTablet ? 1.4 : 0.98),
),
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.only(top: 12.h),
@ -1625,7 +1628,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
),
child: Utils.buildSvgWithAssets(
icon: icon,
width: 22.w,
width: 22.h,
height: 22.h,
iconColor: scheme.iconFg,
fit: BoxFit.contain,
@ -1642,7 +1645,8 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
icon: getIt.get<AppState>().isArabic() ? AppAssets.arrow_back : AppAssets.arrow_forward, width: 18.w, height: 18.h),
],
),
SizedBox(height: 14.h),
Spacer(),
// SizedBox(height: 14.h),
Container(
padding: EdgeInsets.symmetric(horizontal: 6.w, vertical: 6.h),
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(

@ -34,39 +34,33 @@ class HealthToolsCard extends StatelessWidget {
padding: EdgeInsets.all(12.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Icon container with white background and border
Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
borderRadius: 12.r,
side: BorderSide(
color: AppColors.borderOnlyColor.withValues(alpha: 0.1),
width: 1,
),
),
height: 48.w,
width: 48.w,
child: Center(
child: Utils.buildSvgWithAssets(
icon: svgIcon,
width: iconS,
height: iconS,
fit: BoxFit.contain,
applyThemeColor: false,
iconColor: iconColor,
),
),
// Icon container with white background and border
Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
borderRadius: 12.r,
side: BorderSide(
color: AppColors.borderOnlyColor.withValues(alpha: 0.1),
width: 1,
),
SizedBox(height: 6.h),
label.toText13(color: textColor, isBold: true, maxLine: 2),
],
),
height: 48.h,
width: 48.h,
child: Center(
child: Utils.buildSvgWithAssets(
icon: svgIcon,
width: iconS,
height: iconS,
fit: BoxFit.contain,
applyThemeColor: false,
iconColor: iconColor,
),
),
),
SizedBox(height: 6.h),
label.toText13(color: textColor, isBold: true, maxLine: 2),
],
),
);

@ -30,22 +30,28 @@ class LabRadCard extends StatelessWidget {
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 18.r, hasShadow: false),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
Utils.buildSvgWithAssets(
icon: icon,
width: 40.w,
height: 40.h,
fit: BoxFit.cover,
applyThemeColor: false
).toShimmer2(isShow: false, radius: 12.r),
SizedBox(width: 8.w),
Flexible(
child: labelText.toText12(isBold: true, maxLine: 2),
Expanded(
child: Row(
children: [
Utils.buildSvgWithAssets(
icon: icon,
width: 40.w,
height: 40.h,
fit: BoxFit.cover,
applyThemeColor: false
).toShimmer2(isShow: false, radius: 12.r),
SizedBox(width: 8.w),
Flexible(child: labelText.toText12(isBold: true, maxLine: 2)),
],
),
),
SizedBox(width: 12.w),
Transform.flip(
flipX: appState.isArabic(),
child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon_small, width: 10.w, height: 10.h, fit: BoxFit.contain, iconColor: AppColors.textColor),
child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon_small, width: 12.h, height: 12.h, fit: BoxFit.contain, iconColor: AppColors.textColor),
),
],
).paddingAll(12.w),

@ -152,7 +152,7 @@ class _MedicalFileAppointmentCardState extends State<MedicalFileAppointmentCard>
backgroundColor:
AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel) ? AppColors.greyColor : AppColors.secondaryLightRedColor,
textColor: AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel) ? AppColors.textColor : AppColors.primaryRedColor,
padding: EdgeInsets.only(top: 12.h, left: 8.w, right: 8.w, bottom: 8.h),
padding: EdgeInsets.all(8.h),
).toShimmer2(isShow: widget.myAppointmentsViewModel.isMyAppointmentsLoading),
SizedBox(height: 16.h),
IntrinsicWidth(
@ -310,14 +310,14 @@ class _MedicalFileAppointmentCardState extends State<MedicalFileAppointmentCard>
borderRadius: 10.r,
),
child: Padding(
padding: EdgeInsets.all(10.w),
padding: EdgeInsets.all(10.h),
child: Transform.flip(
flipX: appState.isArabic(),
child: Utils.buildSvgWithAssets(
iconColor: AppColors.whiteColor,
icon: AppAssets.forward_arrow_icon_small,
width: 40.h,
height: 40.h,
width: 36.h,
height: 36.h,
fit: BoxFit.contain,
),
),

@ -485,27 +485,23 @@ class _FamilyCardsState extends State<FamilyCards> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
CustomChipWidget(
height: 30.h,
chipType: ChipTypeEnum.alert,
backgroundColor: profile.status == FamilyFileEnum.pending.toInt
? AppColors.alertLightColor.withValues(alpha: 0.20)
: profile.status == FamilyFileEnum.rejected.toInt
? AppColors.primaryRedColor.withValues(alpha: 0.20)
: profile.status == FamilyFileEnum.active.toInt
? AppColors.lightGreenColor
: AppColors.lightGrayBGColor,
chipText: profile.statusDescription ?? " N/A",
iconAsset: null,
isShowBorder: false,
borderRadius: 8.h,
AppCustomChipWidget(
labelText: profile.statusDescription ?? " N/A",
backgroundColor: profile.status == FamilyFileEnum.pending.toInt
? AppColors.alertLightColor.withValues(alpha: 0.20)
: profile.status == FamilyFileEnum.rejected.toInt
? AppColors.primaryRedColor.withValues(alpha: 0.20)
: profile.status == FamilyFileEnum.active.toInt
? AppColors.lightGreenColor
: AppColors.lightGrayBGColor,
textColor: profile.status == FamilyFileEnum.pending.toInt
? AppColors.alertLightColor
: profile.status == FamilyFileEnum.rejected.toInt
? AppColors.primaryRedColor
: profile.status == FamilyFileEnum.active.toInt
? AppColors.textGreenColor
: AppColors.alertColor),
: AppColors.alertColor
),
SizedBox(height: 8.h),
Wrap(alignment: WrapAlignment.start, crossAxisAlignment: WrapCrossAlignment.start, runAlignment: WrapAlignment.start, spacing: 0.h, children: [
(profile.patientName ?? "").toText14(isBold: true, isCenter: false, maxlines: 1),
@ -513,15 +509,9 @@ class _FamilyCardsState extends State<FamilyCards> {
.toText12(isCenter: false, maxLine: 1, isBold: true, color: AppColors.greyTextColor),
]),
SizedBox(height: 8.h),
CustomChipWidget(
height: 30.h,
chipType: ChipTypeEnum.alert,
backgroundColor: AppColors.lightGrayBGColor,
chipText: "Medical File: ${profile.responseId ?? "N/A"}",
iconAsset: null,
isShowBorder: false,
borderRadius: 8.h,
textColor: AppColors.textColor),
AppCustomChipWidget(
labelText: "Medical File: ${profile.responseId ?? "N/A"}",
),
],
),
),
@ -822,13 +812,13 @@ class _FamilyCardsState extends State<FamilyCards> {
],
),
if (widget.isShowRemoveButton) ...[
Positioned(
isParentUser ? Positioned(
top: 0,
right: 0,
child: Utils.buildSvgWithAssets(icon: AppAssets.deleteIcon).onPress(() {
if (!isActive) widget.onRemove(profile);
}),
),
) : SizedBox(),
],
],
),
@ -865,9 +855,8 @@ class _FamilyCardsState extends State<FamilyCards> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
CustomChipWidget(
height: 30.h,
chipType: ChipTypeEnum.alert,
AppCustomChipWidget(
labelText: profile.statusDescription ?? "N/A",
backgroundColor: profile.status == FamilyFileEnum.pending.toInt
? AppColors.alertLightColor.withValues(alpha: 0.20)
: profile.status == FamilyFileEnum.rejected.toInt
@ -875,10 +864,6 @@ class _FamilyCardsState extends State<FamilyCards> {
: profile.status == FamilyFileEnum.active.toInt
? AppColors.lightGreenColor
: AppColors.lightGrayBGColor,
chipText: profile.statusDescription ?? "N/A",
iconAsset: null,
isShowBorder: false,
borderRadius: 8.h,
textColor: profile.status == FamilyFileEnum.pending.toInt
? AppColors.alertLightColor
: profile.status == FamilyFileEnum.rejected.toInt
@ -905,15 +890,8 @@ class _FamilyCardsState extends State<FamilyCards> {
],
),
SizedBox(height: 8.h),
CustomChipWidget(
height: 30.h,
chipType: ChipTypeEnum.alert,
backgroundColor: AppColors.lightGrayBGColor,
chipText: "${LocaleKeys.medicalFile.tr(context: context)}: ${profile.patientId ?? "N/A"}",
iconAsset: null,
isShowBorder: false,
borderRadius: 8.h,
textColor: AppColors.textColor,
AppCustomChipWidget(
labelText: "${LocaleKeys.medicalFile.tr(context: context)}: ${profile.patientId ?? "N/A"}",
),
SizedBox(height: 16.h),
Row(

@ -35,7 +35,7 @@ class InvoiceFilterBottomSheet extends StatelessWidget {
children: [
TextInputWidget(
labelText: LocaleKeys.search.tr(context: context),
hintText: "Search $title",
hintText: "${LocaleKeys.search.tr(context: context)} $title",
controller: vm.filterSearchController,
onChange: (value) {
debouncer.run(() {

Loading…
Cancel
Save