import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/hmg_services_component_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/blood_donation/blood_donation_page.dart'; import 'package:hmg_patient_app_new/presentation/contact_us/contact_us.dart'; import 'package:hmg_patient_app_new/presentation/habib_wallet/habib_wallet_page.dart'; import 'package:hmg_patient_app_new/presentation/habib_wallet/recharge_wallet_page.dart'; import 'package:hmg_patient_app_new/presentation/hmg_services/services_view.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart'; import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.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/routes/custom_page_route.dart'; import 'package:provider/provider.dart'; import '../../core/dependencies.dart' show getIt; class ServicesPage extends StatelessWidget { ServicesPage({super.key}); late BloodDonationViewModel bloodDonationViewModel; late MedicalFileViewModel medicalFileViewModel; late final List hmgServices = [ HmgServicesComponentModel( 11, "Emergency Services".needTranslation, "".needTranslation, AppAssets.emergency_services_icon, bgColor: AppColors.primaryRedColor, true, route: AppRoutes.eReferralPage, ), HmgServicesComponentModel( 11, "Book\nAppointment".needTranslation, "".needTranslation, AppAssets.appointment_calendar_icon, bgColor: AppColors.bookAppointment, true, route: AppRoutes.eReferralPage, ), HmgServicesComponentModel( 5, "Complete Checkup".needTranslation, "".needTranslation, AppAssets.comprehensiveCheckup, bgColor: AppColors.bgGreenColor, true, route: AppRoutes.comprehensiveCheckupPage, ), HmgServicesComponentModel( 11, "E-Referral Services".needTranslation, "".needTranslation, AppAssets.eReferral, bgColor: AppColors.eReferralCardColor, true, route: AppRoutes.eReferralPage, ), HmgServicesComponentModel( 3, "Blood Donation".needTranslation, "".needTranslation, AppAssets.blood_donation_icon, bgColor: AppColors.bloodDonationCardColor, true, route: null, onTap: () async { LoaderBottomSheet.showLoader(loadingText: "Fetching Data..."); await bloodDonationViewModel.getRegionSelectedClinics(onSuccess: (val) async { await bloodDonationViewModel.getPatientBloodGroupDetails(onSuccess: (val) { LoaderBottomSheet.hideLoader(); Navigator.of(GetIt.instance().navigatorKey.currentContext!).push( CustomPageRoute( page: BloodDonationPage(), ), ); }); }, onError: (err) { LoaderBottomSheet.hideLoader(); }); }), HmgServicesComponentModel( 3, "Home Health Care".needTranslation, "".needTranslation, AppAssets.homeBottom, bgColor: AppColors.primaryRedColor, true, route: AppRoutes.homeHealthCarePage, ), // HmgServicesComponentModel( // 11, // "Virtual Tour".needTranslation, // "".needTranslation, // AppAssets.my_address, // bgColor: AppColors.quickLoginColor, // true, // route: null, // onTap:(){ // Utils.openWebView( // url: 'https://hmgwebservices.com/vt_mobile/html/index.html', // ); // }, // ) ]; late final List hmgHealthToolServices = [ HmgServicesComponentModel( 11, "Daily Water Monitor".needTranslation, "".needTranslation, AppAssets.daily_water_monitor_icon, bgColor: AppColors.whiteColor, true, route: AppRoutes.eReferralPage, ), HmgServicesComponentModel( 11, "Health\nCalculators".needTranslation, "".needTranslation, AppAssets.health_calculators_services_icon, bgColor: AppColors.whiteColor, true, route: AppRoutes.healthCalculatorsPage, ), HmgServicesComponentModel( 5, "Health\nConverters".needTranslation, "".needTranslation, AppAssets.health_converters_icon, bgColor: AppColors.whiteColor, true, route: AppRoutes.comprehensiveCheckupPage, ), HmgServicesComponentModel( 11, "Smart\nWatches".needTranslation, "".needTranslation, AppAssets.smartwatch_icon, bgColor: AppColors.whiteColor, true, // route: AppRoutes.smartWatches, route: AppRoutes.huaweiHealthExample, ), ]; @override Widget build(BuildContext context) { bloodDonationViewModel = Provider.of(context); medicalFileViewModel = Provider.of(context); return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: CollapsingListView( title: "Explore Services".needTranslation, isLeading: false, child: Padding( padding: EdgeInsets.symmetric(horizontal: 24.h), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 16.h), "Medical & Care Services".needTranslation.toText18(isBold: true), SizedBox(height: 16.h), GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 4, // 4 icons per row crossAxisSpacing: 12.w, mainAxisSpacing: 18.h, childAspectRatio: 0.8, ), physics: NeverScrollableScrollPhysics(), shrinkWrap: true, itemCount: hmgServices.length, padding: EdgeInsets.zero, itemBuilder: (BuildContext context, int index) { return ServiceGridViewItem(hmgServices[index], index, false, isHealthToolIcon: false); }, ), SizedBox(height: 24.h), "Personal Services".needTranslation.toText18(isBold: true), SizedBox(height: 16.h), Row( children: [ Expanded( child: Container( height: 170.h, padding: EdgeInsets.all(16.w), decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 20.r, hasShadow: false, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( spacing: 8.w, crossAxisAlignment: CrossAxisAlignment.center, children: [ Utils.buildSvgWithAssets(icon: AppAssets.wallet, width: 30.w, height: 30.h), "Habib Wallet".needTranslation.toText14(weight: FontWeight.w600, maxlines: 2).expanded, Utils.buildSvgWithAssets(icon: AppAssets.arrow_forward), ], ), Spacer(), Consumer(builder: (context, habibWalletVM, child) { return Utils.getPaymentAmountWithSymbol2(habibWalletVM.habibWalletAmount, isExpanded: false) .toShimmer2(isShow: habibWalletVM.isWalletAmountLoading, radius: 12.r, width: 80.w, height: 24.h); }), Spacer(), CustomButton( height: 40.h, icon: AppAssets.recharge_icon, iconSize: 16.w, iconColor: AppColors.infoColor, textColor: AppColors.infoColor, text: "Recharge".needTranslation, borderWidth: 0.w, fontWeight: FontWeight.w500, borderColor: Colors.transparent, backgroundColor: Color(0xff45A2F8).withValues(alpha: 0.08), padding: EdgeInsets.all(8.w), fontSize: 12.f, onPressed: () { Navigator.of(context).push(CustomPageRoute(page: RechargeWalletPage())); }, ), ], ).onPress(() { Navigator.of(context).push(CustomPageRoute(page: HabibWalletPage())); }), ), ), SizedBox(width: 16.w), Expanded( child: Container( height: 170.h, padding: EdgeInsets.all(16.w), decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 20.r, hasShadow: false, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( spacing: 8.w, crossAxisAlignment: CrossAxisAlignment.center, children: [ Utils.buildSvgWithAssets(icon: AppAssets.services_medical_file_icon, width: 30.w, height: 30.h), "Medical Files".needTranslation.toText14(weight: FontWeight.w600, maxlines: 2).expanded, Utils.buildSvgWithAssets(icon: AppAssets.arrow_forward), ], ), Spacer(), Wrap( spacing: -8.h, // runSpacing: 0.h, children: [ Utils.buildImgWithAssets( icon: AppAssets.babyGirlImg, height: 28.h, width: 28.w, border: 1, fit: BoxFit.contain, borderRadius: 50.r, ), Utils.buildImgWithAssets( icon: AppAssets.femaleImg, height: 28.h, width: 28.w, border: 1, borderRadius: 50.r, fit: BoxFit.contain, ), Utils.buildImgWithAssets( icon: AppAssets.maleImg, height: 28.h, width: 28.w, border: 1, borderRadius: 50.r, fit: BoxFit.contain, ), ], ), Spacer(), CustomButton( height: 40.h, icon: AppAssets.add_icon, iconSize: 16.w, iconColor: AppColors.primaryRedColor, textColor: AppColors.primaryRedColor, text: "Add Member".needTranslation, borderWidth: 0.w, fontWeight: FontWeight.w500, borderColor: Colors.transparent, backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.08), padding: EdgeInsets.all(8.w), fontSize: 12.f, onPressed: () { DialogService dialogService = getIt.get(); medicalFileViewModel.clearAuthValues(); dialogService.showAddFamilyFileSheet( label: "Add Family Member".needTranslation, message: "Please fill the below field to add a new family member to your profile".needTranslation, onVerificationPress: () { medicalFileViewModel.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms); }); }, ), ], ).onPress(() { Navigator.of(context).push( CustomPageRoute( page: MedicalFilePage(), ), ); }), ), ), ], ), SizedBox(height: 24.h), "Health Tools".needTranslation.toText18(isBold: true), SizedBox(height: 16.h), GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 4, // 4 icons per row crossAxisSpacing: 12.w, mainAxisSpacing: 18.h, childAspectRatio: 0.8, ), physics: NeverScrollableScrollPhysics(), shrinkWrap: true, itemCount: hmgHealthToolServices.length, padding: EdgeInsets.zero, itemBuilder: (BuildContext context, int index) { return ServiceGridViewItem( hmgHealthToolServices[index], index, false, isHealthToolIcon: true, ); }, ), SizedBox(height: 24.h), "Support Services".needTranslation.toText18(isBold: true), SizedBox(height: 16.h), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Expanded( child: Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 12.h, hasShadow: false, ), child: Padding( padding: EdgeInsets.all(16.h), child: Row( children: [ Utils.buildSvgWithAssets( icon: AppAssets.virtual_tour_icon, width: 32.w, height: 32.h, fit: BoxFit.contain, ), SizedBox(width: 8.w), "Virtual Tour".needTranslation.toText12(fontWeight: FontWeight.w500) ], ), ), ).onPress(() { Utils.openWebView( url: 'https://hmgwebservices.com/vt_mobile/html/index.html', ); }), ), SizedBox(width: 16.w), Expanded( child: Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 12.h, hasShadow: false, ), child: Padding( padding: EdgeInsets.all(16.h), child: Row( children: [ Utils.buildSvgWithAssets( icon: AppAssets.car_parking_icon, width: 32.w, height: 32.h, fit: BoxFit.contain, ), SizedBox(width: 8.w), "Car Parking".needTranslation.toText12(fontWeight: FontWeight.w500) ], ), ), ), ), ], ), SizedBox(height: 16.h), Row( children: [ Expanded( child: Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 12.h, hasShadow: false, ), child: Padding( padding: EdgeInsets.all(16.h), child: Row( children: [ Utils.buildSvgWithAssets( icon: AppAssets.latest_news_icon, width: 32.w, height: 32.h, fit: BoxFit.contain, ), SizedBox(width: 8.w), "Latest News".needTranslation.toText12(fontWeight: FontWeight.w500) ], ), ), ).onPress(() { Utils.openWebView( url: 'https://x.com/HMG', ); }), ), SizedBox(width: 16.w), Expanded( child: Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 12.h, hasShadow: false, ), child: Padding( padding: EdgeInsets.all(16.h), child: Row( children: [ Utils.buildSvgWithAssets( icon: AppAssets.hmg_contact_icon, width: 32.w, height: 32.h, fit: BoxFit.contain, ), SizedBox(width: 8.w), "HMG Contact".needTranslation.toText12(fontWeight: FontWeight.w500) ], ), ), ).onPress(() { showCommonBottomSheetWithoutHeight( context, title: LocaleKeys.contactUs.tr(), child: ContactUs(), callBackFunc: () {}, isFullScreen: false, ); }), ) ], ) ], ), SizedBox(height: 24.h), ], ), ), ), ); } }