|
|
|
@ -1,5 +1,6 @@
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
|
|
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
|
|
|
|
import 'package:get_it/get_it.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_assets.dart';
|
|
|
|
import 'package:hmg_patient_app_new/core/app_export.dart';
|
|
|
|
import 'package:hmg_patient_app_new/core/app_export.dart';
|
|
|
|
@ -17,6 +18,8 @@ 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/habib_wallet_page.dart';
|
|
|
|
import 'package:hmg_patient_app_new/presentation/habib_wallet/recharge_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/hmg_services/services_view.dart';
|
|
|
|
|
|
|
|
import 'package:hmg_patient_app_new/presentation/home/data/landing_page_data.dart';
|
|
|
|
|
|
|
|
import 'package:hmg_patient_app_new/presentation/home/widgets/large_service_card.dart';
|
|
|
|
import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.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/dialog_service.dart';
|
|
|
|
import 'package:hmg_patient_app_new/services/navigation_service.dart';
|
|
|
|
import 'package:hmg_patient_app_new/services/navigation_service.dart';
|
|
|
|
@ -95,15 +98,15 @@ class ServicesPage extends StatelessWidget {
|
|
|
|
LoaderBottomSheet.hideLoader();
|
|
|
|
LoaderBottomSheet.hideLoader();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
HmgServicesComponentModel(
|
|
|
|
// HmgServicesComponentModel(
|
|
|
|
3,
|
|
|
|
// 3,
|
|
|
|
"Home Health Care".needTranslation,
|
|
|
|
// "Home Health Care".needTranslation,
|
|
|
|
"".needTranslation,
|
|
|
|
// "".needTranslation,
|
|
|
|
AppAssets.homeBottom,
|
|
|
|
// AppAssets.homeBottom,
|
|
|
|
bgColor: AppColors.primaryRedColor,
|
|
|
|
// bgColor: AppColors.primaryRedColor,
|
|
|
|
true,
|
|
|
|
// true,
|
|
|
|
route: AppRoutes.homeHealthCarePage,
|
|
|
|
// route: AppRoutes.homeHealthCarePage,
|
|
|
|
),
|
|
|
|
// ),
|
|
|
|
// HmgServicesComponentModel(
|
|
|
|
// HmgServicesComponentModel(
|
|
|
|
// 11,
|
|
|
|
// 11,
|
|
|
|
// "Virtual Tour".needTranslation,
|
|
|
|
// "Virtual Tour".needTranslation,
|
|
|
|
@ -169,331 +172,359 @@ class ServicesPage extends StatelessWidget {
|
|
|
|
body: CollapsingListView(
|
|
|
|
body: CollapsingListView(
|
|
|
|
title: "Explore Services".needTranslation,
|
|
|
|
title: "Explore Services".needTranslation,
|
|
|
|
isLeading: false,
|
|
|
|
isLeading: false,
|
|
|
|
child: Padding(
|
|
|
|
child: Column(
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: 24.h),
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
child: Column(
|
|
|
|
children: [
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
children: [
|
|
|
|
"Medical & Care Services".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
"Medical & Care Services".needTranslation.toText18(isBold: true),
|
|
|
|
GridView.builder(
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
|
|
|
GridView.builder(
|
|
|
|
crossAxisCount: (isFoldable || isTablet) ? 6 : 4, // 4 icons per row
|
|
|
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
|
|
|
crossAxisSpacing: 12.w,
|
|
|
|
crossAxisCount: (isFoldable || isTablet) ? 6 : 4, // 4 icons per row
|
|
|
|
mainAxisSpacing: 18.h,
|
|
|
|
crossAxisSpacing: 12.w,
|
|
|
|
childAspectRatio: 0.8,
|
|
|
|
mainAxisSpacing: 18.h,
|
|
|
|
),
|
|
|
|
childAspectRatio: 0.8,
|
|
|
|
physics: NeverScrollableScrollPhysics(),
|
|
|
|
),
|
|
|
|
shrinkWrap: true,
|
|
|
|
physics: NeverScrollableScrollPhysics(),
|
|
|
|
itemCount: hmgServices.length,
|
|
|
|
|
|
|
|
padding: EdgeInsets.zero,
|
|
|
|
|
|
|
|
itemBuilder: (BuildContext context, int index) {
|
|
|
|
|
|
|
|
return ServiceGridViewItem(hmgServices[index], index, false, isHealthToolIcon: false);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
).paddingSymmetrical(24.w, 0),
|
|
|
|
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
|
|
|
|
"HMG Services".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
|
|
|
|
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
|
|
|
|
SizedBox(
|
|
|
|
|
|
|
|
height: 350.h,
|
|
|
|
|
|
|
|
child: ListView.separated(
|
|
|
|
|
|
|
|
scrollDirection: Axis.horizontal,
|
|
|
|
|
|
|
|
itemCount: LandingPageData.getServiceCardsList.length,
|
|
|
|
shrinkWrap: true,
|
|
|
|
shrinkWrap: true,
|
|
|
|
itemCount: hmgServices.length,
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: 24.w),
|
|
|
|
padding: EdgeInsets.zero,
|
|
|
|
itemBuilder: (context, index) {
|
|
|
|
itemBuilder: (BuildContext context, int index) {
|
|
|
|
return AnimationConfiguration.staggeredList(
|
|
|
|
return ServiceGridViewItem(hmgServices[index], index, false, isHealthToolIcon: false);
|
|
|
|
position: index,
|
|
|
|
|
|
|
|
duration: const Duration(milliseconds: 1000),
|
|
|
|
|
|
|
|
child: SlideAnimation(
|
|
|
|
|
|
|
|
horizontalOffset: 100.0,
|
|
|
|
|
|
|
|
child: FadeInAnimation(
|
|
|
|
|
|
|
|
child: LargeServiceCard(
|
|
|
|
|
|
|
|
serviceCardData: LandingPageData.getServiceCardsList[index],
|
|
|
|
|
|
|
|
image: LandingPageData.getServiceCardsList[index].icon,
|
|
|
|
|
|
|
|
title: LandingPageData.getServiceCardsList[index].title,
|
|
|
|
|
|
|
|
subtitle: LandingPageData.getServiceCardsList[index].subtitle,
|
|
|
|
|
|
|
|
icon: LandingPageData.getServiceCardsList[index].largeCardIcon,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 16.w),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
),
|
|
|
|
"Personal Services".needTranslation.toText18(isBold: true),
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
"Personal Services".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
|
|
|
|
Row(
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
children: [
|
|
|
|
Row(
|
|
|
|
Expanded(
|
|
|
|
children: [
|
|
|
|
child: Container(
|
|
|
|
Expanded(
|
|
|
|
height: 170.h,
|
|
|
|
child: Container(
|
|
|
|
padding: EdgeInsets.all(16.w),
|
|
|
|
height: 170.h,
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
padding: EdgeInsets.all(16.w),
|
|
|
|
color: AppColors.whiteColor,
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
borderRadius: 20.r,
|
|
|
|
color: AppColors.whiteColor,
|
|
|
|
hasShadow: false,
|
|
|
|
borderRadius: 20.r,
|
|
|
|
),
|
|
|
|
hasShadow: false,
|
|
|
|
child: Column(
|
|
|
|
),
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
child: Column(
|
|
|
|
children: [
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
Row(
|
|
|
|
children: [
|
|
|
|
spacing: 8.w,
|
|
|
|
Row(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
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<HabibWalletViewModel>(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<DialogService>();
|
|
|
|
|
|
|
|
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(),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
).paddingSymmetrical(24.w, 0),
|
|
|
|
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
|
|
|
|
"Health Tools".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
|
|
|
|
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
|
|
|
|
GridView.builder(
|
|
|
|
|
|
|
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
|
|
|
|
|
|
|
crossAxisCount:(isFoldable || isTablet) ? 6 : 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,
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
).paddingSymmetrical(24.w, 0),
|
|
|
|
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
|
|
|
|
"Support Services".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0),
|
|
|
|
|
|
|
|
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: [
|
|
|
|
children: [
|
|
|
|
Utils.buildSvgWithAssets(icon: AppAssets.wallet, width: 30.w, height: 30.h),
|
|
|
|
Utils.buildSvgWithAssets(
|
|
|
|
"Habib Wallet".needTranslation.toText14(weight: FontWeight.w600, maxlines: 2).expanded,
|
|
|
|
icon: AppAssets.virtual_tour_icon,
|
|
|
|
Utils.buildSvgWithAssets(icon: AppAssets.arrow_forward),
|
|
|
|
width: 32.w,
|
|
|
|
|
|
|
|
height: 32.h,
|
|
|
|
|
|
|
|
fit: BoxFit.contain,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
SizedBox(width: 8.w),
|
|
|
|
|
|
|
|
"Virtual Tour".needTranslation.toText12(fontWeight: FontWeight.w500)
|
|
|
|
],
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Spacer(),
|
|
|
|
),
|
|
|
|
Consumer<HabibWalletViewModel>(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(() {
|
|
|
|
).onPress(() {
|
|
|
|
Navigator.of(context).push(CustomPageRoute(page: HabibWalletPage()));
|
|
|
|
Utils.openWebView(
|
|
|
|
|
|
|
|
url: 'https://hmgwebservices.com/vt_mobile/html/index.html',
|
|
|
|
|
|
|
|
);
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
SizedBox(width: 16.w),
|
|
|
|
SizedBox(width: 16.w),
|
|
|
|
Expanded(
|
|
|
|
Expanded(
|
|
|
|
child: Container(
|
|
|
|
child: Container(
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
height: 170.h,
|
|
|
|
color: AppColors.whiteColor,
|
|
|
|
padding: EdgeInsets.all(16.w),
|
|
|
|
borderRadius: 12.h,
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
hasShadow: false,
|
|
|
|
color: AppColors.whiteColor,
|
|
|
|
),
|
|
|
|
borderRadius: 20.r,
|
|
|
|
child: Padding(
|
|
|
|
hasShadow: false,
|
|
|
|
padding: EdgeInsets.all(16.h),
|
|
|
|
),
|
|
|
|
child: Row(
|
|
|
|
child: Column(
|
|
|
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
|
|
|
children: [
|
|
|
|
|
|
|
|
Row(
|
|
|
|
|
|
|
|
spacing: 8.w,
|
|
|
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
|
|
|
children: [
|
|
|
|
children: [
|
|
|
|
Utils.buildSvgWithAssets(icon: AppAssets.services_medical_file_icon, width: 30.w, height: 30.h),
|
|
|
|
Utils.buildSvgWithAssets(
|
|
|
|
"Medical Files".needTranslation.toText14(weight: FontWeight.w600, maxlines: 2).expanded,
|
|
|
|
icon: AppAssets.car_parking_icon,
|
|
|
|
Utils.buildSvgWithAssets(icon: AppAssets.arrow_forward),
|
|
|
|
width: 32.w,
|
|
|
|
|
|
|
|
height: 32.h,
|
|
|
|
|
|
|
|
fit: BoxFit.contain,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
SizedBox(width: 8.w),
|
|
|
|
|
|
|
|
"Car Parking".needTranslation.toText12(fontWeight: FontWeight.w500)
|
|
|
|
],
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Spacer(),
|
|
|
|
),
|
|
|
|
Wrap(
|
|
|
|
),
|
|
|
|
spacing: -8.h,
|
|
|
|
),
|
|
|
|
// runSpacing: 0.h,
|
|
|
|
],
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
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: [
|
|
|
|
children: [
|
|
|
|
Utils.buildImgWithAssets(
|
|
|
|
Utils.buildSvgWithAssets(
|
|
|
|
icon: AppAssets.babyGirlImg,
|
|
|
|
icon: AppAssets.latest_news_icon,
|
|
|
|
height: 28.h,
|
|
|
|
width: 32.w,
|
|
|
|
width: 28.w,
|
|
|
|
height: 32.h,
|
|
|
|
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,
|
|
|
|
fit: BoxFit.contain,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
|
|
|
|
SizedBox(width: 8.w),
|
|
|
|
|
|
|
|
"Latest News".needTranslation.toText12(fontWeight: FontWeight.w500)
|
|
|
|
],
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
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<DialogService>();
|
|
|
|
|
|
|
|
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(() {
|
|
|
|
).onPress(() {
|
|
|
|
Navigator.of(context).push(
|
|
|
|
Utils.openWebView(
|
|
|
|
CustomPageRoute(
|
|
|
|
url: 'https://x.com/HMG',
|
|
|
|
page: MedicalFilePage(),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
SizedBox(width: 16.w),
|
|
|
|
],
|
|
|
|
Expanded(
|
|
|
|
),
|
|
|
|
child: Container(
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
"Health Tools".needTranslation.toText18(isBold: true),
|
|
|
|
color: AppColors.whiteColor,
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
borderRadius: 12.h,
|
|
|
|
GridView.builder(
|
|
|
|
hasShadow: false,
|
|
|
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
|
|
|
|
|
|
|
crossAxisCount:(isFoldable || isTablet) ? 6 : 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)
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
child: Padding(
|
|
|
|
],
|
|
|
|
padding: EdgeInsets.all(16.h),
|
|
|
|
),
|
|
|
|
child: Row(
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
children: [
|
|
|
|
Row(
|
|
|
|
Utils.buildSvgWithAssets(
|
|
|
|
children: [
|
|
|
|
icon: AppAssets.hmg_contact_icon,
|
|
|
|
Expanded(
|
|
|
|
width: 32.w,
|
|
|
|
child: Container(
|
|
|
|
height: 32.h,
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
fit: BoxFit.contain,
|
|
|
|
color: AppColors.whiteColor,
|
|
|
|
),
|
|
|
|
borderRadius: 12.h,
|
|
|
|
SizedBox(width: 8.w),
|
|
|
|
hasShadow: false,
|
|
|
|
"HMG Contact".needTranslation.toText12(fontWeight: FontWeight.w500)
|
|
|
|
),
|
|
|
|
],
|
|
|
|
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(
|
|
|
|
).onPress(() {
|
|
|
|
context,
|
|
|
|
showCommonBottomSheetWithoutHeight(
|
|
|
|
title: LocaleKeys.contactUs.tr(),
|
|
|
|
context,
|
|
|
|
child: ContactUs(),
|
|
|
|
title: LocaleKeys.contactUs.tr(),
|
|
|
|
callBackFunc: () {},
|
|
|
|
child: ContactUs(),
|
|
|
|
isFullScreen: false,
|
|
|
|
callBackFunc: () {},
|
|
|
|
);
|
|
|
|
isFullScreen: false,
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
)
|
|
|
|
}),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
)
|
|
|
|
],
|
|
|
|
],
|
|
|
|
)
|
|
|
|
),
|
|
|
|
],
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
).paddingSymmetrical(24.w, 0),
|
|
|
|
],
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|