pull/49/head
haroon amjad 1 month ago
parent 4f4bef9d6f
commit 3b5d2d27a4

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

@ -346,9 +346,9 @@ class Utils {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Lottie.asset(AppAnimations.warningAnimation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 100.h, height: 100.h, fit: BoxFit.fill), Lottie.asset(AppAnimations.warningAnimation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 128.h, height: 128.h, fit: BoxFit.fill),
SizedBox(height: 8.h), SizedBox(height: 8.h),
(loadingText ?? LocaleKeys.loadingText.tr()).toText14(color: AppColors.blackColor), (loadingText ?? LocaleKeys.loadingText.tr()).toText14(color: AppColors.blackColor, letterSpacing: 0),
SizedBox(height: 16.h), SizedBox(height: 16.h),
isShowActionButtons isShowActionButtons
? Row( ? Row(
@ -361,11 +361,11 @@ class Utils {
onCancelTap(); onCancelTap();
} }
}, },
backgroundColor: AppColors.secondaryLightRedColor, backgroundColor: AppColors.primaryRedColor,
borderColor: AppColors.secondaryLightRedColor, borderColor: AppColors.primaryRedColor,
textColor: AppColors.primaryRedColor, textColor: AppColors.whiteColor,
icon: AppAssets.cancel, icon: AppAssets.cancel,
iconColor: AppColors.primaryRedColor, iconColor: AppColors.whiteColor,
), ),
), ),
SizedBox(width: 8.h), SizedBox(width: 8.h),
@ -652,6 +652,7 @@ class Utils {
static Widget getPaymentAmountWithSymbol2(num habibWalletAmount, Color iconColor, double iconSize, {bool isSaudiCurrency = true, bool isExpanded = true}) { static Widget getPaymentAmountWithSymbol2(num habibWalletAmount, Color iconColor, double iconSize, {bool isSaudiCurrency = true, bool isExpanded = true}) {
return RichText( return RichText(
maxLines: 1,
text: TextSpan( text: TextSpan(
children: [ children: [
WidgetSpan( WidgetSpan(

@ -30,12 +30,11 @@ extension EmailValidator on String {
fontStyle: fontStyle ?? FontStyle.normal, fontStyle: fontStyle ?? FontStyle.normal,
fontWeight: isBold ? FontWeight.bold : FontWeight.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.normal,
color: color ?? AppColors.blackColor, color: color ?? AppColors.blackColor,
letterSpacing: -1, letterSpacing: 0,
), ),
); );
Widget toText10({Color? color, FontWeight? weight, bool isBold = false, bool isUnderLine = false, int? maxlines, FontStyle? fontStyle, TextOverflow? textOverflow, double letterSpacing = -1}) => Widget toText10({Color? color, FontWeight? weight, bool isBold = false, bool isUnderLine = false, int? maxlines, FontStyle? fontStyle, TextOverflow? textOverflow, double letterSpacing = 0}) => Text(
Text(
this, this,
maxLines: maxlines, maxLines: maxlines,
overflow: textOverflow, overflow: textOverflow,
@ -49,7 +48,7 @@ extension EmailValidator on String {
decorationColor: color ?? AppColors.blackColor), decorationColor: color ?? AppColors.blackColor),
); );
Widget toText11({Color? color, FontWeight? weight, bool isUnderLine = false, bool isCenter = false, bool isBold = false, int maxLine = 0, double letterSpacing = -1}) => Text( Widget toText11({Color? color, FontWeight? weight, bool isUnderLine = false, bool isCenter = false, bool isBold = false, int maxLine = 0, double letterSpacing = 0}) => Text(
this, this,
textAlign: isCenter ? TextAlign.center : null, textAlign: isCenter ? TextAlign.center : null,
maxLines: (maxLine > 0) ? maxLine : null, maxLines: (maxLine > 0) ? maxLine : null,
@ -71,7 +70,7 @@ extension EmailValidator on String {
fontSize: 12.fSize, fontSize: 12.fSize,
fontWeight: fontWeight ?? (isBold ? FontWeight.bold : FontWeight.normal), fontWeight: fontWeight ?? (isBold ? FontWeight.bold : FontWeight.normal),
color: color ?? AppColors.blackColor, color: color ?? AppColors.blackColor,
letterSpacing: -1, letterSpacing: 0,
height: height, height: height,
decorationColor: isUnderLine ? AppColors.blackColor : null, decorationColor: isUnderLine ? AppColors.blackColor : null,
decoration: isUnderLine ? TextDecoration.underline : null, decoration: isUnderLine ? TextDecoration.underline : null,
@ -87,7 +86,7 @@ extension EmailValidator on String {
fontSize: 12.fSize, fontSize: 12.fSize,
fontWeight: isBold ? FontWeight.bold : FontWeight.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.normal,
color: color ?? AppColors.blackColor, color: color ?? AppColors.blackColor,
letterSpacing: -1, letterSpacing: 0,
decoration: isUnderLine ? TextDecoration.underline : null, decoration: isUnderLine ? TextDecoration.underline : null,
), ),
); );
@ -120,7 +119,7 @@ extension EmailValidator on String {
), ),
); );
Widget toText13({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0, FontWeight? weight, double? letterSpacing = -1}) => Text( Widget toText13({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0, FontWeight? weight, double? letterSpacing = 0}) => Text(
this, this,
textAlign: isCenter ? TextAlign.center : null, textAlign: isCenter ? TextAlign.center : null,
maxLines: (maxLine > 0) ? maxLine : null, maxLines: (maxLine > 0) ? maxLine : null,
@ -139,7 +138,7 @@ extension EmailValidator on String {
bool isCenter = false, bool isCenter = false,
FontWeight? weight, FontWeight? weight,
int? maxlines, int? maxlines,
double? letterSpacing = -1, double? letterSpacing = 0,
double? height, double? height,
TextOverflow? textOverflow}) => TextOverflow? textOverflow}) =>
Text( Text(

@ -24,6 +24,7 @@ import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
import 'package:hmg_patient_app_new/services/error_handler_service.dart'; import 'package:hmg_patient_app_new/services/error_handler_service.dart';
import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:location/location.dart' show Location; import 'package:location/location.dart' show Location;
@ -378,7 +379,7 @@ class BookAppointmentsViewModel extends ChangeNotifier {
LoadingUtils.hideFullScreenLoader(); LoadingUtils.hideFullScreenLoader();
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
navigationService.navigatorKey.currentContext!, navigationService.navigatorKey.currentContext!,
FadePage( CustomPageRoute(
page: LandingNavigation(), page: LandingNavigation(),
), ),
(r) => false); (r) => false);

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart' show ChangeNotifier;
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart';
import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
enum AppointmentViaRegionState { enum AppointmentViaRegionState {
@ -39,7 +40,7 @@ class AppointmentViaRegionViewmodel extends ChangeNotifier {
void handleLastStep(){ void handleLastStep(){
navigationService.pop(); navigationService.pop();
navigationService.push(FadePage( navigationService.push(CustomPageRoute(
page: SelectClinicPage(), page: SelectClinicPage(),
),); ),);
} }

@ -79,6 +79,11 @@ class MyAppointmentsViewModel extends ChangeNotifier {
} }
Future<void> getPatientAppointments(bool isActiveAppointment, bool isArrivedAppointments, {Function(dynamic)? onSuccess, Function(String)? onError}) async { Future<void> getPatientAppointments(bool isActiveAppointment, bool isArrivedAppointments, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
patientAppointmentsHistoryList.clear();
patientUpcomingAppointmentsHistoryList.clear();
patientArrivedAppointmentsHistoryList.clear();
final result = await myAppointmentsRepo.getPatientAppointments(isActiveAppointment: isActiveAppointment, isArrivedAppointments: isArrivedAppointments); final result = await myAppointmentsRepo.getPatientAppointments(isActiveAppointment: isActiveAppointment, isArrivedAppointments: isArrivedAppointments);
final resultArrived = await myAppointmentsRepo.getPatientAppointments(isActiveAppointment: false, isArrivedAppointments: true); final resultArrived = await myAppointmentsRepo.getPatientAppointments(isActiveAppointment: false, isArrivedAppointments: true);

@ -99,6 +99,7 @@ class PayfortViewModel extends ChangeNotifier {
String? applePayShaType, String? applePayShaType,
String? applePayShaRequestPhrase, String? applePayShaRequestPhrase,
}) async { }) async {
var sdkTokenResponse;
try { try {
String? deviceId = await _payfort.getDeviceId(); String? deviceId = await _payfort.getDeviceId();
@ -125,6 +126,7 @@ class PayfortViewModel extends ChangeNotifier {
// dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {}); // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
} else if (apiResponse.messageStatus == 1) { } else if (apiResponse.messageStatus == 1) {
// payfortProjectDetailsRespModel = apiResponse.data!; // payfortProjectDetailsRespModel = apiResponse.data!;
sdkTokenResponse = apiResponse.data;
isApplePayConfigurationLoading = false; isApplePayConfigurationLoading = false;
notifyListeners(); notifyListeners();
} }
@ -133,7 +135,7 @@ class PayfortViewModel extends ChangeNotifier {
} catch (e) { } catch (e) {
print("Error here: ${e.toString()}"); print("Error here: ${e.toString()}");
} }
return null; return sdkTokenResponse;
} }
Future<void> paymentWithApplePay({ Future<void> paymentWithApplePay({

@ -28,6 +28,7 @@ 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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.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:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart'; import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:maps_launcher/maps_launcher.dart'; import 'package:maps_launcher/maps_launcher.dart';
@ -72,7 +73,7 @@ class _AppointmentDetailsPageState extends State<AppointmentDetailsPage> {
Expanded( Expanded(
child: CollapsingListView( child: CollapsingListView(
title: "Appointment Details".needTranslation, title: "Appointment Details".needTranslation,
report: () {}, report: AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel) ? () {} : null,
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -331,7 +332,7 @@ class _AppointmentDetailsPageState extends State<AppointmentDetailsPage> {
).onPress(() { ).onPress(() {
prescriptionVM.setPrescriptionsDetailsLoading(); prescriptionVM.setPrescriptionsDetailsLoading();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: PrescriptionDetailPage(prescriptionsResponseModel: getPrescriptionRequestModel()), page: PrescriptionDetailPage(prescriptionsResponseModel: getPrescriptionRequestModel()),
), ),
); );
@ -364,7 +365,7 @@ class _AppointmentDetailsPageState extends State<AppointmentDetailsPage> {
onPressed: () { onPressed: () {
Navigator.of(context) Navigator.of(context)
.push( .push(
FadePage( CustomPageRoute(
page: PrescriptionsListPage(), page: PrescriptionsListPage(),
), ),
) )
@ -425,8 +426,8 @@ class _AppointmentDetailsPageState extends State<AppointmentDetailsPage> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
LocaleKeys.upcomingPaymentNow.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor), Expanded(child: LocaleKeys.upcomingPaymentNow.tr(context: context).toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor)),
"VAT 15%(${widget.patientAppointmentHistoryResponseModel.patientTaxAmount})".needTranslation.toText14(isBold: true, color: AppColors.greyTextColor), "VAT 15%(${widget.patientAppointmentHistoryResponseModel.patientTaxAmount})".needTranslation.toText14(isBold: true, color: AppColors.greyTextColor, letterSpacing: -2),
], ],
), ),
SizedBox(height: 18.h), SizedBox(height: 18.h),
@ -560,7 +561,7 @@ class _AppointmentDetailsPageState extends State<AppointmentDetailsPage> {
case 20: case 20:
myAppointmentsViewModel.setIsPatientAppointmentShareLoading(true); myAppointmentsViewModel.setIsPatientAppointmentShareLoading(true);
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: AppointmentPaymentPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), page: AppointmentPaymentPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel),
), ),
); );

@ -27,6 +27,7 @@ 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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/in_app_browser/InAppBrowser.dart'; import 'package:hmg_patient_app_new/widgets/in_app_browser/InAppBrowser.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart'; import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -79,9 +80,7 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
child: CollapsingListView( child: CollapsingListView(
title: "Appointment Payment".needTranslation, title: "Appointment Payment".needTranslation,
child: SingleChildScrollView( child: SingleChildScrollView(
child: myAppointmentsVM.isAppointmentPatientShareLoading child: Column(
? const MoviesShimmerWidget().paddingAll(24.h)
: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SizedBox(height: 24.h), SizedBox(height: 24.h),
@ -97,9 +96,9 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Image.asset(AppAssets.mada, width: 72.h, height: 25.h), Image.asset(AppAssets.mada, width: 72.h, height: 25.h).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
SizedBox(height: 16.h), SizedBox(height: 16.h),
"Mada".needTranslation.toText16(isBold: true), "Mada".needTranslation.toText16(isBold: true).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
], ],
), ),
SizedBox(width: 8.h), SizedBox(width: 8.h),
@ -110,7 +109,7 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
width: 18.h, width: 18.h,
height: 13.h, height: 13.h,
fit: BoxFit.contain, fit: BoxFit.contain,
), ).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
], ],
).paddingSymmetrical(16.h, 16.h), ).paddingSymmetrical(16.h, 16.h),
).paddingSymmetrical(24.h, 0.h).onPress(() { ).paddingSymmetrical(24.h, 0.h).onPress(() {
@ -136,9 +135,9 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
SizedBox(width: 8.h), SizedBox(width: 8.h),
Image.asset(AppAssets.Mastercard, width: 40.h, height: 40.h), Image.asset(AppAssets.Mastercard, width: 40.h, height: 40.h),
], ],
), ).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
SizedBox(height: 16.h), SizedBox(height: 16.h),
"Visa or Mastercard".needTranslation.toText16(isBold: true), "Visa or Mastercard".needTranslation.toText16(isBold: true).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
], ],
), ),
SizedBox(width: 8.h), SizedBox(width: 8.h),
@ -149,7 +148,7 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
width: 18.h, width: 18.h,
height: 13.h, height: 13.h,
fit: BoxFit.contain, fit: BoxFit.contain,
), ).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
], ],
).paddingSymmetrical(16.h, 16.h), ).paddingSymmetrical(16.h, 16.h),
).paddingSymmetrical(24.h, 0.h).onPress(() { ).paddingSymmetrical(24.h, 0.h).onPress(() {
@ -169,9 +168,9 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Image.asset(AppAssets.tamara_en, width: 72.h, height: 25.h), Image.asset(AppAssets.tamara_en, width: 72.h, height: 25.h).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
SizedBox(height: 16.h), SizedBox(height: 16.h),
"Tamara".needTranslation.toText16(isBold: true), "Tamara".needTranslation.toText16(isBold: true).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
], ],
), ),
SizedBox(width: 8.h), SizedBox(width: 8.h),
@ -182,7 +181,7 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
width: 18.h, width: 18.h,
height: 13.h, height: 13.h,
fit: BoxFit.contain, fit: BoxFit.contain,
), ).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
], ],
).paddingSymmetrical(16.h, 16.h), ).paddingSymmetrical(16.h, 16.h),
).paddingSymmetrical(24.h, 0.h).onPress(() { ).paddingSymmetrical(24.h, 0.h).onPress(() {
@ -204,9 +203,7 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
), ),
child: Consumer<PayfortViewModel>(builder: (context, payfortVM, child) { child: Consumer<PayfortViewModel>(builder: (context, payfortVM, child) {
//TODO: Need to add loading state & animation for Apple Pay Configuration //TODO: Need to add loading state & animation for Apple Pay Configuration
return payfortVM.isApplePayConfigurationLoading return Column(
? const MoviesShimmerWidget().paddingAll(16.h)
: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
(myAppointmentsVM.patientAppointmentShareResponseModel!.isCash ?? true) (myAppointmentsVM.patientAppointmentShareResponseModel!.isCash ?? true)
@ -227,7 +224,7 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
text: LocaleKeys.updateInsurance.tr(context: context), text: LocaleKeys.updateInsurance.tr(context: context),
onPressed: () { onPressed: () {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: InsuranceHomePage(), page: InsuranceHomePage(),
), ),
); );
@ -272,13 +269,13 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
"".needTranslation.toText14(isBold: true), "".needTranslation.toText14(isBold: true),
Utils.getPaymentAmountWithSymbol( Utils.getPaymentAmountWithSymbol(myAppointmentsVM.patientAppointmentShareResponseModel!.patientShareWithTax!.toString().toText24(isBold: true), AppColors.blackColor, 17,
myAppointmentsVM.patientAppointmentShareResponseModel!.patientShareWithTax!.toString().toText24(isBold: true), AppColors.blackColor, 17,
isSaudiCurrency: true), isSaudiCurrency: true),
], ],
).paddingSymmetrical(24.h, 0.h), ).paddingSymmetrical(24.h, 0.h),
//TODO: Add Apple Pay Privileges //TODO: Add Apple Pay Privileges
Utils.buildSvgWithAssets( Platform.isIOS
? Utils.buildSvgWithAssets(
icon: AppAssets.apple_pay_button, icon: AppAssets.apple_pay_button,
width: 200.h, width: 200.h,
height: 80.h, height: 80.h,
@ -286,7 +283,8 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
).paddingSymmetrical(24.h, 0.h).onPress(() { ).paddingSymmetrical(24.h, 0.h).onPress(() {
// payfortVM.setIsApplePayConfigurationLoading(true); // payfortVM.setIsApplePayConfigurationLoading(true);
startApplePay(); startApplePay();
}), })
: SizedBox(height: 12.h),
SizedBox(height: 12.h), SizedBox(height: 12.h),
], ],
); );
@ -389,12 +387,12 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage( CustomPageRoute(
page: LandingNavigation(), page: LandingNavigation(),
), ),
(r) => false); (r) => false);
Navigator.of(context).push( Navigator.of(context).push(
FadePage(page: MyAppointmentsPage()), CustomPageRoute(page: MyAppointmentsPage()),
); );
}); });
}); });
@ -528,6 +526,7 @@ class _AppointmentPaymentPageState extends State<AppointmentPaymentPage> {
onSucceeded: (successResult) async { onSucceeded: (successResult) async {
Navigator.of(context).pop(); Navigator.of(context).pop();
log("successResult: ${successResult.responseMessage.toString()}"); log("successResult: ${successResult.responseMessage.toString()}");
selectedPaymentMethod = successResult.paymentOption ?? "VISA";
checkPaymentStatus(); checkPaymentStatus();
}, },
// projectId: appo.projectID, // projectId: appo.projectID,

@ -6,6 +6,7 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_card.dart'; import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_card.dart';
import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
@ -85,7 +86,15 @@ class _MyAppointmentsPageState extends State<MyAppointmentsPage> {
: 1, : 1,
itemBuilder: (context, index) { itemBuilder: (context, index) {
return myAppointmentsVM.isMyAppointmentsLoading return myAppointmentsVM.isMyAppointmentsLoading
? const MoviesShimmerWidget().paddingSymmetrical(24.h, 0.h) ? Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
child: AppointmentCard(
patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(),
myAppointmentsViewModel: myAppointmentsViewModel,
isLoading: true,
isFromHomePage: false,
),
).paddingSymmetrical(24.h, 0.h)
: myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty : myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty
? AnimationConfiguration.staggeredList( ? AnimationConfiguration.staggeredList(
position: index, position: index,
@ -100,6 +109,8 @@ class _MyAppointmentsPageState extends State<MyAppointmentsPage> {
child: AppointmentCard( child: AppointmentCard(
patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index], patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
myAppointmentsViewModel: myAppointmentsViewModel, myAppointmentsViewModel: myAppointmentsViewModel,
isLoading: false,
isFromHomePage: false,
), ),
).paddingSymmetrical(24.h, 0.h), ).paddingSymmetrical(24.h, 0.h),
), ),

@ -16,15 +16,16 @@ import 'package:hmg_patient_app_new/presentation/appointments/appointment_detail
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:smooth_corner/smooth_corner.dart';
class AppointmentCard extends StatefulWidget { class AppointmentCard extends StatefulWidget {
AppointmentCard({super.key, required this.patientAppointmentHistoryResponseModel, required this.myAppointmentsViewModel, this.isLoading = false}); AppointmentCard({super.key, required this.patientAppointmentHistoryResponseModel, required this.myAppointmentsViewModel, this.isLoading = false, this.isFromHomePage = false});
PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel; PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel;
MyAppointmentsViewModel myAppointmentsViewModel; MyAppointmentsViewModel myAppointmentsViewModel;
bool isLoading; bool isLoading;
bool isFromHomePage;
@override @override
State<AppointmentCard> createState() => _AppointmentCardState(); State<AppointmentCard> createState() => _AppointmentCardState();
@ -38,7 +39,7 @@ class _AppointmentCardState extends State<AppointmentCard> {
onTap: () { onTap: () {
Navigator.of(context) Navigator.of(context)
.push( .push(
FadePage( CustomPageRoute(
page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel),
), ),
) )
@ -66,7 +67,9 @@ class _AppointmentCardState extends State<AppointmentCard> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
CustomButton( CustomButton(
text: appState.isArabic() text: widget.isLoading
? "OutPatient"
: appState.isArabic()
? widget.patientAppointmentHistoryResponseModel.isInOutPatientDescriptionN! ? widget.patientAppointmentHistoryResponseModel.isInOutPatientDescriptionN!
: widget.patientAppointmentHistoryResponseModel.isInOutPatientDescription!, : widget.patientAppointmentHistoryResponseModel.isInOutPatientDescription!,
onPressed: () {}, onPressed: () {},
@ -85,7 +88,7 @@ class _AppointmentCardState extends State<AppointmentCard> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
CustomButton( CustomButton(
text: AppointmentType.getAppointmentStatusType(widget.patientAppointmentHistoryResponseModel.patientStatusType!), text: widget.isLoading ? "Booked" : AppointmentType.getAppointmentStatusType(widget.patientAppointmentHistoryResponseModel.patientStatusType!),
onPressed: () {}, onPressed: () {},
backgroundColor: AppColors.successColor.withOpacity(0.1), backgroundColor: AppColors.successColor.withOpacity(0.1),
borderColor: AppColors.successColor.withOpacity(0.0), borderColor: AppColors.successColor.withOpacity(0.0),
@ -99,11 +102,11 @@ class _AppointmentCardState extends State<AppointmentCard> {
], ],
), ),
], ],
), ).toShimmer2(isShow: widget.isLoading),
), ),
// TODO: Implement the logic to enable/disable the switch based on reminder status // TODO: Implement the logic to enable/disable the switch based on reminder status
AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel) AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)
? SizedBox() ? SizedBox().toShimmer2(isShow: widget.isLoading)
: Switch( : Switch(
activeColor: AppColors.successColor, activeColor: AppColors.successColor,
activeTrackColor: AppColors.successColor.withValues(alpha: .15), activeTrackColor: AppColors.successColor.withValues(alpha: .15),
@ -115,13 +118,13 @@ class _AppointmentCardState extends State<AppointmentCard> {
return const Icon(Icons.close); // Icon when switch is OFF return const Icon(Icons.close); // Icon when switch is OFF
}, },
), ),
value: widget.patientAppointmentHistoryResponseModel.hasReminder!, value: widget.isLoading ? false : widget.patientAppointmentHistoryResponseModel.hasReminder!,
onChanged: (newValue) { onChanged: (newValue) {
setState(() { setState(() {
widget.myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); widget.myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel);
}); });
}, },
), ).toShimmer2(isShow: widget.isLoading),
], ],
), ),
SizedBox(height: 16.h), SizedBox(height: 16.h),
@ -129,30 +132,38 @@ class _AppointmentCardState extends State<AppointmentCard> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Image.network( Image.network(
widget.patientAppointmentHistoryResponseModel.doctorImageURL!, widget.isLoading ? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png" : widget.patientAppointmentHistoryResponseModel.doctorImageURL!,
width: 63.h, width: 63.h,
height: 63.h, height: 63.h,
fit: BoxFit.fill, fit: BoxFit.fill,
).circle(100), ).circle(100).toShimmer2(isShow: widget.isLoading),
SizedBox(width: 16.h), SizedBox(width: 16.h),
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
widget.patientAppointmentHistoryResponseModel.doctorNameObj!.toText16(isBold: true), (widget.isLoading ? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png" : widget.patientAppointmentHistoryResponseModel.doctorNameObj!)
.toText16(isBold: true)
.toShimmer2(isShow: widget.isLoading),
SizedBox(height: 8.h),
Wrap( Wrap(
direction: Axis.horizontal, direction: Axis.horizontal,
spacing: 3.h, spacing: 3.h,
runSpacing: 4.h, runSpacing: 4.h,
children: [ children: [
AppCustomChipWidget(labelText: widget.patientAppointmentHistoryResponseModel.clinicName!), widget.isFromHomePage ? SizedBox.shrink() : AppCustomChipWidget(labelText: widget.isLoading ? "Cardiology" : widget.patientAppointmentHistoryResponseModel.clinicName!).toShimmer2(isShow: widget.isLoading),
AppCustomChipWidget(labelText: widget.patientAppointmentHistoryResponseModel.projectName!), widget.isFromHomePage ? SizedBox.shrink() : AppCustomChipWidget(labelText: widget.isLoading ? "Olaya" : widget.patientAppointmentHistoryResponseModel.projectName!).toShimmer2(isShow: widget.isLoading),
AppCustomChipWidget( AppCustomChipWidget(
icon: AppAssets.appointment_calendar_icon, icon: AppAssets.appointment_calendar_icon,
labelText: DateUtil.formatDateToDate(DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), false)), labelText:
widget.isLoading ? "Cardiology" : DateUtil.formatDateToDate(DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), false))
.toShimmer2(isShow: widget.isLoading),
AppCustomChipWidget( AppCustomChipWidget(
icon: AppAssets.appointment_time_icon, icon: AppAssets.appointment_time_icon,
labelText: DateUtil.formatDateToTimeLang(DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), false)), labelText: widget.isLoading
? "Cardiology"
: DateUtil.formatDateToTimeLang(DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), false))
.toShimmer2(isShow: widget.isLoading),
], ],
), ),
], ],
@ -166,12 +177,12 @@ class _AppointmentCardState extends State<AppointmentCard> {
Expanded( Expanded(
flex: 6, flex: 6,
child: AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel) child: AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)
? getArrivedAppointmentButton() ? getArrivedAppointmentButton().toShimmer2(isShow: widget.isLoading)
: CustomButton( : CustomButton(
text: AppointmentType.getNextActionText(widget.patientAppointmentHistoryResponseModel.nextAction), text: AppointmentType.getNextActionText(widget.patientAppointmentHistoryResponseModel.nextAction),
onPressed: () { onPressed: () {
Navigator.of(context) Navigator.of(context)
.push(FadePage( .push(CustomPageRoute(
page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel),
)) ))
.then((val) { .then((val) {
@ -189,8 +200,8 @@ class _AppointmentCardState extends State<AppointmentCard> {
height: 40.h, height: 40.h,
icon: AppointmentType.getNextActionIcon(widget.patientAppointmentHistoryResponseModel.nextAction), icon: AppointmentType.getNextActionIcon(widget.patientAppointmentHistoryResponseModel.nextAction),
iconColor: AppointmentType.getNextActionTextColor(widget.patientAppointmentHistoryResponseModel.nextAction), iconColor: AppointmentType.getNextActionTextColor(widget.patientAppointmentHistoryResponseModel.nextAction),
iconSize: 14.h, iconSize: 15.h,
), ).toShimmer2(isShow: widget.isLoading),
), ),
SizedBox(width: 8.h), SizedBox(width: 8.h),
Expanded( Expanded(
@ -211,10 +222,10 @@ class _AppointmentCardState extends State<AppointmentCard> {
fit: BoxFit.contain, fit: BoxFit.contain,
), ),
), ),
).onPress(() { ).toShimmer2(isShow: widget.isLoading).onPress(() {
Navigator.of(context) Navigator.of(context)
.push( .push(
FadePage( CustomPageRoute(
page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel),
), ),
) )

@ -19,6 +19,7 @@ import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:barcode_scan2/barcode_scan2.dart'; import 'package:barcode_scan2/barcode_scan2.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/nfc/nfc_reader_sheet.dart'; import 'package:hmg_patient_app_new/widgets/nfc/nfc_reader_sheet.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
class AppointmentCheckinBottomSheet extends StatelessWidget { class AppointmentCheckinBottomSheet extends StatelessWidget {
@ -110,13 +111,15 @@ class AppointmentCheckinBottomSheet extends StatelessWidget {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Column( Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
title.toText16(isBold: true, color: AppColors.textColor), title.toText16(isBold: true, color: AppColors.textColor),
subTitle.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor), subTitle.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
], ],
), ),
),
Utils.buildSvgWithAssets( Utils.buildSvgWithAssets(
icon: AppAssets.forward_arrow_icon, icon: AppAssets.forward_arrow_icon,
iconColor: AppColors.blackColor, iconColor: AppColors.blackColor,
@ -144,12 +147,12 @@ class AppointmentCheckinBottomSheet extends StatelessWidget {
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage( CustomPageRoute(
page: LandingNavigation(), page: LandingNavigation(),
), ),
(r) => false); (r) => false);
Navigator.of(context).push( Navigator.of(context).push(
FadePage(page: MyAppointmentsPage()), CustomPageRoute(page: MyAppointmentsPage()),
); );
}, isFullScreen: false); }, isFullScreen: false);
}, },

