diff --git a/assets/images/svg/blood_donation_icon.svg b/assets/images/svg/blood_donation_icon.svg new file mode 100644 index 0000000..2a90705 --- /dev/null +++ b/assets/images/svg/blood_donation_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svg/car_parking_icon.svg b/assets/images/svg/car_parking_icon.svg new file mode 100644 index 0000000..f77afa0 --- /dev/null +++ b/assets/images/svg/car_parking_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svg/e-referral.svg b/assets/images/svg/e-referral.svg index 3262779..758affc 100644 --- a/assets/images/svg/e-referral.svg +++ b/assets/images/svg/e-referral.svg @@ -1,7 +1,7 @@ - - - - - - + + + + + + diff --git a/assets/images/svg/hmg_contact_icon.svg b/assets/images/svg/hmg_contact_icon.svg new file mode 100644 index 0000000..c6c427b --- /dev/null +++ b/assets/images/svg/hmg_contact_icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/svg/latest_news_icon.svg b/assets/images/svg/latest_news_icon.svg new file mode 100644 index 0000000..6dbb4de --- /dev/null +++ b/assets/images/svg/latest_news_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svg/services_medical_file_icon.svg b/assets/images/svg/services_medical_file_icon.svg new file mode 100644 index 0000000..7286054 --- /dev/null +++ b/assets/images/svg/services_medical_file_icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/svg/virtual_tour_icon.svg b/assets/images/svg/virtual_tour_icon.svg new file mode 100644 index 0000000..f7eb64f --- /dev/null +++ b/assets/images/svg/virtual_tour_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index 95f24ca..1c17024 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -182,6 +182,12 @@ class AppAssets { static const String call_for_doctor = '$svgBasePath/call_for_doctor.svg'; static const String bulb_icon = '$svgBasePath/bulb_icon.svg'; static const String select_city_icon = '$svgBasePath/select_city_icon.svg'; + static const String blood_donation_icon = '$svgBasePath/blood_donation_icon.svg'; + static const String virtual_tour_icon = '$svgBasePath/virtual_tour_icon.svg'; + static const String car_parking_icon = '$svgBasePath/car_parking_icon.svg'; + static const String latest_news_icon = '$svgBasePath/latest_news_icon.svg'; + static const String hmg_contact_icon = '$svgBasePath/hmg_contact_icon.svg'; + static const String services_medical_file_icon = '$svgBasePath/services_medical_file_icon.svg'; //bottom navigation// diff --git a/lib/features/blood_donation/blood_donation_view_model.dart b/lib/features/blood_donation/blood_donation_view_model.dart index 7d2e5df..f345359 100644 --- a/lib/features/blood_donation/blood_donation_view_model.dart +++ b/lib/features/blood_donation/blood_donation_view_model.dart @@ -1,9 +1,11 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_repo.dart'; import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_list_model.dart'; import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_response_model.dart'; import 'package:hmg_patient_app_new/features/blood_donation/models/cities_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/services/error_handler_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; @@ -27,11 +29,16 @@ class BloodDonationViewModel extends ChangeNotifier { BloodGroupListModel("B-", 7), ]; + List genderList = [ + BloodGroupListModel(LocaleKeys.malE.tr(), 1), + BloodGroupListModel(LocaleKeys.female.tr(), 2), + ]; + late CitiesModel selectedCity; late BloodGroupListModel selectedBloodGroup; int _selectedHospitalIndex = 0; int _selectedBloodTypeIndex = 0; - String _selectedBloodType = ''; + String selectedBloodType = ''; List_BloodGroupDetailsModel patientBloodGroupDetailsModel = List_BloodGroupDetailsModel(); @@ -42,6 +49,12 @@ class BloodDonationViewModel extends ChangeNotifier { notifyListeners(); } + setSelectedBloodGroup(BloodGroupListModel bloodGroup) { + selectedBloodGroup = bloodGroup; + selectedBloodType = selectedBloodGroup.name; + notifyListeners(); + } + Future getRegionSelectedClinics({Function(dynamic)? onSuccess, Function(String)? onError}) async { citiesList.clear(); selectedCity = CitiesModel(); @@ -85,8 +98,8 @@ class BloodDonationViewModel extends ChangeNotifier { citiesModel.description = citiesList[_selectedHospitalIndex].description; citiesModel.descriptionN = citiesList[_selectedHospitalIndex].descriptionN; selectedCity = citiesModel; - _selectedBloodType = patientBloodGroupDetailsModel.bloodGroup!; - _selectedBloodTypeIndex = getBloodIndex(_selectedBloodType); + selectedBloodType = patientBloodGroupDetailsModel.bloodGroup!; + _selectedBloodTypeIndex = getBloodIndex(selectedBloodType); notifyListeners(); if (onSuccess != null) { diff --git a/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart b/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart index d6e2654..7a92198 100644 --- a/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart +++ b/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart @@ -9,7 +9,6 @@ class HmgServicesComponentModel { bool isLogin; bool isLocked; Color bgColor; - Color textColor; String? route; Function? onTap; @@ -22,7 +21,6 @@ class HmgServicesComponentModel { this.isLogin, { this.isLocked = false, this.bgColor = Colors.white, - this.textColor = Colors.black, this.iconColor = Colors.white, this.route, this.onTap diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 7433ff7..d76422b 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -801,7 +801,7 @@ abstract class LocaleKeys { static const fullName = 'fullName'; static const married = 'married'; static const uae = 'uae'; - static const malE = 'malE'; + static const malE = 'male'; static const loginBy = 'loginBy'; static const loginByOTP = 'loginByOTP'; static const guest = 'guest'; diff --git a/lib/presentation/blood_donation/blood_donation_page.dart b/lib/presentation/blood_donation/blood_donation_page.dart index 8908652..5f3fa86 100644 --- a/lib/presentation/blood_donation/blood_donation_page.dart +++ b/lib/presentation/blood_donation/blood_donation_page.dart @@ -9,12 +9,13 @@ 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/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/select_blood_group_widget.dart'; import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/select_city_widget.dart'; +import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/select_gender_widget.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:provider/provider.dart'; class BloodDonationPage extends StatelessWidget { @@ -69,19 +70,13 @@ class BloodDonationPage extends StatelessWidget { Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h), ], ).onPress(() async { - LoaderBottomSheet.showLoader(loadingText: "Fetching Cities..."); - await bloodDonationVM.getRegionSelectedClinics(onSuccess: (val) { - LoaderBottomSheet.hideLoader(); - showCommonBottomSheetWithoutHeight(context, - title: LocaleKeys.selectCity.tr(context: context), - isDismissible: true, - child: SelectCityWidget( - bloodDonationViewModel: bloodDonationVM, - ), - callBackFunc: () {}); - }, onError: (err) { - LoaderBottomSheet.hideLoader(); - }); + showCommonBottomSheetWithoutHeight(context, + title: LocaleKeys.selectCity.tr(context: context), + isDismissible: true, + child: SelectCityWidget( + bloodDonationViewModel: bloodDonationVM, + ), + callBackFunc: () {}); }), SizedBox(height: 16.h), Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.1), height: 1.h), @@ -104,7 +99,16 @@ class BloodDonationPage extends StatelessWidget { ), Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h), ], - ), + ).onPress(() { + showCommonBottomSheetWithoutHeight(context, + title: LocaleKeys.selectGender.tr(context: context), + isDismissible: true, + child: SelectGenderWidget( + isArabic: appState.isArabic(), + bloodDonationViewModel: bloodDonationVM, + ), + callBackFunc: () {}); + }), SizedBox(height: 16.h), Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.1), height: 1.h), SizedBox(height: 16.h), @@ -119,14 +123,23 @@ class BloodDonationPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ LocaleKeys.bloodType.tr().toText16(color: AppColors.textColor, weight: FontWeight.w500), - "AB+".toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), + bloodDonationVM.selectedBloodType.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500), ], ), ], ), Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h), ], - ), + ).onPress(() { + showCommonBottomSheetWithoutHeight(context, + title: LocaleKeys.select.tr(context: context), + isDismissible: true, + child: SelectBloodGroupWidget( + isArabic: appState.isArabic(), + bloodDonationViewModel: bloodDonationVM, + ), + callBackFunc: () {}); + }), ], ), ), diff --git a/lib/presentation/blood_donation/widgets/select_blood_group_widget.dart b/lib/presentation/blood_donation/widgets/select_blood_group_widget.dart new file mode 100644 index 0000000..f9cadb2 --- /dev/null +++ b/lib/presentation/blood_donation/widgets/select_blood_group_widget.dart @@ -0,0 +1,67 @@ +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/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/presentation/blood_donation/widgets/city_list_item.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class SelectBloodGroupWidget extends StatelessWidget { + SelectBloodGroupWidget({super.key, required this.bloodDonationViewModel, required this.isArabic}); + + BloodDonationViewModel bloodDonationViewModel; + bool isArabic; + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 8.h), + SizedBox( + height: MediaQuery.sizeOf(context).height * .4, + child: ListView.separated( + itemBuilder: (_, index) { + return DecoratedBox( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: false, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 8.h, + children: [bloodDonationViewModel.bloodGroupList[index].name.toText16(color: AppColors.textColor, isBold: true)], + ), + ), + Transform.flip( + flipX: isArabic, + child: Utils.buildSvgWithAssets( + icon: AppAssets.forward_arrow_icon, + iconColor: AppColors.blackColor, + width: 40.h, + height: 40.h, + fit: BoxFit.contain, + ), + ), + ], + ).paddingSymmetrical(16.h, 16.h).onPress(() { + bloodDonationViewModel.setSelectedBloodGroup(bloodDonationViewModel.bloodGroupList[index]); + Navigator.of(context).pop(); + })); + }, + separatorBuilder: (_, __) => SizedBox( + height: 8.h, + ), + itemCount: bloodDonationViewModel.bloodGroupList.length), + ) + ], + ); + } +} diff --git a/lib/presentation/blood_donation/widgets/select_gender_widget.dart b/lib/presentation/blood_donation/widgets/select_gender_widget.dart new file mode 100644 index 0000000..b253331 --- /dev/null +++ b/lib/presentation/blood_donation/widgets/select_gender_widget.dart @@ -0,0 +1,67 @@ +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/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/presentation/blood_donation/widgets/city_list_item.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class SelectGenderWidget extends StatelessWidget { + SelectGenderWidget({super.key, required this.bloodDonationViewModel, required this.isArabic}); + + BloodDonationViewModel bloodDonationViewModel; + bool isArabic; + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 8.h), + SizedBox( + height: MediaQuery.sizeOf(context).height * .4, + child: ListView.separated( + itemBuilder: (_, index) { + return DecoratedBox( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: false, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 8.h, + children: [bloodDonationViewModel.genderList[index].name.toText16(color: AppColors.textColor, isBold: true)], + ), + ), + Transform.flip( + flipX: isArabic, + child: Utils.buildSvgWithAssets( + icon: AppAssets.forward_arrow_icon, + iconColor: AppColors.blackColor, + width: 40.h, + height: 40.h, + fit: BoxFit.contain, + ), + ), + ], + ).paddingSymmetrical(16.h, 16.h).onPress(() { + // bloodDonationViewModel.setSelectedCity(bloodDonationViewModel.citiesList[index]); + Navigator.of(context).pop(); + })); + }, + separatorBuilder: (_, __) => SizedBox( + height: 8.h, + ), + itemCount: bloodDonationViewModel.genderList.length), + ) + ], + ); + } +} diff --git a/lib/presentation/hmg_services/services_page.dart b/lib/presentation/hmg_services/services_page.dart index 1b9f3cd..ab70265 100644 --- a/lib/presentation/hmg_services/services_page.dart +++ b/lib/presentation/hmg_services/services_page.dart @@ -1,94 +1,141 @@ +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}); - final List hmgServices = [ + late BloodDonationViewModel bloodDonationViewModel; + late MedicalFileViewModel medicalFileViewModel; + + late final List hmgServices = [ HmgServicesComponentModel( 11, - "E Referral Services".needTranslation, + "Emergency Services".needTranslation, "".needTranslation, - AppAssets.eReferral, + 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, - bgColor: Colors.orange, - textColor: AppColors.blackColor, route: AppRoutes.eReferralPage, ), HmgServicesComponentModel( 5, - "Comprehensive Checkup".needTranslation, + "Complete Checkup".needTranslation, "".needTranslation, AppAssets.comprehensiveCheckup, - true, bgColor: AppColors.bgGreenColor, - textColor: AppColors.blackColor, + true, route: AppRoutes.comprehensiveCheckupPage, ), HmgServicesComponentModel( - 3, - "Home Health Care".needTranslation, + 11, + "E-Referral Services".needTranslation, "".needTranslation, - AppAssets.emergency_services_icon, + AppAssets.eReferral, + bgColor: AppColors.eReferralCardColor, true, - bgColor: AppColors.bgGreenColor, - textColor: AppColors.blackColor, - route: AppRoutes.homeHealthCarePage, + 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, - "Blood Donation".needTranslation, + "Home Health Care".needTranslation, "".needTranslation, - AppAssets.emergency_services_icon, + AppAssets.homeBottom, + bgColor: AppColors.primaryRedColor, true, - bgColor: AppColors.bgGreenColor, - textColor: AppColors.blackColor, - route: AppRoutes.bloodDonationPage, + route: AppRoutes.homeHealthCarePage, ), - HmgServicesComponentModel( - 11, - "Virtual Tour".needTranslation, - "".needTranslation, - AppAssets.my_address, - true, - bgColor: Colors.orange, - textColor: AppColors.blackColor, - route: null, - onTap:(){ - Utils.openWebView( - url: 'https://hmgwebservices.com/vt_mobile/html/index.html', - ); - }, - ) + // 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', + // ); + // }, + // ) ]; @override Widget build(BuildContext context) { - return CollapsingListView( - title: "Explore Services".needTranslation, - isLeading: Navigator.canPop(context), - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 24.h), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - "Medical & Care Services".needTranslation.toText18(isBold: true), - SizedBox(height: 20.h), - Padding( - padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 0), - child: GridView.builder( + 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: 3, // 4 icons per row - crossAxisSpacing: 24.w, - mainAxisSpacing: 0.h, - childAspectRatio: 0.85, + crossAxisCount: 4, // 4 icons per row + crossAxisSpacing: 12.w, + mainAxisSpacing: 18.h, + childAspectRatio: 0.8, ), physics: NeverScrollableScrollPhysics(), shrinkWrap: true, @@ -98,8 +145,285 @@ class ServicesPage extends StatelessWidget { return ServiceGridViewItem(hmgServices[index], index, 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.male_img, + 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), + "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), + ], + ), ), ), ); diff --git a/lib/presentation/hmg_services/services_view.dart b/lib/presentation/hmg_services/services_view.dart index 2cd923f..b24b0b4 100644 --- a/lib/presentation/hmg_services/services_view.dart +++ b/lib/presentation/hmg_services/services_view.dart @@ -3,8 +3,10 @@ import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/dependencies.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/hmg_services/models/ui_models/hmg_services_component_model.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; class ServiceGridViewItem extends StatelessWidget { final HmgServicesComponentModel hmgServiceComponentModel; @@ -31,25 +33,25 @@ class ServiceGridViewItem extends StatelessWidget { Container( height: 48.h, width: 48.w, - padding: EdgeInsets.zero, - margin: EdgeInsets.zero, - decoration: BoxDecoration( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: hmgServiceComponentModel.bgColor, - borderRadius: BorderRadius.circular(12.r), + borderRadius: 12.r, + hasShadow: false, ), - child: Utils.buildSvgWithAssets( - icon: hmgServiceComponentModel.icon, - iconColor: hmgServiceComponentModel.iconColor, - height: 21.h, - width: 21.w, - fit: BoxFit.none, + child: Padding( + padding: EdgeInsets.all(12.h), + child: Utils.buildSvgWithAssets( + icon: hmgServiceComponentModel.icon, + iconColor: AppColors.whiteColor, + fit: BoxFit.contain, + ), ), ), SizedBox(height: 5.h), hmgServiceComponentModel.title.toText12( fontWeight: FontWeight.w500, - color: hmgServiceComponentModel.textColor, - maxLine: 1, + color: AppColors.textColor, + maxLine: 2, ), ], )); diff --git a/lib/presentation/lab/alphabeticScroll.dart b/lib/presentation/lab/alphabeticScroll.dart index 7593ea1..e610d71 100644 --- a/lib/presentation/lab/alphabeticScroll.dart +++ b/lib/presentation/lab/alphabeticScroll.dart @@ -192,7 +192,6 @@ class _AlphabetScrollPageState extends State { itemCount: data.length, itemBuilder: (_, index) { final letter = alphabet[index].toLowerCase(); - print("the letter is $letter"); final items = data[letter]!; return Container( key: _offsetKeys[letter], diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart index b3abe6a..7bee72d 100644 --- a/lib/theme/colors.dart +++ b/lib/theme/colors.dart @@ -81,4 +81,9 @@ class AppColors { static const Color infoBannerBorderColor = Color(0xFFFFE5B4); static const Color infoBannerIconColor = Color(0xFFCC9B14); static const Color infoBannerTextColor = Color(0xFF856404); + + // Services Page Colors + static const Color eReferralCardColor = Color(0xFFFF8012); + static const Color bloodDonationCardColor = Color(0xFFFF5662); + static const Color bookAppointment = Color(0xFF415364); }