diff --git a/assets/images/svg/my_child_vaccine.svg b/assets/images/svg/my_child_vaccine.svg
new file mode 100644
index 0000000..f671baf
--- /dev/null
+++ b/assets/images/svg/my_child_vaccine.svg
@@ -0,0 +1,5 @@
+
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index 26da9fa..17422a6 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -183,6 +183,7 @@ class AppAssets {
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 my_child_vaccine_icon = '$svgBasePath/my_child_vaccine.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';
diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart
index 6379456..7ac2ae5 100644
--- a/lib/features/authentication/authentication_view_model.dart
+++ b/lib/features/authentication/authentication_view_model.dart
@@ -462,7 +462,7 @@ class AuthenticationViewModel extends ChangeNotifier {
if (isSwitchUser && _appState.getSuperUserID == null) {
nationalIdController.text = responseID.toString();
- }else if( isSwitchUser && _appState.getSuperUserID != null){
+ } else if (isSwitchUser && _appState.getSuperUserID != null) {
nationalIdController.text = _appState.getSuperUserID.toString();
}
@@ -1078,4 +1078,30 @@ class AuthenticationViewModel extends ChangeNotifier {
return null;
}
}
+
+ Future logout() async {
+ try {
+ // Clear user data from AppState
+ _appState.setAuthenticatedUser(null);
+ _appState.setAuthenticatedUser(null, isFamily: true);
+ _appState.setIsAuthenticated = false;
+ _appState.setAppAuthToken = "";
+ _appState.setUserBloodGroup = "";
+ _appState.setSuperUserID = null;
+ _appState.setIsChildLoggedIn = false;
+ _appState.setFamilyFileTokenID = "";
+ _appState.setSelectDeviceByImeiRespModelElement(null);
+ _appState.setNHICUserData = CheckUserStatusResponseNHIC();
+ _appState.setUserRegistrationPayload = RegistrationDataModelPayload();
+ // Clear privilege lists
+ _appState.setPrivilegeModelList([]);
+ _appState.setVidaPlusProjectList([]);
+ _appState.setHMCProjectList([]);
+ _appState.setProjectsDetailList([]);
+ await clearDefaultInputValues();
+ _navigationService.pushAndReplace(AppRoutes.landingScreen);
+ } catch (e) {
+ _navigationService.pushAndReplace(AppRoutes.landingScreen);
+ }
+ }
}
diff --git a/lib/features/blood_donation/widgets/hospital_selection.dart b/lib/features/blood_donation/widgets/hospital_selection.dart
index c6065ae..9889410 100644
--- a/lib/features/blood_donation/widgets/hospital_selection.dart
+++ b/lib/features/blood_donation/widgets/hospital_selection.dart
@@ -15,8 +15,9 @@ import 'package:provider/provider.dart';
class HospitalBottomSheetBodySelection extends StatelessWidget {
final Function(BdGetProjectsHaveBdClinic userSelection) onUserHospitalSelection;
+ final bool isHideTitle;
- const HospitalBottomSheetBodySelection({super.key, required this.onUserHospitalSelection(BdGetProjectsHaveBdClinic userSelection)});
+ const HospitalBottomSheetBodySelection({super.key, required this.onUserHospitalSelection(BdGetProjectsHaveBdClinic userSelection), this.isHideTitle = false});
@override
Widget build(BuildContext context) {
@@ -25,7 +26,7 @@ class HospitalBottomSheetBodySelection extends StatelessWidget {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- LocaleKeys.selectHospital.tr(context: context).toText16(weight: FontWeight.w500, color: AppColors.greyTextColor),
+ if(!isHideTitle) LocaleKeys.selectHospital.tr(context: context).toText16(weight: FontWeight.w500, color: AppColors.greyTextColor),
SizedBox(height: 16.h),
SizedBox(
height: MediaQuery.sizeOf(context).height * .4,
diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart
index d67e5de..17cbb94 100644
--- a/lib/features/medical_file/medical_file_view_model.dart
+++ b/lib/features/medical_file/medical_file_view_model.dart
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
+import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
import 'package:hmg_patient_app_new/core/utils/request_utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
@@ -576,9 +577,18 @@ class MedicalFileViewModel extends ChangeNotifier {
await RequestUtils.getAddFamilyRequest(nationalIDorFile: authVM.nationalIdController.text, mobileNo: authVM.phoneNumberController.text, countryCode: authVM.selectedCountrySignup.countryCode);
final resultEither = await medicalFileRepo.addFamilyFile(request: request.toJson());
- resultEither.fold((failure) async => await errorHandlerService.handleError(failure: failure), (apiResponse) async {
+ resultEither.fold(
+ (failure) async => await errorHandlerService.handleError(
+ failure: failure,
+ onUnHandledFailure: (failure) {
+ LoaderBottomSheet.hideLoader();
+ _dialogService.showErrorBottomSheet(
+ message: failure.message!,
+ onOkPressed: () {
+ navigationService.pop();
+ });
+ }), (apiResponse) async {
if (apiResponse.messageStatus == 2) {
- print("=======");
LoaderBottomSheet.hideLoader();
_dialogService.showErrorBottomSheet(
message: apiResponse.errorMessage!,
diff --git a/lib/presentation/blood_donation/blood_donation_page.dart b/lib/presentation/blood_donation/blood_donation_page.dart
index fe36535..26da599 100644
--- a/lib/presentation/blood_donation/blood_donation_page.dart
+++ b/lib/presentation/blood_donation/blood_donation_page.dart
@@ -62,6 +62,7 @@ class _BloodDonationPageState extends State {
bloodDonationVM.fetchHospitalsList().then((value) {
showCommonBottomSheetWithoutHeight(context, title: "Select Hospital", isDismissible: false, child: Consumer(builder: (_, data, __) {
return HospitalBottomSheetBodySelection(
+ isHideTitle: true,
onUserHospitalSelection: (BdGetProjectsHaveBdClinic userChoice) {
bloodDonationVM.getFreeBloodDonationSlots(request: {"ClinicID": 134, "ProjectID": userChoice.projectId});
},
diff --git a/lib/presentation/child_vaccine/my_child_vaccine_page.dart b/lib/presentation/child_vaccine/my_child_vaccine_page.dart
new file mode 100644
index 0000000..6a226ab
--- /dev/null
+++ b/lib/presentation/child_vaccine/my_child_vaccine_page.dart
@@ -0,0 +1,376 @@
+// import 'package:easy_localization/easy_localization.dart';
+// import 'package:flutter/material.dart';
+// import 'package:hmg_patient_app_new/core/app_assets.dart';
+// import 'package:hmg_patient_app_new/core/app_state.dart';
+// import 'package:hmg_patient_app_new/core/dependencies.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/authentication/authentication_view_model.dart';
+// import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
+// import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_hospitals_model.dart';
+// import 'package:hmg_patient_app_new/features/blood_donation/widgets/hospital_selection.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/presentation/book_appointment/select_clinic_page.dart';
+// import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
+// import 'package:hmg_patient_app_new/services/dialog_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:lottie/lottie.dart';
+// import 'package:provider/provider.dart';
+// import 'package:hmg_patient_app_new/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart';
+//
+// class MyChildVaccinePage extends StatefulWidget {
+// MyChildVaccinePage({super.key});
+//
+// @override
+// State createState() => _MyChildVaccinePageState();
+// }
+//
+// class _MyChildVaccinePageState extends State {
+// late AppState appState;
+//
+// @override
+// void initState() {
+// super.initState();
+// Future.microtask(() => getIt.get().fetchAllData());
+// }
+//
+// @override
+// Widget build(BuildContext context) {
+// appState = getIt();
+// return Scaffold(
+// backgroundColor: AppColors.bgScaffoldColor,
+// body: Consumer(builder: (context, bloodDonationVM, child) {
+// return Column(
+// children: [
+// Expanded(
+// child: CollapsingListView(
+// title: "Child Vaccines".needTranslation,
+// trailing: CustomButton(
+// icon: AppAssets.add_icon,
+// text: "Add Child",
+// onPressed: () {},
+// backgroundColor: AppColors.bgRedLightColor,
+// borderColor: AppColors.bgRedLightColor,
+// textColor: AppColors.primaryRedColor,
+// iconColor: AppColors.primaryRedColor,
+// padding: EdgeInsetsGeometry.symmetric(vertical: 0.h, horizontal: 10.h)),
+// child: Padding(
+// padding: EdgeInsets.all(24.w),
+// child: SingleChildScrollView(
+// child: Container(
+// decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, 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.select_city_icon, width: 40.h, height: 40.h),
+// SizedBox(width: 12.w),
+// Column(
+// crossAxisAlignment: CrossAxisAlignment.start,
+// children: [
+// LocaleKeys.city.tr().toText16(color: AppColors.textColor, weight: FontWeight.w500),
+// (appState.isArabic()
+// ? (bloodDonationVM.selectedCity?.descriptionN ?? LocaleKeys.select.tr())
+// : bloodDonationVM.selectedCity?.description ?? LocaleKeys.select.tr(context: context))
+// .toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+// ],
+// ),
+// ],
+// ),
+// Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h),
+// ],
+// ).onPress(() async {
+// 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),
+// SizedBox(height: 16.h),
+// Row(
+// mainAxisAlignment: MainAxisAlignment.spaceBetween,
+// children: [
+// Row(
+// children: [
+// Utils.buildSvgWithAssets(icon: AppAssets.genderInputIcon, width: 40.h, height: 40.h),
+// SizedBox(width: 12.w),
+// Column(
+// crossAxisAlignment: CrossAxisAlignment.start,
+// children: [
+// LocaleKeys.gender.tr().toText16(color: AppColors.textColor, weight: FontWeight.w500),
+// (appState.isArabic()
+// ? (bloodDonationVM.selectedGender?.typeAr ?? LocaleKeys.select.tr())
+// : bloodDonationVM.selectedGender?.type ?? LocaleKeys.select.tr(context: context))
+// .toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+// ],
+// ),
+// ],
+// ),
+// 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),
+// Row(
+// mainAxisAlignment: MainAxisAlignment.spaceBetween,
+// children: [
+// Row(
+// children: [
+// Utils.buildSvgWithAssets(icon: AppAssets.bloodType, width: 40.h, height: 40.h),
+// SizedBox(width: 12.w),
+// Column(
+// crossAxisAlignment: CrossAxisAlignment.start,
+// children: [
+// LocaleKeys.bloodType.tr().toText16(color: AppColors.textColor, weight: FontWeight.w500),
+// // bloodDonationVM.selectedBloodType?.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+// (appState.isArabic()
+// ? (bloodDonationVM.selectedBloodType ?? LocaleKeys.select.tr())
+// : bloodDonationVM.selectedBloodType ?? LocaleKeys.select.tr(context: context))
+// .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: () {});
+// }),
+// ],
+// ),
+// ),
+// ),
+// ),
+// ),
+// ),
+// ),
+// Container(
+// decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
+// child: SizedBox(
+// child: Column(
+// crossAxisAlignment: CrossAxisAlignment.start,
+// children: [
+// ],
+// ),
+// ),
+// ),
+// ],
+// );
+// }),
+// );
+// }
+// }
+
+
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.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/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';
+
+class MyChildVaccinePage extends StatefulWidget {
+ const MyChildVaccinePage({super.key});
+
+ @override
+ State createState() => _MyChildVaccinePageState();
+}
+
+class _MyChildVaccinePageState extends State {
+ int selectedChildIndex = 0;
+
+ final List