@ -65,7 +65,7 @@ class _SavedLogin extends State<SavedLogin> {
body: SafeArea( body: SafeArea(
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 24.h), padding: EdgeInsets.symmetric(horizontal: 24.h),
child: Column( child: appState.getSelectDeviceByImeiRespModelElement != null ? Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
const Spacer(flex: 2), const Spacer(flex: 2),
@ -297,7 +297,7 @@ class _SavedLogin extends State<SavedLogin> {
), ),
const SizedBox(height: 20), const SizedBox(height: 20),
], ],
), ) : SizedBox.shrink(),
), ),
), ),
); );

@ -14,15 +14,14 @@ import 'package:hmg_patient_app_new/features/my_appointments/appointment_via_reg
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/appointments/widgets/faculity_selection/facility_type_selection_widget.dart'; import 'package:hmg_patient_app_new/presentation/appointments/widgets/faculity_selection/facility_type_selection_widget.dart';
import 'package:hmg_patient_app_new/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart' import 'package:hmg_patient_app_new/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart' show RegionBottomSheetBody;
show RegionBottomSheetBody;
import 'package:hmg_patient_app_new/presentation/book_appointment/search_doctor_by_name.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/search_doctor_by_name.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart';
import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart' import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart' show showCommonBottomSheetWithoutHeight;
show showCommonBottomSheetWithoutHeight;
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -52,13 +51,12 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
bookAppointmentsViewModel = Provider.of<BookAppointmentsViewModel>(context, listen: false); bookAppointmentsViewModel = Provider.of<BookAppointmentsViewModel>(context, listen: false);
appState = getIt.get<AppState>(); appState = getIt.get<AppState>();
regionalViewModel = regionalViewModel = Provider.of<AppointmentViaRegionViewmodel>(context, listen: true);
Provider.of<AppointmentViaRegionViewmodel>(context, listen: true);
return Scaffold( return Scaffold(
backgroundColor: AppColors.bgScaffoldColor, backgroundColor: AppColors.bgScaffoldColor,
body: CollapsingListView( body: CollapsingListView(
title: LocaleKeys.bookAppo.tr(context: context), title: LocaleKeys.bookAppo.tr(context: context),
isLeading: false, isLeading: Navigator.canPop(context),
child: SingleChildScrollView( child: SingleChildScrollView(
child: Consumer<BookAppointmentsViewModel>(builder: (context, bookAppointmentsVM, child) { child: Consumer<BookAppointmentsViewModel>(builder: (context, bookAppointmentsVM, child) {
return Column( return Column(
@ -125,7 +123,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
bookAppointmentsViewModel.setLoadSpecificClinic(false); bookAppointmentsViewModel.setLoadSpecificClinic(false);
bookAppointmentsViewModel.setProjectID(null); bookAppointmentsViewModel.setProjectID(null);
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: SelectClinicPage(), page: SelectClinicPage(),
), ),
); );
@ -154,7 +152,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
).onPress(() { ).onPress(() {
bookAppointmentsViewModel.setIsDoctorSearchByNameStarted(false); bookAppointmentsViewModel.setIsDoctorSearchByNameStarted(false);
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: SearchDoctorByName(), page: SearchDoctorByName(),
), ),
); );
@ -198,15 +196,10 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
void openRegionListBottomSheet(BuildContext context) { void openRegionListBottomSheet(BuildContext context) {
regionalViewModel.flush(); regionalViewModel.flush();
// AppointmentViaRegionViewmodel? viewmodel = null; // AppointmentViaRegionViewmodel? viewmodel = null;
showCommonBottomSheetWithoutHeight(context, showCommonBottomSheetWithoutHeight(context, title: "", titleWidget: Consumer<AppointmentViaRegionViewmodel>(builder: (_, data, __) => getTitle(data)), isDismissible: false,
title: "",
titleWidget: Consumer<AppointmentViaRegionViewmodel>(
builder: (_, data, __) => getTitle(data)),
isDismissible: false,
child: Consumer<AppointmentViaRegionViewmodel>(builder: (_, data, __) { child: Consumer<AppointmentViaRegionViewmodel>(builder: (_, data, __) {
return getRegionalSelectionWidget(data); return getRegionalSelectionWidget(data);
}), callBackFunc: () { }), callBackFunc: () {});
});
} }
Widget getRegionalSelectionWidget(AppointmentViaRegionViewmodel data) { Widget getRegionalSelectionWidget(AppointmentViaRegionViewmodel data) {
@ -215,7 +208,9 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
} }
if (data.bottomSheetState == AppointmentViaRegionState.TYPE_SELECTION) { if (data.bottomSheetState == AppointmentViaRegionState.TYPE_SELECTION) {
bookAppointmentsViewModel.resetFilterList(); bookAppointmentsViewModel.resetFilterList();
return FacilityTypeSelectionWidget(selectedRegion: data.selectedRegionId??"",); return FacilityTypeSelectionWidget(
selectedRegion: data.selectedRegionId ?? "",
);
} }
if (data.bottomSheetState == AppointmentViaRegionState.HOSPITAL_SELECTION) { if (data.bottomSheetState == AppointmentViaRegionState.HOSPITAL_SELECTION) {
return HospitalBottomSheetBody(); return HospitalBottomSheetBody();
@ -225,9 +220,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
bookAppointmentsViewModel.setIsClinicsListLoading(true); bookAppointmentsViewModel.setIsClinicsListLoading(true);
bookAppointmentsViewModel.setLoadSpecificClinic(true); bookAppointmentsViewModel.setLoadSpecificClinic(true);
bookAppointmentsViewModel.setProjectID(regionalViewModel.selectedHospital?.hospitalList.first?.mainProjectID.toString()); bookAppointmentsViewModel.setProjectID(regionalViewModel.selectedHospital?.hospitalList.first?.mainProjectID.toString());
} else {
}
else {
SizedBox.shrink(); SizedBox.shrink();
} }
return SizedBox.shrink(); return SizedBox.shrink();
@ -237,9 +230,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
if (data.selectedRegionId == null) { if (data.selectedRegionId == null) {
return LocaleKeys.selectRegion.tr().toText20(weight: FontWeight.w600); return LocaleKeys.selectRegion.tr().toText20(weight: FontWeight.w600);
} else { } else {
return Utils.buildSvgWithAssets( return Utils.buildSvgWithAssets(icon: AppAssets.arrow_back, iconColor: Color(0xff2B353E)).onPress(() {
icon: AppAssets.arrow_back, iconColor: Color(0xff2B353E))
.onPress(() {
data.handleBackPress(); data.handleBackPress();
}); });
} }

@ -16,6 +16,7 @@ import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -214,7 +215,7 @@ class _ReviewAppointmentPageState extends State<ReviewAppointmentPage> {
LoadingUtils.hideFullScreenLoader(); LoadingUtils.hideFullScreenLoader();
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage( CustomPageRoute(
page: LandingNavigation(), page: LandingNavigation(),
), ),
(r) => false); (r) => false);

@ -18,6 +18,7 @@ import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.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/input_widget.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.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:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -122,7 +123,7 @@ class _SearchDoctorByNameState extends State<SearchDoctorByName> {
await bookAppointmentsVM.getDoctorProfile(onSuccess: (dynamic respData) { await bookAppointmentsVM.getDoctorProfile(onSuccess: (dynamic respData) {
LoaderBottomSheet.hideLoader(); LoaderBottomSheet.hideLoader();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: DoctorProfilePage(), page: DoctorProfilePage(),
), ),
); );

@ -19,6 +19,7 @@ import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/clinic
import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -141,13 +142,13 @@ class _SelectClinicPageState extends State<SelectClinicPage> {
bookAppointmentsViewModel.setIsDoctorsListLoading(true); bookAppointmentsViewModel.setIsDoctorsListLoading(true);
if (clinic.isLiveCareClinicAndOnline ?? false) { if (clinic.isLiveCareClinicAndOnline ?? false) {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: SelectLivecareClinicPage(), page: SelectLivecareClinicPage(),
), ),
); );
} else { } else {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: SelectDoctorPage(), page: SelectDoctorPage(),
), ),
); );

@ -20,6 +20,7 @@ import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.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/input_widget.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.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:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -124,7 +125,7 @@ class _SelectDoctorPageState extends State<SelectDoctorPage> {
await bookAppointmentsVM.getDoctorProfile(onSuccess: (dynamic respData) { await bookAppointmentsVM.getDoctorProfile(onSuccess: (dynamic respData) {
LoaderBottomSheet.hideLoader(); LoaderBottomSheet.hideLoader();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: DoctorProfilePage(), page: DoctorProfilePage(),
), ),
); );

@ -10,6 +10,7 @@ import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_
import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
class SelectLivecareClinicPage extends StatelessWidget { class SelectLivecareClinicPage extends StatelessWidget {
@ -122,7 +123,7 @@ class SelectLivecareClinicPage extends StatelessWidget {
onPressed: () { onPressed: () {
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: SelectDoctorPage(), page: SelectDoctorPage(),
), ),
); );

@ -19,6 +19,7 @@ import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:lottie/lottie.dart'; import 'package:lottie/lottie.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -106,7 +107,7 @@ class _AppointmentCalendarState extends State<AppointmentCalendar> {
), ),
view: CalendarView.month, view: CalendarView.month,
todayHighlightColor: Colors.transparent, todayHighlightColor: Colors.transparent,
todayTextStyle: TextStyle(color: AppColors.textColor), todayTextStyle: TextStyle(color: AppColors.textColor, fontWeight: FontWeight.bold),
selectionDecoration: ShapeDecoration( selectionDecoration: ShapeDecoration(
color: AppColors.transparent, color: AppColors.transparent,
shape: SmoothRectangleBorder( shape: SmoothRectangleBorder(
@ -151,8 +152,8 @@ class _AppointmentCalendarState extends State<AppointmentCalendar> {
child: Wrap( child: Wrap(
direction: Axis.horizontal, direction: Axis.horizontal,
alignment: WrapAlignment.start, alignment: WrapAlignment.start,
spacing: 8.h, spacing: 6.h,
runSpacing: 8.h, runSpacing: 6.h,
children: List.generate( children: List.generate(
dayEvents.length, // Generate a large number of items to ensure scrolling dayEvents.length, // Generate a large number of items to ensure scrolling
(index) => TimeSlotChip( (index) => TimeSlotChip(
@ -177,7 +178,7 @@ class _AppointmentCalendarState extends State<AppointmentCalendar> {
bookAppointmentsViewModel.setSelectedAppointmentDateTime(selectedDate, selectedTime); bookAppointmentsViewModel.setSelectedAppointmentDateTime(selectedDate, selectedTime);
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: ReviewAppointmentPage(), page: ReviewAppointmentPage(),
), ),
); );
@ -216,7 +217,7 @@ class _AppointmentCalendarState extends State<AppointmentCalendar> {
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage( CustomPageRoute(
page: LandingNavigation(), page: LandingNavigation(),
), ),
(r) => false); (r) => false);
@ -320,7 +321,7 @@ class TimeSlotChip extends StatelessWidget {
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 18.h, vertical: 8.h), padding: EdgeInsets.symmetric(horizontal: 14.h, vertical: 8.h),
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: AppColors.whiteColor, color: AppColors.whiteColor,
shape: SmoothRectangleBorder( shape: SmoothRectangleBorder(

@ -13,6 +13,7 @@ import 'package:hmg_patient_app_new/presentation/habib_wallet/recharge_wallet_pa
import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -84,7 +85,7 @@ class _HabibWalletState extends State<HabibWalletPage> {
text: "Recharge".needTranslation, text: "Recharge".needTranslation,
onPressed: () { onPressed: () {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: RechargeWalletPage(), page: RechargeWalletPage(),
), ),
); );

@ -16,10 +16,12 @@ 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/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart'; import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/appointments/my_appointments_page.dart'; import 'package:hmg_patient_app_new/presentation/appointments/my_appointments_page.dart';
import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_card.dart';
import 'package:hmg_patient_app_new/presentation/authentication/quick_login.dart'; import 'package:hmg_patient_app_new/presentation/authentication/quick_login.dart';
import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart';
import 'package:hmg_patient_app_new/presentation/home/data/landing_page_data.dart'; import 'package:hmg_patient_app_new/presentation/home/data/landing_page_data.dart';
@ -103,9 +105,7 @@ class _LandingPageState extends State<LandingPage> {
appState.isAuthenticated appState.isAuthenticated
? WelcomeWidget( ? WelcomeWidget(
onTap: () { onTap: () {
Navigator.of(context).push( Navigator.of(context).push(springPageRoute(ProfileSettings()));
springPageRoute(ProfileSettings())
);
}, },
name: ('${appState.getAuthenticatedUser()!.firstName!} ${appState.getAuthenticatedUser()!.lastName!}'), name: ('${appState.getAuthenticatedUser()!.firstName!} ${appState.getAuthenticatedUser()!.lastName!}'),
imageUrl: appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, imageUrl: appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg,
@ -130,7 +130,7 @@ class _LandingPageState extends State<LandingPage> {
children: [ children: [
Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 20, width: 20).onPress(() { Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 20, width: 20).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: MedicalFilePage(), page: MedicalFilePage(),
// page: LoginScreen(), // page: LoginScreen(),
), ),
@ -138,7 +138,7 @@ class _LandingPageState extends State<LandingPage> {
}), }),
Utils.buildSvgWithAssets(icon: AppAssets.search_icon, height: 20, width: 20).onPress(() { Utils.buildSvgWithAssets(icon: AppAssets.search_icon, height: 20, width: 20).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: MedicalFilePage(), page: MedicalFilePage(),
// page: LoginScreen(), // page: LoginScreen(),
), ),
@ -146,7 +146,7 @@ class _LandingPageState extends State<LandingPage> {
}), }),
Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 20, width: 20).onPress(() { Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 20, width: 20).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: MedicalFilePage(), page: MedicalFilePage(),
// page: LoginScreen(), // page: LoginScreen(),
), ),
@ -180,62 +180,94 @@ class _LandingPageState extends State<LandingPage> {
); );
}), }),
SizedBox(height: 12.h), SizedBox(height: 12.h),
Swiper( Consumer<MyAppointmentsViewModel>(builder: (context, myAppointmentsVM, child) {
itemCount: 3, return myAppointmentsVM.isMyAppointmentsLoading
? Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
child: AppointmentCard(
patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(),
myAppointmentsViewModel: myAppointmentsViewModel,
isLoading: true,
isFromHomePage: true,
),
).paddingSymmetrical(24.h, 0.h)
: myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty
? myAppointmentsVM.patientAppointmentsHistoryList.length == 1
? Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
child: AppointmentCard(
patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList.first,
myAppointmentsViewModel: myAppointmentsViewModel,
isLoading: false,
isFromHomePage: true,
),
).paddingSymmetrical(24.h, 0.h)
: Swiper(
itemCount: myAppointmentsVM.isMyAppointmentsLoading
? 3
: myAppointmentsVM.patientAppointmentsHistoryList.length < 3
? myAppointmentsVM.patientAppointmentsHistoryList.length
: 3,
layout: SwiperLayout.STACK, layout: SwiperLayout.STACK,
loop: true, loop: true,
itemWidth: MediaQuery.of(context).size.width - 42, itemWidth: MediaQuery.of(context).size.width - 72,
indicatorLayout: PageIndicatorLayout.COLOR, indicatorLayout: PageIndicatorLayout.COLOR,
axisDirection: AxisDirection.right, axisDirection: AxisDirection.right,
controller: _controller, controller: _controller,
itemHeight: 210 + 16, itemHeight: 210 + 25,
pagination: const SwiperPagination( pagination: const SwiperPagination(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
margin: EdgeInsets.only(top: 210 + 8 + 24), margin: EdgeInsets.only(top: 210 + 8 + 24),
builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor), builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor),
), ),
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return FamilyCardWidget().paddingOnly(right: 16); return Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
child: AppointmentCard(
patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
myAppointmentsViewModel: myAppointmentsViewModel,
isLoading: false,
isFromHomePage: true,
),
);
}, },
)
: Container(
width: double.infinity,
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24, hasShadow: true),
child: Padding(
padding: EdgeInsets.all(12.h),
child: Column(
children: [
Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h),
SizedBox(height: 12.h),
"You do not have any upcoming appointment. Please book an appointment".needTranslation.toText12(isCenter: true),
SizedBox(height: 12.h),
CustomButton(
text: LocaleKeys.bookAppo.tr(context: context),
onPressed: () {
Navigator.of(context).push(
CustomPageRoute(
page: BookAppointmentPage(),
), ),
// Container( );
// width: double.infinity, },
// decoration: RoundedRectangleBorder().toSmoothCornerDecoration( backgroundColor: Color(0xffFEE9EA),
// color: AppColors.whiteColor, borderColor: Color(0xffFEE9EA),
// borderRadius: 24, textColor: Color(0xffED1C2B),
// ), fontSize: 14,
// child: Padding( fontWeight: FontWeight.w500,
// padding: EdgeInsets.all(12.h), borderRadius: 12,
// child: Column( padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
// children: [ height: 40,
// Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h), icon: AppAssets.add_icon,
// SizedBox(height: 12.h), iconColor: AppColors.primaryRedColor,
// "You do not have any upcoming appointment. Please book an appointment".toText12(isCenter: true), ),
// SizedBox(height: 12.h), ],
// CustomButton( ),
// text: LocaleKeys.bookAppo.tr(context: context), ),
// onPressed: () { ).paddingSymmetrical(24.h, 0.h);
// Navigator.of(context).push( }),
// FadePage(
// page: BookAppointmentPage(),
// ),
// );
// },
// backgroundColor: Color(0xffFEE9EA),
// borderColor: Color(0xffFEE9EA),
// textColor: Color(0xffED1C2B),
// fontSize: 14,
// fontWeight: FontWeight.w500,
// borderRadius: 12,
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
// height: 40,
// icon: AppAssets.add_icon,
// iconColor: AppColors.primaryRedColor,
// ),
// ],
// ),
// ),
// ).paddingSymmetrical(24.h, 0.h),
SizedBox(height: 12.h), SizedBox(height: 12.h),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
@ -251,7 +283,7 @@ class _LandingPageState extends State<LandingPage> {
], ],
).paddingSymmetrical(24.h, 0.h).onPress(() { ).paddingSymmetrical(24.h, 0.h).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: MedicalFilePage(), page: MedicalFilePage(),
), ),
); );

