|
|
|
|
@ -6,6 +6,7 @@ import 'package:flutter_staggered_animations/flutter_staggered_animations.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_state.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/cache_consts.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/dependencies.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/location_util.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/utils/utils.dart';
|
|
|
|
|
@ -132,12 +133,12 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
Image.network(
|
|
|
|
|
"https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
|
|
|
|
|
width: 64.h,
|
|
|
|
|
height: 64.h,
|
|
|
|
|
fit: BoxFit.cover,
|
|
|
|
|
).circle(100).toShimmer2(isShow: true, radius: 50.r),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
"https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
|
|
|
|
|
width: 64.h,
|
|
|
|
|
height: 64.h,
|
|
|
|
|
fit: BoxFit.cover,
|
|
|
|
|
).circle(100).toShimmer2(isShow: true, radius: 50.r),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
("Dr. John").toString().toText12(isBold: true, isCenter: true, maxLine: 2).toShimmer2(isShow: true),
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
@ -337,96 +338,99 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
|
LocaleKeys.favourites.tr(context: context).toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
|
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
|
SizedBox(
|
|
|
|
|
height: 110.h,
|
|
|
|
|
child: ListView.separated(
|
|
|
|
|
scrollDirection: Axis.horizontal,
|
|
|
|
|
itemCount: myAppointmentsVM.patientFavouriteDoctorsList.length + 1,
|
|
|
|
|
shrinkWrap: true,
|
|
|
|
|
padding: EdgeInsets.only(left: 24.w, right: 24.w),
|
|
|
|
|
itemBuilder: (context, index) {
|
|
|
|
|
// Last item: static "Add" button
|
|
|
|
|
if (index == myAppointmentsVM.patientFavouriteDoctorsList.length) {
|
|
|
|
|
return Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
height: 110.h,
|
|
|
|
|
child: ListView.separated(
|
|
|
|
|
scrollDirection: Axis.horizontal,
|
|
|
|
|
itemCount: myAppointmentsVM.patientFavouriteDoctorsList.length + 1,
|
|
|
|
|
shrinkWrap: true,
|
|
|
|
|
padding: EdgeInsets.only(left: 24.w, right: 24.w),
|
|
|
|
|
itemBuilder: (context, index) {
|
|
|
|
|
// Last item: static "Add" button
|
|
|
|
|
if (index == myAppointmentsVM.patientFavouriteDoctorsList.length) {
|
|
|
|
|
return Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
Utils.buildSvgWithAssets(icon: AppAssets.add_new_family_icon, height: 64.h, width: 64.h, applyThemeColor: false),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 80.w,
|
|
|
|
|
child: LocaleKeys.add.tr(context: context).toText12(
|
|
|
|
|
child: LocaleKeys.add
|
|
|
|
|
.tr(context: context)
|
|
|
|
|
.toText12(
|
|
|
|
|
color: AppColors.textColor,
|
|
|
|
|
isBold: true,
|
|
|
|
|
isCenter: true,
|
|
|
|
|
).paddingOnly(top: 4.h),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
).onPress(() {
|
|
|
|
|
Navigator.of(context).push(CustomPageRoute(page: SearchDoctorByName()));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return AnimationConfiguration.staggeredList(
|
|
|
|
|
position: index,
|
|
|
|
|
duration: const Duration(milliseconds: 1000),
|
|
|
|
|
child: SlideAnimation(
|
|
|
|
|
horizontalOffset: 100.0,
|
|
|
|
|
child: FadeInAnimation(
|
|
|
|
|
child: SizedBox(
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
Image.network(
|
|
|
|
|
myAppointmentsVM.patientFavouriteDoctorsList[index].doctorImageUrl!,
|
|
|
|
|
width: 64.h,
|
|
|
|
|
height: 64.h,
|
|
|
|
|
fit: BoxFit.cover,
|
|
|
|
|
).circle(100).toShimmer2(isShow: false, radius: 50.r),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 80.w,
|
|
|
|
|
child: (myAppointmentsVM.patientFavouriteDoctorsList[index].doctorName)
|
|
|
|
|
.toString()
|
|
|
|
|
.toText12(isBold: true, isCenter: true, maxLine: 2)
|
|
|
|
|
.toShimmer2(isShow: false),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
.paddingOnly(top: 4.h),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
).onPress(() {
|
|
|
|
|
Navigator.of(context).push(CustomPageRoute(page: SearchDoctorByName()));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return AnimationConfiguration.staggeredList(
|
|
|
|
|
position: index,
|
|
|
|
|
duration: const Duration(milliseconds: 1000),
|
|
|
|
|
child: SlideAnimation(
|
|
|
|
|
horizontalOffset: 100.0,
|
|
|
|
|
child: FadeInAnimation(
|
|
|
|
|
child: SizedBox(
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
Image.network(
|
|
|
|
|
myAppointmentsVM.patientFavouriteDoctorsList[index].doctorImageUrl!,
|
|
|
|
|
width: 64.h,
|
|
|
|
|
height: 64.h,
|
|
|
|
|
fit: BoxFit.cover,
|
|
|
|
|
).circle(100).toShimmer2(isShow: false, radius: 50.r),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 80.w,
|
|
|
|
|
child: (myAppointmentsVM.patientFavouriteDoctorsList[index].doctorName)
|
|
|
|
|
.toString()
|
|
|
|
|
.toText12(isBold: true, isCenter: true, maxLine: 2)
|
|
|
|
|
.toShimmer2(isShow: false),
|
|
|
|
|
),
|
|
|
|
|
).onPress(() async {
|
|
|
|
|
bookAppointmentsViewModel.setSelectedDoctor(DoctorsListResponseModel(
|
|
|
|
|
clinicID: myAppointmentsVM.patientFavouriteDoctorsList[index].clinicId,
|
|
|
|
|
projectID: myAppointmentsVM.patientFavouriteDoctorsList[index].projectId,
|
|
|
|
|
doctorID: myAppointmentsVM.patientFavouriteDoctorsList[index].doctorId,
|
|
|
|
|
));
|
|
|
|
|
LoaderBottomSheet.showLoader();
|
|
|
|
|
await bookAppointmentsViewModel.getDoctorProfile(onSuccess: (dynamic respData) {
|
|
|
|
|
LoaderBottomSheet.hideLoader();
|
|
|
|
|
Navigator.of(context).push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: DoctorProfilePage(isDoctorAllowedToBook: true),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}, onError: (err) {
|
|
|
|
|
LoaderBottomSheet.hideLoader();
|
|
|
|
|
showCommonBottomSheetWithoutHeight(
|
|
|
|
|
context,
|
|
|
|
|
child: Utils.getErrorWidget(loadingText: err),
|
|
|
|
|
callBackFunc: () {},
|
|
|
|
|
isFullScreen: false,
|
|
|
|
|
isCloseButtonVisible: true,
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
).onPress(() async {
|
|
|
|
|
bookAppointmentsViewModel.setSelectedDoctor(DoctorsListResponseModel(
|
|
|
|
|
clinicID: myAppointmentsVM.patientFavouriteDoctorsList[index].clinicId,
|
|
|
|
|
projectID: myAppointmentsVM.patientFavouriteDoctorsList[index].projectId,
|
|
|
|
|
doctorID: myAppointmentsVM.patientFavouriteDoctorsList[index].doctorId,
|
|
|
|
|
));
|
|
|
|
|
LoaderBottomSheet.showLoader();
|
|
|
|
|
await bookAppointmentsViewModel.getDoctorProfile(onSuccess: (dynamic respData) {
|
|
|
|
|
LoaderBottomSheet.hideLoader();
|
|
|
|
|
Navigator.of(context).push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: DoctorProfilePage(isDoctorAllowedToBook: true),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}, onError: (err) {
|
|
|
|
|
LoaderBottomSheet.hideLoader();
|
|
|
|
|
showCommonBottomSheetWithoutHeight(
|
|
|
|
|
context,
|
|
|
|
|
child: Utils.getErrorWidget(loadingText: err),
|
|
|
|
|
callBackFunc: () {},
|
|
|
|
|
isFullScreen: false,
|
|
|
|
|
isCloseButtonVisible: true,
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
}),
|
|
|
|
|
@ -552,96 +556,98 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
|
|
|
|
|
],
|
|
|
|
|
).paddingSymmetrical(24.h, 0.h);
|
|
|
|
|
case 1:
|
|
|
|
|
//TODO: Get LiveCare type Select UI from Hussain
|
|
|
|
|
//TODO: Get LiveCare type Select UI from Hussain
|
|
|
|
|
return appState.isAuthenticated
|
|
|
|
|
? Column(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
|
color: AppColors.whiteColor,
|
|
|
|
|
borderRadius: 24.h,
|
|
|
|
|
hasShadow: false,
|
|
|
|
|
),
|
|
|
|
|
child: Padding(
|
|
|
|
|
padding: EdgeInsets.all(16.h),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
|
|
|
|
color: AppColors.whiteColor,
|
|
|
|
|
borderRadius: 24.h,
|
|
|
|
|
hasShadow: false,
|
|
|
|
|
),
|
|
|
|
|
child: Padding(
|
|
|
|
|
padding: EdgeInsets.all(16.h),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Utils.buildSvgWithAssets(icon: AppAssets.search_by_clinic_icon, width: 40.h, height: 40.h, applyThemeColor: false),
|
|
|
|
|
SizedBox(width: 12.h),
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.immediateConsultation.tr(context: context).toText14(color: AppColors.textColor, isBold: true),
|
|
|
|
|
LocaleKeys.tapToSelectClinic.tr(context: context).toText12(color: AppColors.primaryRedColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Transform.flip(flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)),
|
|
|
|
|
],
|
|
|
|
|
).onPress(() async {
|
|
|
|
|
//TODO Implement API to check for existing LiveCare Requests
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.immediateConsultation.tr(context: context).toText14(color: AppColors.textColor, isBold: true),
|
|
|
|
|
LocaleKeys.tapToSelectClinic.tr(context: context).toText12(color: AppColors.primaryRedColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Transform.flip(
|
|
|
|
|
flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)),
|
|
|
|
|
],
|
|
|
|
|
).onPress(() async {
|
|
|
|
|
//TODO Implement API to check for existing LiveCare Requests
|
|
|
|
|
|
|
|
|
|
LoaderBottomSheet.showLoader();
|
|
|
|
|
await immediateLiveCareViewModel.getPatientLiveCareHistory();
|
|
|
|
|
LoaderBottomSheet.hideLoader();
|
|
|
|
|
LoaderBottomSheet.showLoader();
|
|
|
|
|
await immediateLiveCareViewModel.getPatientLiveCareHistory();
|
|
|
|
|
LoaderBottomSheet.hideLoader();
|
|
|
|
|
|
|
|
|
|
if (immediateLiveCareViewModel.patientHasPendingLiveCareRequest) {
|
|
|
|
|
Navigator.of(context).push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: ImmediateLiveCarePendingRequestPage(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
Navigator.of(context).push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: SelectImmediateLiveCareClinicPage(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}),
|
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
|
Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.1), height: 1.h),
|
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
if (immediateLiveCareViewModel.patientHasPendingLiveCareRequest) {
|
|
|
|
|
Navigator.of(context).push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: ImmediateLiveCarePendingRequestPage(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
Navigator.of(context).push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: SelectImmediateLiveCareClinicPage(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}),
|
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
|
Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.1), height: 1.h),
|
|
|
|
|
SizedBox(height: 16.h),
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Utils.buildSvgWithAssets(icon: AppAssets.search_by_doctor_icon, width: 40.h, height: 40.h, applyThemeColor: false),
|
|
|
|
|
SizedBox(width: 12.h),
|
|
|
|
|
Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.scheduledConsultation.tr(context: context).toText14(color: AppColors.textColor, isBold: true),
|
|
|
|
|
LocaleKeys.tapToSelectClinic.tr(context: context).toText12(color: AppColors.primaryRedColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Transform.flip(flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)),
|
|
|
|
|
],
|
|
|
|
|
).onPress(() {
|
|
|
|
|
bookAppointmentsViewModel.setIsClinicsListLoading(true);
|
|
|
|
|
bookAppointmentsViewModel.setIsLiveCareSchedule(true);
|
|
|
|
|
Navigator.of(context).push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: SelectClinicPage(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
).paddingSymmetrical(24.h, 0.h)
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.scheduledConsultation.tr(context: context).toText14(color: AppColors.textColor, isBold: true),
|
|
|
|
|
LocaleKeys.tapToSelectClinic.tr(context: context).toText12(color: AppColors.primaryRedColor, isBold: true),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Transform.flip(
|
|
|
|
|
flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)),
|
|
|
|
|
],
|
|
|
|
|
).onPress(() {
|
|
|
|
|
bookAppointmentsViewModel.setIsClinicsListLoading(true);
|
|
|
|
|
bookAppointmentsViewModel.setIsLiveCareSchedule(true);
|
|
|
|
|
Navigator.of(context).push(
|
|
|
|
|
CustomPageRoute(
|
|
|
|
|
page: SelectClinicPage(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
).paddingSymmetrical(24.h, 0.h)
|
|
|
|
|
: getLiveCareNotLoggedInUI();
|
|
|
|
|
default:
|
|
|
|
|
SizedBox.shrink();
|
|
|
|
|
@ -657,28 +663,28 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
|
|
|
|
|
children: [
|
|
|
|
|
Expanded(
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.notSureHelpMeChooseClinic.tr(context: context).toText16(isBold: true, color: AppColors.textColor),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
LocaleKeys.checkYourSymptomsWithScale.tr(context: context).toText12(
|
|
|
|
|
isBold: true,
|
|
|
|
|
color: AppColors.greyTextColor,
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.notSureHelpMeChooseClinic.tr(context: context).toText16(isBold: true, color: AppColors.textColor),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
LocaleKeys.checkYourSymptomsWithScale.tr(context: context).toText12(
|
|
|
|
|
isBold: true,
|
|
|
|
|
color: AppColors.greyTextColor,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(width: 16.w),
|
|
|
|
|
CustomButton(
|
|
|
|
|
height: 42.h,
|
|
|
|
|
width: 42.w,
|
|
|
|
|
text: "",
|
|
|
|
|
onPressed: () => context.navigateWithName(AppRoutes.userInfoSelection),
|
|
|
|
|
icon: getIt.get<AppState>().isArabic() ? AppAssets.arrow_back : AppAssets.arrow_forward,
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(width: 16.w),
|
|
|
|
|
CustomButton(
|
|
|
|
|
height: 42.h,
|
|
|
|
|
width: 42.w,
|
|
|
|
|
text: "",
|
|
|
|
|
onPressed: () => context.navigateWithName(AppRoutes.userInfoSelection),
|
|
|
|
|
icon: getIt.get<AppState>().isArabic() ? AppAssets.arrow_back : AppAssets.arrow_forward,
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
).paddingAll(24.w),
|
|
|
|
|
).paddingAll(24.w),
|
|
|
|
|
)
|
|
|
|
|
: SizedBox.shrink();
|
|
|
|
|
}
|
|
|
|
|
@ -687,13 +693,10 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
|
|
|
|
|
regionalViewModel.flush();
|
|
|
|
|
regionalViewModel.setBottomSheetType(type);
|
|
|
|
|
// AppointmentViaRegionViewmodel? viewmodel = null;
|
|
|
|
|
showCommonBottomSheetWithoutHeight(context, title: "",
|
|
|
|
|
titleWidget: Consumer<AppointmentViaRegionViewmodel>(builder: (_, data, __) => getTitle(data)),
|
|
|
|
|
isDismissible: false,
|
|
|
|
|
showCommonBottomSheetWithoutHeight(context, title: "", titleWidget: Consumer<AppointmentViaRegionViewmodel>(builder: (_, data, __) => getTitle(data)), isDismissible: false,
|
|
|
|
|
child: Consumer<AppointmentViaRegionViewmodel>(builder: (_, data, __) {
|
|
|
|
|
return getRegionalSelectionWidget(data);
|
|
|
|
|
}),
|
|
|
|
|
callBackFunc: () {});
|
|
|
|
|
return getRegionalSelectionWidget(data);
|
|
|
|
|
}), callBackFunc: () {});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget getRegionalSelectionWidget(AppointmentViaRegionViewmodel data) {
|
|
|
|
|
@ -749,7 +752,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
|
|
|
|
|
return SizedBox.shrink();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _handleSortByLocationToggle(bool value, AppointmentViaRegionViewmodel regionVM) {
|
|
|
|
|
void _handleSortByLocationToggle(bool value, AppointmentViaRegionViewmodel regionVM) {
|
|
|
|
|
if (value) {
|
|
|
|
|
final locationUtils = getIt.get<LocationUtils>();
|
|
|
|
|
locationUtils.getLocation(
|
|
|
|
|
@ -817,6 +820,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bookAppointmentsViewModel.addListener(listener);
|
|
|
|
|
bookAppointmentsViewModel.getRegionMappedProjectList();
|
|
|
|
|
}
|
|
|
|
|
@ -927,52 +931,58 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
|
|
|
|
|
).paddingSymmetrical(24.h, 0.h);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void showUnKnownClinicBottomSheet() {
|
|
|
|
|
showCommonBottomSheetWithoutHeight(
|
|
|
|
|
context,
|
|
|
|
|
title: "",
|
|
|
|
|
isDismissible: true,
|
|
|
|
|
void showUnKnownClinicBottomSheet() async {
|
|
|
|
|
if (await Utils.getBoolFromPrefs(CacheConst.isShowSymptomCheckerBottomSheet)) {
|
|
|
|
|
showCommonBottomSheetWithoutHeight(
|
|
|
|
|
context,
|
|
|
|
|
title: "",
|
|
|
|
|
isDismissible: true,
|
|
|
|
|
isCloseButtonVisible: false,
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.notSureHelpMeChooseClinic.tr(context: context).toText28(color: AppColors.textColor, isBold: true, height: 1.5),
|
|
|
|
|
SizedBox(height: 4.h),
|
|
|
|
|
LocaleKeys.mentionYourSymptomsAndFindDoctors.tr(context: context).toText12(color: AppColors.greyTextColor, isBold: true,),
|
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
|
CustomButton(
|
|
|
|
|
text: LocaleKeys.yesPleaseINeedHelp.tr(context: context),
|
|
|
|
|
onPressed: () {
|
|
|
|
|
context.pop();
|
|
|
|
|
context.navigateWithName(AppRoutes.userInfoSelection);
|
|
|
|
|
},
|
|
|
|
|
backgroundColor: AppColors.primaryRedColor,
|
|
|
|
|
borderColor: AppColors.primaryRedColor,
|
|
|
|
|
textColor: AppColors.whiteColor,
|
|
|
|
|
fontSize: 16.f,
|
|
|
|
|
isBold: true,
|
|
|
|
|
borderRadius: 12.r,
|
|
|
|
|
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
|
|
|
|
|
height: 56.h,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
CustomButton(
|
|
|
|
|
text: LocaleKeys.noThanksIKnowTheClinic.tr(context: context),
|
|
|
|
|
onPressed: () {
|
|
|
|
|
context.pop();
|
|
|
|
|
},
|
|
|
|
|
backgroundColor: AppColors.chipSecondaryLightRedColor,
|
|
|
|
|
borderColor: AppColors.chipSecondaryLightRedColor,
|
|
|
|
|
textColor: AppColors.primaryRedColor,
|
|
|
|
|
fontSize: 16.f,
|
|
|
|
|
isBold: true,
|
|
|
|
|
borderRadius: 12.r,
|
|
|
|
|
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
|
|
|
|
|
height: 56.h,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
).paddingSymmetrical(24.w, 20.h),
|
|
|
|
|
callBackFunc: () {},
|
|
|
|
|
);
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.notSureHelpMeChooseClinic.tr(context: context).toText28(color: AppColors.textColor, isBold: true, height: 1.5),
|
|
|
|
|
SizedBox(height: 4.h),
|
|
|
|
|
LocaleKeys.mentionYourSymptomsAndFindDoctors.tr(context: context).toText12(
|
|
|
|
|
color: AppColors.greyTextColor,
|
|
|
|
|
isBold: true,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(height: 24.h),
|
|
|
|
|
CustomButton(
|
|
|
|
|
text: LocaleKeys.yesPleaseINeedHelp.tr(context: context),
|
|
|
|
|
onPressed: () {
|
|
|
|
|
context.pop();
|
|
|
|
|
context.navigateWithName(AppRoutes.userInfoSelection);
|
|
|
|
|
},
|
|
|
|
|
backgroundColor: AppColors.primaryRedColor,
|
|
|
|
|
borderColor: AppColors.primaryRedColor,
|
|
|
|
|
textColor: AppColors.whiteColor,
|
|
|
|
|
fontSize: 16.f,
|
|
|
|
|
isBold: true,
|
|
|
|
|
borderRadius: 12.r,
|
|
|
|
|
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
|
|
|
|
|
height: 56.h,
|
|
|
|
|
),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
CustomButton(
|
|
|
|
|
text: LocaleKeys.noThanksIKnowTheClinic.tr(context: context),
|
|
|
|
|
onPressed: () {
|
|
|
|
|
Utils.saveBoolFromPrefs(CacheConst.isShowSymptomCheckerBottomSheet, false);
|
|
|
|
|
context.pop();
|
|
|
|
|
},
|
|
|
|
|
backgroundColor: AppColors.chipSecondaryLightRedColor,
|
|
|
|
|
borderColor: AppColors.chipSecondaryLightRedColor,
|
|
|
|
|
textColor: AppColors.primaryRedColor,
|
|
|
|
|
fontSize: 16.f,
|
|
|
|
|
isBold: true,
|
|
|
|
|
borderRadius: 12.r,
|
|
|
|
|
// padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
|
|
|
|
|
height: 56.h,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
).paddingSymmetrical(24.w, 20.h),
|
|
|
|
|
callBackFunc: () {},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|