@ -8,6 +8,7 @@ import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_mode
import 'package:hmg_patient_app_new/presentation/habib_wallet/habib_wallet_page.dart'; import 'package:hmg_patient_app_new/presentation/habib_wallet/habib_wallet_page.dart';
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -98,7 +99,7 @@ class HabibWalletCard extends StatelessWidget {
], ],
).onPress(() { ).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: HabibWalletPage(), page: HabibWalletPage(),
), ),
); );

@ -7,6 +7,7 @@ import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.d
import 'package:hmg_patient_app_new/presentation/lab/lab_orders_page.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_orders_page.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/patient_sickleaves_list_page.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/patient_sickleaves_list_page.dart';
import 'package:hmg_patient_app_new/presentation/prescriptions/prescriptions_list_page.dart'; import 'package:hmg_patient_app_new/presentation/prescriptions/prescriptions_list_page.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import '../../../core/utils/utils.dart'; import '../../../core/utils/utils.dart';
@ -61,28 +62,28 @@ class SmallServiceCard extends StatelessWidget {
switch (serviceName) { switch (serviceName) {
case "lab_results": case "lab_results":
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: LabOrdersPage(), page: LabOrdersPage(),
), ),
); );
break; break;
case "radiology_results": case "radiology_results":
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: RadiologyOrdersPage(), page: RadiologyOrdersPage(),
), ),
); );
break; break;
case "prescriptions": case "prescriptions":
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: PrescriptionsListPage(), page: PrescriptionsListPage(),
), ),
); );
break; break;
case "insurance_update": case "insurance_update":
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: InsuranceHomePage(), page: InsuranceHomePage(),
), ),
); );
@ -90,7 +91,7 @@ class SmallServiceCard extends StatelessWidget {
case "my_doctors": case "my_doctors":
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: MyDoctorsPage(), page: MyDoctorsPage(),
), ),
); );
@ -98,7 +99,7 @@ class SmallServiceCard extends StatelessWidget {
case "sick_leaves": case "sick_leaves":
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: PatientSickleavesListPage(), page: PatientSickleavesListPage(),
), ),
); );

@ -40,6 +40,7 @@ import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.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/loader/bottomsheet_loader.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart'; import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -314,7 +315,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
], ],
).paddingSymmetrical(24.h, 0.h).onPress(() { ).paddingSymmetrical(24.h, 0.h).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: MyAppointmentsPage(), page: MyAppointmentsPage(),
), ),
); );
@ -447,7 +448,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
).onPress(() { ).onPress(() {
prescriptionVM.setPrescriptionsDetailsLoading(); prescriptionVM.setPrescriptionsDetailsLoading();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: PrescriptionDetailPage(prescriptionsResponseModel: prescriptionVM.patientPrescriptionOrders[index]), page: PrescriptionDetailPage(prescriptionsResponseModel: prescriptionVM.patientPrescriptionOrders[index]),
), ),
); );
@ -468,7 +469,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
text: "All Prescriptions".needTranslation, text: "All Prescriptions".needTranslation,
onPressed: () { onPressed: () {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: PrescriptionsListPage(), page: PrescriptionsListPage(),
), ),
); );
@ -526,7 +527,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
myAppointmentsViewModel.setIsPatientMyDoctorsLoading(true); myAppointmentsViewModel.setIsPatientMyDoctorsLoading(true);
myAppointmentsViewModel.getPatientMyDoctors(); myAppointmentsViewModel.getPatientMyDoctors();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: MyDoctorsPage(), page: MyDoctorsPage(),
), ),
); );
@ -631,7 +632,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
iconSize: 40.h, iconSize: 40.h,
).onPress(() { ).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: VaccineListPage(), page: VaccineListPage(),
), ),
); );
@ -673,7 +674,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
iconSize: 36.h) iconSize: 36.h)
.onPress(() { .onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: InsuranceHomePage(), page: InsuranceHomePage(),
), ),
); );
@ -747,7 +748,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
medicalFileViewModel.setIsPatientMedicalReportsLoading(true); medicalFileViewModel.setIsPatientMedicalReportsLoading(true);
medicalFileViewModel.getPatientMedicalReportList(); medicalFileViewModel.getPatientMedicalReportList();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: MedicalReportsPage(), page: MedicalReportsPage(),
), ),
); );
@ -761,7 +762,7 @@ class _MedicalFilePageState extends State<MedicalFilePage> {
iconSize: 40.h, iconSize: 40.h,
).onPress(() { ).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: PatientSickleavesListPage(), page: PatientSickleavesListPage(),
), ),
); );

@ -13,6 +13,7 @@ import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/appointments/appointment_details_page.dart'; import 'package:hmg_patient_app_new/presentation/appointments/appointment_details_page.dart';
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
class MedicalFileAppointmentCard extends StatelessWidget { class MedicalFileAppointmentCard extends StatelessWidget {
@ -86,7 +87,7 @@ class MedicalFileAppointmentCard extends StatelessWidget {
text: AppointmentType.getNextActionText(patientAppointmentHistoryResponseModel.nextAction), text: AppointmentType.getNextActionText(patientAppointmentHistoryResponseModel.nextAction),
onPressed: () { onPressed: () {
Navigator.of(context) Navigator.of(context)
.push(FadePage( .push(CustomPageRoute(
page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel), page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel),
)) ))
.then((val) { .then((val) {
@ -129,7 +130,7 @@ class MedicalFileAppointmentCard extends StatelessWidget {
).toShimmer2(isShow: myAppointmentsViewModel.isMyAppointmentsLoading).onPress(() { ).toShimmer2(isShow: myAppointmentsViewModel.isMyAppointmentsLoading).onPress(() {
Navigator.of(context) Navigator.of(context)
.push( .push(
FadePage( CustomPageRoute(
page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel), page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel),
), ),
) )

@ -17,6 +17,7 @@ import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.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:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:open_filex/open_filex.dart'; import 'package:open_filex/open_filex.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -147,7 +148,7 @@ class PatientSickLeaveCard extends StatelessWidget {
), ),
).toShimmer2(isShow: isLoading).onPress(() { ).toShimmer2(isShow: isLoading).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: PatientSickleavesListPage(), page: PatientSickleavesListPage(),
), ),
); );

@ -15,6 +15,7 @@ import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/presentation/prescriptions/prescription_detail_page.dart'; import 'package:hmg_patient_app_new/presentation/prescriptions/prescription_detail_page.dart';
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart'; import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -258,7 +259,7 @@ class _PrescriptionsListPageState extends State<PrescriptionsListPage> {
).onPress(() { ).onPress(() {
model.setPrescriptionsDetailsLoading(); model.setPrescriptionsDetailsLoading();
Navigator.of(context).push( Navigator.of(context).push(
FadePage( CustomPageRoute(
page: PrescriptionDetailPage(prescriptionsResponseModel: prescription), page: PrescriptionDetailPage(prescriptionsResponseModel: prescription),
), ),
); );

@ -115,7 +115,7 @@ class _ProfileSettingsState extends State<ProfileSettings> {
iconSize: 24.h, iconSize: 24.h,
iconColor: AppColors.infoColor, iconColor: AppColors.infoColor,
textColor: AppColors.infoColor, textColor: AppColors.infoColor,
text: "Recharge", text: "Recharge".needTranslation,
borderWidth: 0.h, borderWidth: 0.h,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
borderColor: Colors.transparent, borderColor: Colors.transparent,

@ -12,8 +12,11 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/presentation/radiology/radiology_result_page.dart';
import 'package:hmg_patient_app_new/theme/colors.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/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart'; import 'package:hmg_patient_app_new/widgets/shimmer/movies_shimmer_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -49,10 +52,11 @@ class _RadiologyOrdersPageState extends State<RadiologyOrdersPage> {
child: SingleChildScrollView( child: SingleChildScrollView(
child: Consumer<RadiologyViewModel>( child: Consumer<RadiologyViewModel>(
builder: (context, model, child) { builder: (context, model, child) {
return Column( return Padding(
padding: EdgeInsets.symmetric(horizontal: 24.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SizedBox(height: 16.h),
// Expandable list // Expandable list
ListView.builder( ListView.builder(
shrinkWrap: true, shrinkWrap: true,
@ -60,9 +64,7 @@ class _RadiologyOrdersPageState extends State<RadiologyOrdersPage> {
itemCount: model.isRadiologyOrdersLoading ? 5 : model.patientRadiologyOrders.length, itemCount: model.isRadiologyOrdersLoading ? 5 : model.patientRadiologyOrders.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final isExpanded = expandedIndex == index; final isExpanded = expandedIndex == index;
return model.isRadiologyOrdersLoading return AnimationConfiguration.staggeredList(
? const MoviesShimmerWidget()
: AnimationConfiguration.staggeredList(
position: index, position: index,
duration: const Duration(milliseconds: 500), duration: const Duration(milliseconds: 500),
child: SlideAnimation( child: SlideAnimation(
@ -87,71 +89,54 @@ class _RadiologyOrdersPageState extends State<RadiologyOrdersPage> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( AppCustomChipWidget(
mainAxisAlignment: MainAxisAlignment.spaceBetween, labelText: LocaleKeys.resultsAvailable.tr(context: context),
children: [
CustomButton(
text: LocaleKeys.resultsAvailable.tr(context: context),
onPressed: () {},
backgroundColor: AppColors.successColor.withOpacity(0.15), backgroundColor: AppColors.successColor.withOpacity(0.15),
borderColor: AppColors.successColor.withOpacity(0.01),
textColor: AppColors.successColor, textColor: AppColors.successColor,
fontSize: 10, ).toShimmer2(isShow: model.isRadiologyOrdersLoading, width: 100),
fontWeight: FontWeight.w500,
borderRadius: 8,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 30.h,
),
Icon(isExpanded ? Icons.expand_less : Icons.expand_more),
],
),
SizedBox(height: 8.h), SizedBox(height: 8.h),
Row( Row(
children: [ children: [
Image.network( Image.network(
model.patientRadiologyOrders[index].doctorImageURL!, model.isRadiologyOrdersLoading
? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png"
: model.patientRadiologyOrders[index].doctorImageURL!,
width: 24.h, width: 24.h,
height: 24.h, height: 24.h,
fit: BoxFit.fill, fit: BoxFit.fill,
).circle(100), ).circle(100).toShimmer2(isShow: model.isRadiologyOrdersLoading),
SizedBox(width: 4.h), SizedBox(width: 4.h),
model.patientRadiologyOrders[index].doctorName!.toText16(isBold: true) (model.isRadiologyOrdersLoading ? "Dr John Smith" : model.patientRadiologyOrders[index].doctorName!)
.toText16(isBold: true)
.toShimmer2(isShow: model.isRadiologyOrdersLoading)
], ],
), ),
SizedBox(height: 8.h), SizedBox(height: 8.h),
Row( Wrap(
direction: Axis.horizontal,
spacing: 3.h,
runSpacing: 4.h,
children: [ children: [
CustomButton( AppCustomChipWidget(
text: DateUtil.formatDateToDate(DateUtil.convertStringToDate(model.patientRadiologyOrders[index].orderDate), false), icon: AppAssets.doctor_calendar_icon,
onPressed: () {}, labelText: model.isRadiologyOrdersLoading
backgroundColor: AppColors.greyColor, ? "01 Jan 2025"
borderColor: AppColors.greyColor, : DateUtil.formatDateToDate(DateUtil.convertStringToDate(model.patientRadiologyOrders[index].orderDate), false),
textColor: AppColors.blackColor, ).toShimmer2(isShow: model.isRadiologyOrdersLoading),
fontSize: 12, AppCustomChipWidget(
fontWeight: FontWeight.w500, labelText: model.isRadiologyOrdersLoading ? "01 Jan 2025" : model.patientRadiologyOrders[index].clinicDescription!,
borderRadius: 8, ).toShimmer2(isShow: model.isRadiologyOrdersLoading),
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 24.h, // AppCustomChipWidget(labelText: "").toShimmer2(isShow: model.isRadiologyOrdersLoading, width: 16.h),
), // AppCustomChipWidget(labelText: "").toShimmer2(isShow: model.isRadiologyOrdersLoading, width: 16.h),
SizedBox(width: 8.h),
CustomButton(
text: model.patientRadiologyOrders[index].clinicDescription!,
onPressed: () {},
backgroundColor: AppColors.greyColor,
borderColor: AppColors.greyColor,
textColor: AppColors.blackColor,
fontSize: 12,
fontWeight: FontWeight.w500,
borderRadius: 8,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 24.h,
),
], ],
), ),
], ],
), ),
), ),
AnimatedCrossFade( model.isRadiologyOrdersLoading
? SizedBox.shrink()
: AnimatedCrossFade(
firstChild: SizedBox.shrink(), firstChild: SizedBox.shrink(),
secondChild: Padding( secondChild: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.h, vertical: 8.h), padding: EdgeInsets.symmetric(horizontal: 16.h, vertical: 8.h),
@ -171,7 +156,13 @@ class _RadiologyOrdersPageState extends State<RadiologyOrdersPage> {
iconColor: AppColors.primaryRedColor, iconColor: AppColors.primaryRedColor,
iconSize: 16.h, iconSize: 16.h,
text: LocaleKeys.viewReport.tr(context: context), text: LocaleKeys.viewReport.tr(context: context),
onPressed: () {}, onPressed: () {
Navigator.of(context).push(
CustomPageRoute(
page: RadiologyResultPage(patientRadiologyResponseModel: model.patientRadiologyOrders[index]),
),
);
},
backgroundColor: AppColors.secondaryLightRedColor, backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor, borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor, textColor: AppColors.primaryRedColor,
@ -199,6 +190,7 @@ class _RadiologyOrdersPageState extends State<RadiologyOrdersPage> {
}, },
), ),
], ],
),
); );
}, },
), ),

@ -0,0 +1,76 @@
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';
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/radiology/models/resp_models/patient_radiology_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
class RadiologyResultPage extends StatefulWidget {
RadiologyResultPage({super.key, required this.patientRadiologyResponseModel});
PatientRadiologyResponseModel patientRadiologyResponseModel;
@override
State<RadiologyResultPage> createState() => _RadiologyResultPageState();
}
class _RadiologyResultPageState extends State<RadiologyResultPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.bgScaffoldColor,
body: CollapsingListView(
title: "Radiology Result".needTranslation,
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 24.h),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 24.h),
Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
borderRadius: 20.h,
hasShadow: true,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 16.h),
widget.patientRadiologyResponseModel.description!.toText16(isBold: true),
SizedBox(height: 8.h),
widget.patientRadiologyResponseModel.reportData!.trim().toText12(isBold: true, color: AppColors.textColorLight),
SizedBox(height: 16.h),
CustomButton(
text: "View Radiology Image".needTranslation,
onPressed: () async {},
backgroundColor: AppColors.primaryRedColor,
borderColor: AppColors.primaryRedColor,
textColor: AppColors.whiteColor,
fontSize: 14,
fontWeight: FontWeight.w500,
borderRadius: 12,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 40.h,
icon: AppAssets.calendar,
iconColor: AppColors.whiteColor,
iconSize: 20.h,
),
SizedBox(height: 16.h),
],
).paddingSymmetrical(16.h, 0.h),
),
SizedBox(height: 24.h),
],
),
),
),
),
);
}
}

@ -21,6 +21,7 @@ import 'package:provider/provider.dart';
import 'core/cache_consts.dart'; import 'core/cache_consts.dart';
import 'core/utils/local_notifications.dart'; import 'core/utils/local_notifications.dart';
import 'core/utils/push_notification_handler.dart'; import 'core/utils/push_notification_handler.dart';
import 'widgets/routes/custom_page_route.dart';
class SplashPage extends StatefulWidget { class SplashPage extends StatefulWidget {
@override @override
@ -42,7 +43,7 @@ class _SplashScreenState extends State<SplashPage> {
Timer(Duration(seconds: 2, milliseconds: 500), () async { Timer(Duration(seconds: 2, milliseconds: 500), () async {
LocalNotification.init(onNotificationClick: (payload) {}); LocalNotification.init(onNotificationClick: (payload) {});
Navigator.of(context).pushReplacement( Navigator.of(context).pushReplacement(
FadePage( CustomPageRoute(
page: LandingNavigation(), page: LandingNavigation(),
// page: LoginScreen(), // page: LoginScreen(),
), ),

Loading…
Cancel
Save