fixes for login & register (Points)

updare-to-3.32.sultan
Aamir Muhammad 7 months ago
parent fd0635764d
commit bdaef7f89c

@ -27,10 +27,6 @@ android {
versionCode = flutter.versionCode versionCode = flutter.versionCode
versionName = flutter.versionName versionName = flutter.versionName
multiDexEnabled true multiDexEnabled true
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
} }
buildFeatures { buildFeatures {
@ -75,12 +71,16 @@ android {
} }
packagingOptions { packagingOptions {
jniLibs { jniLibs {
pickFirsts += ['**/libc++_shared.so', '**/libzoom_util.so', '**/libzoom_video_sdk.so', '**/libzoom_annotation.so', '**/libzoom_videoeffects.so'] pickFirsts += ['lib/x86/libc++_shared.so', 'lib/x86_64/libc++_shared.so', 'lib/armeabi-v7a/libc++_shared.so', 'lib/arm64-v8a/libc++_shared.so', '**/*.so']
useLegacyPackaging true useLegacyPackaging true
} }
resources { resources {
excludes += ['META-INF/proguard/androidx-annotations.pro'] excludes += ['META-INF/proguard/androidx-annotations.pro']
} }
pickFirst '**/libzoom_util.so'
pickFirst '**/libzoom_video_sdk.so'
pickFirst '**/libzoom_annotation.so'
pickFirst '**/libzoom_videoeffects.so'
} }
// Enable core library desugaring // Enable core library desugaring

File diff suppressed because it is too large Load Diff

@ -2329,7 +2329,7 @@ const Map localizedValues = {
"clickPrivacyPolicy": {"en": "Please click here to view the privacy policy", "ar": "الرجاء الضغط هنا لعرض سياسة الخصوصية"}, "clickPrivacyPolicy": {"en": "Please click here to view the privacy policy", "ar": "الرجاء الضغط هنا لعرض سياسة الخصوصية"},
"welcomeToDrSulaiman": {"en": "Welcome to Dr. Sulaiman Al Habib Medical Group", "ar": "مرحباً بكم في مجموعة الدكتور سليمان الحبيب الطبية"}, "welcomeToDrSulaiman": {"en": "Welcome to Dr. Sulaiman Al Habib Medical Group", "ar": "مرحباً بكم في مجموعة الدكتور سليمان الحبيب الطبية"},
"dontHaveAccount": {"en": "Dont have an account?", "ar": "ليس لديك حساب؟"}, "dontHaveAccount": {"en": "Dont have an account?", "ar": "ليس لديك حساب؟"},
"loginByOTP": {"en": "Login By OTP", "ar":"تسجيل الدخول باستخدام OTP"}, "loginByOTP": {"en": "Login By SMS", "ar":" تسجيل الدخول بواسطة الرسائل القصيرة"},
"loginBy": {"en": "Login By", "ar":"تسجيل الدخول بواسطة"}, "loginBy": {"en": "Login By", "ar":"تسجيل الدخول بواسطة"},
"prepareToElevate": {"en": "Prepared to elevate your health and well-being?", "ar": "هل أنت مستعد لتحسين صحتك ورفاهتك؟"}, "prepareToElevate": {"en": "Prepared to elevate your health and well-being?", "ar": "هل أنت مستعد لتحسين صحتك ورفاهتك؟"},
"alreadyHaveAccount": {"en": "Already have an account?", "ar": "هل لديك حساب بالفعل؟"}, "alreadyHaveAccount": {"en": "Already have an account?", "ar": "هل لديك حساب بالفعل؟"},
@ -2355,7 +2355,7 @@ const Map localizedValues = {
"pleaseEnterNationalId": {"en": "Please enter your national id", "ar":"الرجاء إدخال رقم الهوية الوطنية الخاص بك"}, "pleaseEnterNationalId": {"en": "Please enter your national id", "ar":"الرجاء إدخال رقم الهوية الوطنية الخاص بك"},
"pleaseSelectCountry": {"en": "Please select your country", "ar":"الرجاء اختيار بلدك"}, "pleaseSelectCountry": {"en": "Please select your country", "ar":"الرجاء اختيار بلدك"},
"pleaseSelectDOB": {"en": "Please enter your date of birth", "ar":"الرجاء إدخال تاريخ ميلادك"}, "pleaseSelectDOB": {"en": "Please enter your date of birth", "ar":"الرجاء إدخال تاريخ ميلادك"},
"pleaseAcceptTermsConditions": {"en": "Please check agree to the term and conditions", "ar":"الرجاء الموافقة على الشروط والأحكام"}, "pleaseAcceptTermsConditions": {"en": "Please accept the term and conditions", "ar":"الرجاء قبول الشروط والأحكام"},
"lastLoginBy": {"en": "Last Login by", "ar":"آخر تسجيل دخول بواسطة"}, "lastLoginBy": {"en": "Last Login by", "ar":"آخر تسجيل دخول بواسطة"},
"enterPhoneNumber": {"en": "Enter Phone Number", "ar":"أدخل رقم الهاتف"}, "enterPhoneNumber": {"en": "Enter Phone Number", "ar":"أدخل رقم الهاتف"},
"enterEmailDesc": {"en": "Enter your email address to complete the process of creating a medical file", "ar":"أدخل عنوان بريدك الإلكتروني لإكمال عملية إنشاء ملف طبي"}, "enterEmailDesc": {"en": "Enter your email address to complete the process of creating a medical file", "ar":"أدخل عنوان بريدك الإلكتروني لإكمال عملية إنشاء ملف طبي"},

@ -0,0 +1,484 @@
// import 'package:flutter/material.dart';
// import 'package:hmg_patient_app/config/config.dart';
// import 'package:hmg_patient_app/core/enum/viewstate.dart';
// import 'package:hmg_patient_app/core/service/AuthenticatedUserObject.dart';
// import 'package:hmg_patient_app/core/viewModels/appointment_rate_view_model.dart';
// import 'package:hmg_patient_app/core/viewModels/base_view_model.dart';
// import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
// import 'package:hmg_patient_app/locator.dart';
// import 'package:hmg_patient_app/models/Authentication/check_activation_code_response.dart';
// import 'package:hmg_patient_app/models/Authentication/check_paitent_authentication_req.dart';
// import 'package:hmg_patient_app/models/Authentication/select_device_imei_res.dart';
// import 'package:hmg_patient_app/models/Authentication/send_activation_request.dart';
// import 'package:hmg_patient_app/services/authentication/auth_provider.dart';
// import 'package:hmg_patient_app/uitl/app_shared_preferences.dart';
// import 'package:hmg_patient_app/uitl/gif_loader_dialog_utils.dart';
// import 'package:hmg_patient_app/uitl/utils.dart';
// import 'package:hmg_patient_app/config/shared_pref_kay.dart';
// import 'package:hmg_patient_app/pages/landing/landing_page.dart';
// import 'package:hmg_patient_app/widgets/transitions/fade_page.dart';
// import 'package:hmg_patient_app/new_ui/otp/otp_validation_bootmsheet_widget.dart';
// import 'package:hmg_patient_app/theme/colors.dart';
// import 'package:hmg_patient_app/widgets/text/app_texts_widget.dart';
// import 'package:intl/src/intl/date_format.dart';
// import '../../models/Appointments/toDoCountProviderModel.dart';
// import '../../models/InPatientServices/get_admission_info_response_model.dart';
// import '../../models/InPatientServices/get_admission_request_info_response_model.dart';
// import '../../pages/login/register_new.dart';
// import '../../pages/login/user-login-agreement-page.dart';
// import '../../pages/login/welcome.dart';
// import '../../pages/rateAppointment/rate_appointment_doctor.dart';
// import '../../services/clinic_services/get_clinic_service.dart';
// import '../../uitl/app_toast.dart';
// import '../../uitl/translations_delegate_base.dart';
// import '../../widgets/dialogs/confirm_dialog.dart';
// import '../../widgets/otp/sms-popup.dart';
//
import 'base_view_model.dart';
class AuthProviderViewModel extends BaseViewModel {
// bool isLoading = true;
// TextEditingController nationIdController = TextEditingController();
// TextEditingController? phoneController = TextEditingController();
// String? phoneNumber;
// Country selectedCountry = Country.saudiArabia;
// bool isDubai = false;
// final authService = AuthProvider();
// var sharedPref = AppSharedPreferences();
// bool authenticated = false;
// late int mobileNumber;
// String errorMsg = '';
// SelectDeviceIMEIRES? userDetails;
// var registerd_data;
// bool isMoreOption = false;
// var zipCode;
// var patientOutSA;
// var loginTokenID;
// var loginType;
// var deviceToken;
// var lastLogin;
// AuthenticatedUserObject authenticatedUserObject = locator<AuthenticatedUserObject>();
// AppointmentRateViewModel appointmentRateViewModel = locator<AppointmentRateViewModel>();
// ProjectViewModel projectViewModel = locator<ProjectViewModel>();
// ToDoCountProviderModel toDoProvider = locator<ToDoCountProviderModel>();
// late int selectedOption;
// bool onlySMSBox = false;
// var userData;
// int fingrePrintBefore = 0;
// var dob;
// late int isHijri;
// var healthId;
//
// checkUserAuthentication(type, context) {
// GifLoaderDialogUtils.showMyDialog(context);
// var req = getCommonRequest(type: type);
// req.logInTokenID = "";
// var request = CheckPatientAuthenticationReq.fromJson(req.toJson());
// sharedPref.setObject(REGISTER_DATA_FOR_REGISTER, request);
// authService
// .checkPatientAuthentication(request)
// .then((value) => {
// if (value['isSMSSent'])
// {
// sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']),
// loginTokenID = value['LogInTokenID'],
// sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, request),
// sendActivationCode(type, context)
// }
// else
// {
// if (value['IsAuthenticated']) {checkActivationCode(value: null, context: context)}
// }
// })
// .catchError((err) {
// print(err);
// GifLoaderDialogUtils.hideDialog(context);
// ConfirmDialog dialog = ConfirmDialog(
// context: context,
// confirmMessage: err,
// okText: TranslationBase.of(context).confirm,
// cancelText: TranslationBase.of(context).cancel_nocaps,
// okFunction: () => {
// ConfirmDialog.closeAlertDialog(context),
// Navigator.of(context).push(FadePage(page: RegisterNew())),
// },
// cancelFunction: () => {});
// dialog.showAlertDialog(context);
// projectViewModel.analytics.loginRegistration.login_fail(error: err.toString());
// });
// }
//
// sendActivationCode(type, context) async {
// var request = getCommonRequest(type: type);
// request.sMSSignature = await SMSOTP.getSignature();
// selectedOption = type;
// // GifLoaderDialogUtils.showMyDialog(context);
// if (healthId != null || isDubai) {
// if (!isDubai) {
// request.dob = dob; //isHijri == 1 ? dob : dateFormat2.format(dateFormat.parse(dob));
// }
// request.healthId = healthId;
// request.isHijri = isHijri;
// await authService.sendActivationCodeRegister(request).then((result) {
// // GifLoaderDialogUtils.hideDialog(context);
// if (result != null && result['isSMSSent'] == true) {
// startSMSService(type, context);
// }
// }).catchError((r) {
// GifLoaderDialogUtils.hideDialog(context);
// AppToast.showErrorToast(message: r);
// });
// } else {
// request.dob = "";
// request.healthId = "";
// request.isHijri = 0;
// await authService.sendActivationCode(request).then((result) {
// GifLoaderDialogUtils.hideDialog(context);
// if (result != null && result['isSMSSent'] == true) {
// startSMSService(type, context);
// }
// }).catchError((r) {
// GifLoaderDialogUtils.hideDialog(context);
// AppToast.showErrorToast(message: r.toString());
// });
// }
// }
//
// checkActivationCode({value, context}) async {
// // Navigator.pop(context);
// GifLoaderDialogUtils.showMyDialog(context!);
// var request = getCommonRequest().toJson();
// dynamic res;
// if (healthId != null || isDubai) {
// if (isDubai) {
// request['DOB'] = dob;
// }
// request['HealthId'] = healthId;
// request['IsHijri'] = isHijri;
//
// authService
// .checkActivationCodeRegister(request, value)
// .then((result) => {
// res = result,
// if (result is Map)
// {
// result = CheckActivationCode.fromJson(result as Map<String, dynamic>),
// if (registerd_data != null && registerd_data.isRegister == true)
// {
// // if(widget.isDubai ==false){
// // widget.changePageViewIndex!(1),
// // if(widget.isDubai ==false){
//
// Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)),
// }
// }
// else
// {
// Navigator.of(context).pop(),
// GifLoaderDialogUtils.hideDialog(context),
// Future.delayed(Duration(seconds: 1), () {
// AppToast.showErrorToast(message: result);
// }),
// // projectViewModel.analytics.loginRegistration.login_fail(error: result),
// // projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result),
// }
// })
// .catchError((err) {
// print(err);
// GifLoaderDialogUtils.hideDialog(context);
// Future.delayed(Duration(seconds: 1), () {
// AppToast.showErrorToast(message: err);
// // startSMSService(tempType);
// });
// });
// } else {
// authService
// .checkActivationCode(request, value)
// .then((result) async => {
// res = result,
// if (result is Map)
// {
// result = CheckActivationCode.fromJson(result as Map<String, dynamic>),
// if (result.errorCode == '699')
// {
// //699 block run here
// GifLoaderDialogUtils.hideDialog(context),
// Future.delayed(Duration(seconds: 2), () {
// AppToast.showErrorToast(message: result.errorEndUserMessage);
// Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: WelcomeLogin));
// })
// }
// else if (registerd_data != null && registerd_data.isRegister == true)
// {
// // widget.changePageViewIndex!(1),
// Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)),
// }
// else
// {
// sharedPref.remove(FAMILY_FILE),
// result.list.isFamily = false,
// projectViewModel.user = userData = result.list,
// sharedPref.setString(BLOOD_TYPE, result.patientBloodType ?? ""),
// authenticatedUserObject.user = result.list,
// projectViewModel.setPrivilege(privilegeList: res),
// await sharedPref.setObject(MAIN_USER, result.list),
// await sharedPref.setObject(USER_PROFILE, result.list),
// loginTokenID = result.logInTokenID,
// await sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID),
// await sharedPref.setString(TOKEN, result.authenticationTokenID),
// checkIfUserAgreedBefore(result, context),
// projectViewModel.analytics.loginRegistration.login_successful(),
// }
// }
// else
// {
// // Navigator.of(context).pop(),
// GifLoaderDialogUtils.hideDialog(context),
// Future.delayed(Duration(seconds: 1), () {
// Navigator.of(context).pop();
// AppToast.showErrorToast(message: result, localContext: context);
// startSMSService(tempType, context);
// }),
//
// // projectViewModel.analytics.loginRegistration.login_fail(error: result),
// // projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result)
// }
// })
// .catchError((err) {
// GifLoaderDialogUtils.hideDialog(context);
// Future.delayed(Duration(seconds: 1), () {
// print(err);
// AppToast.showErrorToast(message: err);
// // startSMSService(tempType);
// });
// });
// }
// }
//
// var tempType;
//
// startSMSService(type, context) {
// tempType = type;
// late SMSOTP smsOtp; // Declare the variable first
//
// smsOtp = SMSOTP(
// context,
// type,
// phoneNumber,
// (code) {
// smsOtp.dispose(); // Now we can reference it
// checkActivationCode(value: code, context: context);
// },
// () {
// smsOtp.dispose(); // Now we can reference it
// Navigator.pop(context);
// },
// );
// smsOtp.displayDialog(context);
// }
//
// setDefault(context) async {
// // showLoader(true);
// if (await sharedPref.getObject(IMEI_USER_DATA) != null) userData = SelectDeviceIMEIRES.fromJson(await sharedPref.getObject(IMEI_USER_DATA));
//
// if (await sharedPref.getObject(REGISTER_DATA_FOR_LOGIIN) != null) {
// isMoreOption = true;
// registerd_data = await CheckPatientAuthenticationReq.fromJson(await sharedPref.getObject(REGISTER_DATA_FOR_LOGIIN));
// }
//
// mobileNumber = registerd_data != null ? registerd_data.patientMobileNumber : int.parse(userData.mobile!);
// zipCode = registerd_data != null
// ? registerd_data.zipCode
// : userData.outSA == true
// ? "971"
// : "966";
// patientOutSA = registerd_data != null
// ? registerd_data.zipCode == "966"
// ? 0
// : 1
// : userData.outSA;
// if (registerd_data != null) {
// loginTokenID = await sharedPref.getString(LOGIN_TOKEN_ID);
// loginType = registerd_data.searchType;
// }
// var nhic = await sharedPref.getObject(NHIC_DATA);
// if (nhic != null) {
// final DateFormat dateFormat = DateFormat('MM/dd/yyyy');
// final DateFormat dateFormat2 = DateFormat('dd/MM/yyyy');
// dob = nhic['IsHijri'] ? nhic['DateOfBirth'] : dateFormat2.format(dateFormat.parse(nhic['DateOfBirth']));
//
// isHijri = nhic['IsHijri'] ? 1 : 0;
// healthId = nhic['HealthId'];
// }
// deviceToken = await sharedPref.getString(PUSH_TOKEN);
// lastLogin = await sharedPref.getInt(LAST_LOGIN) != null
// ? await sharedPref.getInt(LAST_LOGIN)
// : userData != null
// ? userData!.logInType
// : null;
//
// // showLoader(false);
// GifLoaderDialogUtils.hideDialog(context);
// //cs.sharedService.getStorage(AuthenticationService.LAST_LOGIN);
// }
//
// getCommonRequest({type}) {
// bool fileNo = false;
// if (nationIdController.text != null && nationIdController.text.isNotEmpty) {
// fileNo = nationIdController.text.length < 10;
// }
//
// var request = SendActivationRequest();
// request.patientMobileNumber = int.parse(phoneNumber!);
// request.mobileNo = '0' + phoneNumber.toString();
// request.deviceToken = deviceToken;
// request.projectOutSA = patientOutSA == true ? true : false;
// request.loginType = type == 1 ? type : 2;
// request.oTPSendType = type == 1 ? type : 2; //selectedOption == 1 ? 1 : 2;
// request.zipCode = selectedCountry.countryCode;
//
// request.logInTokenID = loginTokenID ?? "";
//
// if (registerd_data != null) {
// request.searchType = registerd_data.searchType != null ? registerd_data.searchType : 1;
// request.patientID = registerd_data.patientID != null ? registerd_data.patientID : 0;
// request.patientIdentificationID = request.nationalID = registerd_data.patientIdentificationID != null ? registerd_data.patientIdentificationID : '0';
// request.dob = registerd_data.dob;
// request.isRegister = registerd_data.isRegister;
// } else {
// // request.searchType = request.searchType != null ? request.searchType : 1;
// if (fileNo) {
// request.patientID = userData != null && userData!.patientID != null ? userData!.patientID : int.parse(nationIdController.text);
// request.patientIdentificationID = request.nationalID = "";
// request.searchType = 2;
// } else {
// request.patientID = 0;
// request.searchType = 1;
// request.patientIdentificationID = request.nationalID = nationIdController != null ? nationIdController.text : '0';
// }
// request.isRegister = false;
// }
// request.deviceTypeID = request.searchType;
// return request;
// }
//
// insertIMEI() {
// authService.insertDeviceImei(selectedOption).then((value) => {}).catchError((err) {
// print(err);
// });
// }
//
// void checkIfIsInPatient(context) {
// final service = ClinicListService();
// service.checkIfInPatientAPI(context).then((res) {
// if (res['MessageStatus'] != 1) return;
//
// final isAdmitted = res['isAdmitted'] == true;
// final hasAdmissionRequest = res['hasAdmissionRequests'] == true;
//
// print("IS ADMITTED: $isAdmitted");
// print("Has Admission Request: $hasAdmissionRequest");
//
// if (isAdmitted && res['PatientAdmittedInformation']?.isNotEmpty == true) {
// final info = GetAdmissionInfoResponseModel.fromJson(res['PatientAdmittedInformation'][0]);
// projectViewModel.setInPatientProjectID(res['PatientAdmittedInformation'][0]['ProjectID']);
// projectViewModel.setInPatientAdmissionInfo(info);
// projectViewModel.setIsPatientAdmitted(true);
// }
//
// if (hasAdmissionRequest && res['MedicalInstruction']?.isNotEmpty == true) {
// final reqInfo = GetAdmissionRequestInfoResponseModel.fromJson(res['MedicalInstruction'][0]);
// projectViewModel.setInPatientProjectID(res['MedicalInstruction'][0]['projectId']);
// projectViewModel.setInPatientAdmissionRequest(reqInfo);
// projectViewModel.setPatientHasAdmissionRequest(true);
// }
// });
// }
//
// Future<void> goToHome(context) async {
// authenticatedUserObject.isLogin = true;
// appointmentRateViewModel.isLogin = true;
// projectViewModel.isLogin = true;
// projectViewModel.user = authenticatedUserObject.user;
// await authenticatedUserObject.getUser(getUser: true);
//
// getToDoCount(context);
// checkIfIsInPatient(context);
//
// appointmentRateViewModel.getIsLastAppointmentRatedList(projectViewModel.isArabic ? 1 : 2).then((_) {
// GifLoaderDialogUtils.hideDialog(AppGlobal.context);
//
// if (appointmentRateViewModel.isHaveAppointmentNotRate) {
// Navigator.pushAndRemoveUntil(
// context,
// FadePage(page: RateAppointmentDoctor()),
// (route) => false,
// );
// } else {
// Navigator.pushAndRemoveUntil(
// context,
// FadePage(page: LandingPage()),
// (route) => false,
// );
// }
// insertIMEI();
// }).catchError((error) {
// print(error);
// });
// }
//
// void getToDoCount(context) {
// toDoProvider.setState(0, 0, true, "0");
// ClinicListService().getActiveAppointmentNo(context).then((res) {
// if (res['MessageStatus'] == 1) {
// toDoProvider.setState(
// res['AppointmentActiveNumber'],
// res['AncillaryOrderListCount'],
// true,
// "0",
// );
// }
// }).catchError((err) => print(err));
// }
//
// checkIfUserAgreedBefore(CheckActivationCode result, context) {
// if (projectViewModel.havePrivilege(109)) {
// authService.checkIfUserAgreed().then((result) {
// if (result['IsPatientAlreadyAgreed']) {
// goToHome(context);
// } else {
// authService.getUserAgreementContent().then((result) {
// GifLoaderDialogUtils.hideDialog(AppGlobal.context);
// Navigator.pushAndRemoveUntil(
// context,
// FadePage(
// page: UserLoginAgreementPage(
// userAgreementText: result['UserAgreementContent'],
// authenticatedUserObject: authenticatedUserObject,
// appointmentRateViewModel: appointmentRateViewModel,
// selectedOption: selectedOption,
// isArabic: projectViewModel.isArabic,
// ),
// ),
// (r) => false);
// }).catchError((err) {
// GifLoaderDialogUtils.hideDialog(context);
// print(err);
// });
// }
// }).catchError((err) {
// GifLoaderDialogUtils.hideDialog(context);
// print(err);
// });
// } else {
// goToHome(context);
// }
// }
//
// @override
// void dispose() {
// nationIdController.dispose();
// phoneController?.dispose();
// super.dispose();
// }
}

@ -12,6 +12,7 @@ import 'package:hmg_patient_app/core/viewModels/pharmacyModule/MostViewedViewMod
import 'package:hmg_patient_app/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart'; import 'package:hmg_patient_app/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart';
import 'package:hmg_patient_app/core/viewModels/product_categories_view_model.dart'; import 'package:hmg_patient_app/core/viewModels/product_categories_view_model.dart';
import 'package:hmg_patient_app/core/viewModels/pharmacyModule/order_model_view_model.dart'; import 'package:hmg_patient_app/core/viewModels/pharmacyModule/order_model_view_model.dart';
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/core/viewModels/weather/weather_view_model.dart'; import 'package:hmg_patient_app/core/viewModels/weather/weather_view_model.dart';
import 'package:hmg_patient_app/services/payfort_services/payfort_service.dart'; import 'package:hmg_patient_app/services/payfort_services/payfort_service.dart';
import 'package:hmg_patient_app/services/payfort_services/payfort_view_model.dart'; import 'package:hmg_patient_app/services/payfort_services/payfort_view_model.dart';
@ -90,6 +91,7 @@ import 'core/viewModels/AlHabibMedicalService/health-calculator/Bariatrics-viewm
import 'core/viewModels/TermsConditionsViewModel.dart'; import 'core/viewModels/TermsConditionsViewModel.dart';
import 'core/viewModels/all_habib_medical_services/e_referral_view_model.dart'; import 'core/viewModels/all_habib_medical_services/e_referral_view_model.dart';
import 'core/viewModels/appointment_rate_view_model.dart'; import 'core/viewModels/appointment_rate_view_model.dart';
import 'core/viewModels/auth_provider_view_model.dart';
import 'core/viewModels/blooddonation/blood_details_view_model.dart'; import 'core/viewModels/blooddonation/blood_details_view_model.dart';
import 'core/viewModels/blooddonation/booddonation_view_model.dart'; import 'core/viewModels/blooddonation/booddonation_view_model.dart';
import 'core/viewModels/child_vaccines/add_new_child_view_model.dart'; import 'core/viewModels/child_vaccines/add_new_child_view_model.dart';
@ -144,6 +146,7 @@ import 'core/viewModels/pharmacy_categorise_view_model.dart';
import 'core/viewModels/qr_view_model.dart'; import 'core/viewModels/qr_view_model.dart';
import 'core/viewModels/vaccine_view_model.dart'; import 'core/viewModels/vaccine_view_model.dart';
import 'core/viewModels/weather/weather_view_model.dart'; import 'core/viewModels/weather/weather_view_model.dart';
import 'models/Appointments/toDoCountProviderModel.dart';
import 'services/pharmacy_services/brands_service.dart'; import 'services/pharmacy_services/brands_service.dart';
import 'services/pharmacy_services/orderDetails_service.dart'; import 'services/pharmacy_services/orderDetails_service.dart';
import 'services/pharmacy_services/pharmacyAddress_service.dart'; import 'services/pharmacy_services/pharmacyAddress_service.dart';
@ -313,6 +316,9 @@ void setupLocator() {
locator.registerFactory(() => LastVisitedViewModel()); locator.registerFactory(() => LastVisitedViewModel());
locator.registerFactory(() => MostViewedViewModel()); locator.registerFactory(() => MostViewedViewModel());
locator.registerFactory(() => PayfortViewModel()); locator.registerFactory(() => PayfortViewModel());
locator.registerFactory(() => ProjectViewModel());
locator.registerFactory(() => AuthProviderViewModel());
locator.registerFactory(() => ToDoCountProviderModel());
// Offer And Packages // Offer And Packages
//---------------------- //----------------------

@ -23,6 +23,7 @@ import 'package:localstorage/localstorage.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'config/size_config.dart'; import 'config/size_config.dart';
import 'core/viewModels/auth_provider_view_model.dart';
import 'core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; import 'core/viewModels/pharmacyModule/OrderPreviewViewModel.dart';
import 'core/viewModels/project_view_model.dart'; import 'core/viewModels/project_view_model.dart';
import 'locator.dart'; import 'locator.dart';
@ -141,6 +142,8 @@ class _MyApp extends State<MyApp> {
providers: [ providers: [
ChangeNotifierProvider<PharmacyPagesViewModel>( ChangeNotifierProvider<PharmacyPagesViewModel>(
create: (context) => PharmacyPagesViewModel(), create: (context) => PharmacyPagesViewModel(),
), ChangeNotifierProvider<AuthProviderViewModel>(
create: (context) => AuthProviderViewModel(),
), ),
ChangeNotifierProvider<ProjectViewModel>( ChangeNotifierProvider<ProjectViewModel>(
create: (context) => ProjectViewModel(), create: (context) => ProjectViewModel(),

@ -24,6 +24,7 @@ class CheckActivationCodeReq {
int? deviceTypeID; int? deviceTypeID;
bool? forRegisteration; bool? forRegisteration;
CheckActivationCodeReq({ CheckActivationCodeReq({
this.patientMobileNumber, this.patientMobileNumber,
this.mobileNo, this.mobileNo,
@ -48,7 +49,7 @@ class CheckActivationCodeReq {
this.sessionID, this.sessionID,
this.isDentalAllowedBackend, this.isDentalAllowedBackend,
this.deviceTypeID, this.deviceTypeID,
this.forRegisteration, this.forRegisteration
}); });
CheckActivationCodeReq.fromJson(Map<String, dynamic> json) { CheckActivationCodeReq.fromJson(Map<String, dynamic> json) {

@ -692,13 +692,14 @@ Widget newInputWidget(
onChange(selected); onChange(selected);
} }
} else if (selectionType == SelectionType.calendar) { } else if (selectionType == SelectionType.calendar) {
bool isGregorian = true; bool isGregorian = true;
// final picked = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime(1900), lastDate: DateTime(2100)); // final picked = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime(1900), lastDate: DateTime(2100));
final picked = await showHijriGregBottomSheet( final picked = await showHijriGregBottomSheet(
context, context,
switcherIcon: SvgPicture.asset("assets/images/svg/language.svg", width: 24), switcherIcon: SvgPicture.asset("assets/images/svg/language.svg", width: 24),
// fontFamily: FontUtils.getFontFamily(context), // fontFamily: FontUtils.getFontFamily(context),
language: lang, language: lang,
initialShowGregorian: true,
initialDate: DateTime.now(), initialDate: DateTime.now(),
okWidget: Padding( okWidget: Padding(
padding: const EdgeInsets.only(right: 8.0), padding: const EdgeInsets.only(right: 8.0),

@ -1,21 +1,28 @@
import 'dart:convert';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:hijri_gregorian_calendar/hijri_gregorian_calendar.dart';
import 'package:hmg_patient_app/config/config.dart'; import 'package:hmg_patient_app/config/config.dart';
import 'package:hmg_patient_app/config/shared_pref_kay.dart'; import 'package:hmg_patient_app/config/shared_pref_kay.dart';
import 'package:hmg_patient_app/config/size_config.dart'; import 'package:hmg_patient_app/config/size_config.dart';
import 'package:hmg_patient_app/core/service/client/base_app_client.dart';
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart'; import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/models/Appointments/toDoCountProviderModel.dart';
import 'package:hmg_patient_app/models/Authentication/check_activation_code_response.dart'; import 'package:hmg_patient_app/models/Authentication/check_activation_code_response.dart';
import 'package:hmg_patient_app/models/Authentication/check_paitent_authentication_req.dart'; import 'package:hmg_patient_app/models/Authentication/check_paitent_authentication_req.dart';
import 'package:hmg_patient_app/models/Authentication/check_user_status_reponse.dart'; import 'package:hmg_patient_app/models/Authentication/check_user_status_reponse.dart';
import 'package:hmg_patient_app/models/Authentication/check_user_status_req.dart'; import 'package:hmg_patient_app/models/Authentication/check_user_status_req.dart';
import 'package:hmg_patient_app/models/Authentication/checkpatient_for_registration.dart'; import 'package:hmg_patient_app/models/Authentication/checkpatient_for_registration.dart';
import 'package:hmg_patient_app/models/Authentication/register_info_response.dart'; import 'package:hmg_patient_app/models/Authentication/register_info_response.dart';
import 'package:hmg_patient_app/models/Authentication/send_activation_request.dart';
import 'package:hmg_patient_app/new_ui/otp/otp_validation_bootmsheet_widget.dart'; import 'package:hmg_patient_app/new_ui/otp/otp_validation_bootmsheet_widget.dart';
import 'package:hmg_patient_app/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart'; import 'package:hmg_patient_app/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart';
import 'package:hmg_patient_app/pages/login/login-type.dart'; import 'package:hmg_patient_app/pages/login/login-type.dart';
import 'package:hmg_patient_app/pages/login/register-info.dart'; import 'package:hmg_patient_app/pages/login/register-info.dart';
import 'package:hmg_patient_app/pages/login/register.dart'; import 'package:hmg_patient_app/pages/login/register.dart';
import 'package:hmg_patient_app/pages/login/register_new_step_2.dart'; import 'package:hmg_patient_app/pages/login/register_new_step_2.dart';
import 'package:hmg_patient_app/pages/login/user-login-agreement-page.dart';
import 'package:hmg_patient_app/pages/login/welcome.dart'; import 'package:hmg_patient_app/pages/login/welcome.dart';
import 'package:hmg_patient_app/services/authentication/auth_provider.dart'; import 'package:hmg_patient_app/services/authentication/auth_provider.dart';
import 'package:hmg_patient_app/theme/colors.dart'; import 'package:hmg_patient_app/theme/colors.dart';
@ -33,12 +40,21 @@ import 'package:hmg_patient_app/widgets/otp/sms-popup.dart';
import 'package:hmg_patient_app/widgets/text/app_texts_widget.dart'; import 'package:hmg_patient_app/widgets/text/app_texts_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../core/viewModels/appointment_rate_view_model.dart';
import '../../locator.dart';
import '../../models/Authentication/authenticated_user.dart';
import '../../models/Authentication/select_device_imei_res.dart'; import '../../models/Authentication/select_device_imei_res.dart';
import '../../models/InPatientServices/get_admission_info_response_model.dart';
import '../../models/InPatientServices/get_admission_request_info_response_model.dart';
import '../../services/clinic_services/get_clinic_service.dart';
import '../../widgets/dialogs/alert_dialog.dart'; import '../../widgets/dialogs/alert_dialog.dart';
import '../../widgets/dialogs/confirm_dialog.dart'; import '../../widgets/dialogs/confirm_dialog.dart';
import '../../widgets/transitions/fade_page.dart'; import '../../widgets/transitions/fade_page.dart';
import 'package:intl/intl.dart' as intl; import 'package:intl/intl.dart' as intl;
import '../landing/landing_page.dart';
import '../rateAppointment/rate_appointment_doctor.dart';
class RegisterNew extends StatefulWidget { class RegisterNew extends StatefulWidget {
@override @override
_RegisterNew createState() => _RegisterNew(); _RegisterNew createState() => _RegisterNew();
@ -47,6 +63,8 @@ class RegisterNew extends StatefulWidget {
class _RegisterNew extends State<RegisterNew> { class _RegisterNew extends State<RegisterNew> {
final nationalIDorFile = TextEditingController(); final nationalIDorFile = TextEditingController();
final phoneController = TextEditingController(); final phoneController = TextEditingController();
AppointmentRateViewModel appointmentRateViewModel = locator<AppointmentRateViewModel>();
Country selectedCountry = Country.saudiArabia; Country selectedCountry = Country.saudiArabia;
OTPType? otpType; OTPType? otpType;
bool isTermsAccepted = false; bool isTermsAccepted = false;
@ -55,6 +73,7 @@ class _RegisterNew extends State<RegisterNew> {
final int loginType = LoginType.loginType; final int loginType = LoginType.loginType;
late String mobileNo; late String mobileNo;
var loginTokenID;
// String countryCode = '966'; // String countryCode = '966';
var isHijri; var isHijri;
@ -68,6 +87,13 @@ class _RegisterNew extends State<RegisterNew> {
String? LoginTokenID; String? LoginTokenID;
bool isDubai = false; bool isDubai = false;
final intl.DateFormat dateFormat = intl.DateFormat('dd/MM/yyyy'); final intl.DateFormat dateFormat = intl.DateFormat('dd/MM/yyyy');
SelectDeviceIMEIRES? user;
AuthenticatedUser? userdata;
late int selectedOption;
bool isSkipRegistration = false;
late ProjectViewModel projectViewModel;
late ToDoCountProviderModel toDoProvider;
@override @override
void initState() { void initState() {
@ -86,6 +112,8 @@ class _RegisterNew extends State<RegisterNew> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
projectViewModel = context.read<ProjectViewModel>();
toDoProvider = context.read<ToDoCountProviderModel>();
return AppScaffold( return AppScaffold(
appBarTitle: TranslationBase.of(context).register, appBarTitle: TranslationBase.of(context).register,
isShowDecPage: false, isShowDecPage: false,
@ -184,7 +212,7 @@ class _RegisterNew extends State<RegisterNew> {
Divider(height: 1), Divider(height: 1),
Directionality( Directionality(
textDirection: TextDirection.ltr, textDirection: TextDirection.ltr,
child: newInputWidget(TranslationBase.of(context).nationalIdNumber, "1xxxxxxxx", nationalIDorFile, child: newInputWidget(TranslationBase.of(context).nationalIdNumber, "xxxxxxxxx", nationalIDorFile,
isEnable: true, isEnable: true,
prefix: null, prefix: null,
removePadding: true, removePadding: true,
@ -209,12 +237,23 @@ class _RegisterNew extends State<RegisterNew> {
isAllowLeadingIcon: true, isAllowLeadingIcon: true,
hasSelectionCustomIcon: true, hasSelectionCustomIcon: true,
selectionType: SelectionType.calendar, selectionType: SelectionType.calendar,
selectedValue: selectedDOB != null ? Utils.formatDateToDisplay(selectedDOB.toString()) : null, selectedValue: selectedDOB != null
? isHijri == 1
? Utils.formatHijriDateToDisplay(selectedDOB!.toIso8601String())
: Utils.formatDateToDisplay(selectedDOB.toString())
: null,
selectionCustomIcon: "assets/images/svg/calendar.svg", selectionCustomIcon: "assets/images/svg/calendar.svg",
lang: context.selectedLanguage, lang: context.selectedLanguage,
padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0),
leadingIcon: "assets/images/svg/birthday-cake.svg", onChange: (value) { leadingIcon: "assets/images/svg/birthday-cake.svg", onChange: (value) {
selectedDOB = DateTime.parse(value!); selectedDOB = DateTime.parse(value!);
if (isHijri == 1) {
var hijriDate = HijriGregConverter.gregorianToHijri(DateTime.parse(value));
selectedDOB = DateTime(hijriDate.year, hijriDate.month, hijriDate.day, DateTime.now().hour, DateTime.now().minute, DateTime.now().second);
} else {
selectedDOB = DateTime.parse(value);
}
print(selectedDOB!.toIso8601String());
setState(() {}); setState(() {});
}, onCalendarTypeChanged: (bool value) { }, onCalendarTypeChanged: (bool value) {
if (value) { if (value) {
@ -465,15 +504,10 @@ class _RegisterNew extends State<RegisterNew> {
} else { } else {
print("OTP sent successfully to ${mobileNo} using Whatsapp"); print("OTP sent successfully to ${mobileNo} using Whatsapp");
} }
// mobileNo = phoneController.text;
startRegistration(value); startRegistration(value);
// Navigator.of(context).push(FadePage(page: RegisterNewStep2()));
} }
startRegistration(type) { startRegistration(type) {
// if (isButtonDisabled == false) {
var request = CheckPatientForRegistration(); var request = CheckPatientForRegistration();
request.patientMobileNumber = int.parse(mobileNo); request.patientMobileNumber = int.parse(mobileNo);
@ -484,7 +518,6 @@ class _RegisterNew extends State<RegisterNew> {
request.isRegister = true; request.isRegister = true;
request.dob = isHijri == 1 ? selectedDOB!.toString() : dateFormat.format(selectedDOB!); request.dob = isHijri == 1 ? selectedDOB!.toString() : dateFormat.format(selectedDOB!);
request.isHijri = isHijri ?? 0; request.isHijri = isHijri ?? 0;
// request.tokenID = LoginTokenID;
this.checkPatientForRegisteration(registrationData: request, type: type); this.checkPatientForRegisteration(registrationData: request, type: type);
// } // }
} }
@ -514,7 +547,7 @@ class _RegisterNew extends State<RegisterNew> {
var nRequest = request.toJson(); var nRequest = request.toJson();
nRequest['LogInTokenID'] = response['LogInTokenID']; nRequest['LogInTokenID'] = response['LogInTokenID'];
if (response['hasFile'] == true) { if (response['hasFile'] == true) {
ConfirmDialog dialog = new ConfirmDialog( await ConfirmDialog(
context: context, context: context,
confirmMessage: response['ErrorEndUserMessage'], confirmMessage: response['ErrorEndUserMessage'],
okText: TranslationBase.of(context).ok, okText: TranslationBase.of(context).ok,
@ -522,8 +555,10 @@ class _RegisterNew extends State<RegisterNew> {
okFunction: () { okFunction: () {
AlertDialogBox.closeAlertDialog(context); AlertDialogBox.closeAlertDialog(context);
sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, nRequest); sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, nRequest);
// LoginRegistration.loginMethod = type; // 1=NationalID, by default from Registration setState(() {
Navigator.of(context).push(FadePage(page: WelcomeLogin())); isSkipRegistration = true;
});
sendActivationCode(type, "", null, isSkipRegistration);
}, },
cancelFunction: () {}) cancelFunction: () {})
.showAlertDialog(context); .showAlertDialog(context);
@ -539,7 +574,7 @@ class _RegisterNew extends State<RegisterNew> {
if (request.patientOutSA == 0) { if (request.patientOutSA == 0) {
this.chekUserData(response['LogInTokenID'], type); // ظ ; this.chekUserData(response['LogInTokenID'], type); // ظ ;
} else { } else {
sendActivationCode(type, response['LogInTokenID'], null); sendActivationCode(type, response['LogInTokenID'], null, isSkipRegistration);
} }
} }
} else { } else {
@ -577,18 +612,18 @@ class _RegisterNew extends State<RegisterNew> {
// widget.changePageViewIndex!(1), // widget.changePageViewIndex!(1),
// Navigator.of(context).push(FadePage(page: ConfirmLogin(changePageViewIndex: widget.changePageViewIndex, fromRegistration: true))), // Navigator.of(context).push(FadePage(page: ConfirmLogin(changePageViewIndex: widget.changePageViewIndex, fromRegistration: true))),
sendActivationCode(type, loginToken, resultSet); sendActivationCode(type, loginToken, resultSet, isSkipRegistration);
} else { } else {
AppToast.showErrorToast(message: result != null ? result : TranslationBase.of(context).somethingWentWrong); AppToast.showErrorToast(message: result != null ? result : TranslationBase.of(context).somethingWentWrong);
} }
}); });
} }
sendActivationCode(type, loginTokenID, RegisterInfoResponse? nHICData) async { sendActivationCode(type, loginTokenID, RegisterInfoResponse? nHICData, skipRegistration) async {
LoginTokenID = loginTokenID; LoginTokenID = loginTokenID;
var request = authService.getCommonRequest( var request = authService.getCommonRequest(
registerd_data: null, registerd_data: null,
deviceToken: DEVICE_TOKEN, deviceToken: skipRegistration ? null : DEVICE_TOKEN,
mobileNumber: int.parse(mobileNo), mobileNumber: int.parse(mobileNo),
zipCode: selectedCountry.countryCode, zipCode: selectedCountry.countryCode,
patientOutSA: selectedCountry.countryCode == "966" ? 0 : 1, patientOutSA: selectedCountry.countryCode == "966" ? 0 : 1,
@ -600,7 +635,7 @@ class _RegisterNew extends State<RegisterNew> {
request.sMSSignature = await SMSOTP.getSignature(); request.sMSSignature = await SMSOTP.getSignature();
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(context);
if (selectedCountry.countryCode == "966") { if (selectedCountry.countryCode == "966" && !skipRegistration) {
request.healthId = nHICData!.healthId; request.healthId = nHICData!.healthId;
request.nationalID = nHICData.idNumber; request.nationalID = nHICData.idNumber;
request.patientIdentificationID = nHICData.idNumber; request.patientIdentificationID = nHICData.idNumber;
@ -610,84 +645,345 @@ class _RegisterNew extends State<RegisterNew> {
} }
request.isHijri = isHijri ?? 0; request.isHijri = isHijri ?? 0;
request.oTPSendType = type; request.oTPSendType = type;
await this.authService.sendActivationCodeRegister(request).then((result) { if (skipRegistration) {
GifLoaderDialogUtils.hideDialog(context); var req = getCommonRequest(type: type);
if (result != null && result['isSMSSent'] == true) { req.logInTokenID = "";
print(result); var request = CheckPatientAuthenticationReq.fromJson(req.toJson());
// LoginTokenID = result["LogInTokenID"]; authService.checkPatientAuthentication(request).then((value) async {
startSMSService(type); if (value['isSMSSent']) {
} sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']);
}).catchError((r) { LoginTokenID = value['LogInTokenID'];
GifLoaderDialogUtils.hideDialog(context); var request = this.getCommonRequest(type: type);
AppToast.showErrorToast(message: r); request.sMSSignature = await SMSOTP.getSignature();
}); selectedOption = type;
request.dob = "";
request.healthId = "";
request.isHijri = 0;
await authService.sendActivationCode(request).then((result) {
GifLoaderDialogUtils.hideDialog(context);
if (result != null && result['isSMSSent'] == true) {
startSMSService(request.loginType, skipRegistration);
}
}).catchError((r) {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: r.toString());
});
// sendActivationCodeForLogin(type, value['LogInTokenID'], null, false)
// request.loginTokenID = value['LogInTokenID'],
// request.dob = "",
// request.healthId = "",
// request.isHijri = 0,
// request.tokenID = value['LogInTokenID'],
// authService.sendActivationCode(request).then((result) {
// GifLoaderDialogUtils.hideDialog(context);
// if (result != null && result['isSMSSent'] == true) {
// this.startSMSService(type);
// }
// }).catchError((r) {
// GifLoaderDialogUtils.hideDialog(context);
// AppToast.showErrorToast(message: r.toString());
// })
} else {
if (value['IsAuthenticated']) {
checkActivationCode();
}
}
}).catchError((err) {
print(err);
GifLoaderDialogUtils.hideDialog(context);
ConfirmDialog dialog = new ConfirmDialog(
context: context,
confirmMessage: err,
okText: TranslationBase.of(context).confirm,
cancelText: TranslationBase.of(context).cancel_nocaps,
okFunction: () => {
ConfirmDialog.closeAlertDialog(context),
Navigator.of(context).push(FadePage(page: RegisterNew())),
},
cancelFunction: () => {});
dialog.showAlertDialog(context);
});
} else {
await this.authService.sendActivationCodeRegister(request).then((result) {
GifLoaderDialogUtils.hideDialog(context);
if (result != null && result['isSMSSent'] == true) {
print(result);
// LoginTokenID = result["LogInTokenID"];
startSMSService(type, skipRegistration);
}
}).catchError((r) {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: r);
});
}
} }
checkActivationCode({value, type}) async { Future<void> checkActivationCode({value, type, skipRegistration}) async {
// Navigator.pop(context); final isSaudi = selectedCountry.countryCode == "966";
// GifLoaderDialogUtils.showMyDialog(context); final isHijriDate = isHijri == 1;
var request = authService.getCommonRequest( final dobString = isHijriDate ? selectedDOB!.toString() : dateFormat.format(selectedDOB!);
var req;
if (skipRegistration) {
req = getCommonRequest(type: type);
} else {
req = authService.getCommonRequest(
registerd_data: null, registerd_data: null,
deviceToken: DEVICE_TOKEN, deviceToken: DEVICE_TOKEN,
mobileNumber: int.parse(mobileNo), mobileNumber: int.parse(mobileNo),
zipCode: selectedCountry.countryCode, zipCode: selectedCountry.countryCode,
patientOutSA: selectedCountry.countryCode == "966" ? 0 : 1, patientOutSA: isSaudi ? 0 : 1,
loginTokenID: LoginTokenID, loginTokenID: LoginTokenID,
selectedOption: type, selectedOption: type,
user: SelectDeviceIMEIRES()); user: SelectDeviceIMEIRES(),
dynamic res; );
// if (healthId != null || isDubai) {
// if (isDubai) {
// request['DOB'] = dob;
// }
request.dob = isHijri == 1 ? selectedDOB!.toString() : dateFormat.format(selectedDOB!);
if (selectedCountry.countryCode == "966") {
request.healthId = nHICData!.healthId!;
} }
request.isHijri = isHijri ?? 0; req.dob = dobString;
request.nationalID = selectedCountry.countryCode == "966" ? nHICData!.idNumber : nationalIDorFile.text; req.isHijri = isHijri ?? 0;
request.patientIdentificationID = selectedCountry.countryCode == "966" ? nHICData!.idNumber : nationalIDorFile.text;
request.isRegister = true;
authService if (isSaudi && !skipRegistration) {
.checkActivationCodeRegister(request.toJson(), value) req.healthId = nHICData?.healthId ?? "";
.then((result) => { } else {
res = result, req.healthId = "";
if (result is Map) }
{
result = CheckActivationCode.fromJson(result as Map<String, dynamic>),
//next registration page navigate from here. if (!skipRegistration) {
Navigator.of(context).push( req.nationalID = isSaudi ? nHICData?.idNumber : nationalIDorFile.text;
FadePage(page: RegisterNewStep2(nHICData, request)), req.patientIdentificationID = isSaudi ? nHICData?.idNumber : nationalIDorFile.text;
) req.isRegister = true;
} else {
// // if(widget.isDubai ==false){ req.patientIdentificationID = nationalIDorFile.text;
// // widget.changePageViewIndex!(1), req.nationalID = nationalIDorFile.text;
// // if(widget.isDubai ==false){ req.deviceToken = null;
// // req.loginType = type;
// Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)), // req.healthId = "";
// } // req.isHijri = isHijri ?? 0;
} // req.dob = "";
else }
{ try {
Navigator.of(context).pop(), dynamic result;
GifLoaderDialogUtils.hideDialog(context), if (skipRegistration) {
Future.delayed(Duration(seconds: 1), () { result = await authService.checkActivationCode(req.toJson(), value);
AppToast.showErrorToast(message: result, localContext: context); if (result is Map) {
}), final activation = CheckActivationCode.fromJson(result as Map<String, dynamic>);
// projectViewModel.analytics.loginRegistration.login_fail(error: result), if (activation.errorCode == '699') {
// projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result), GifLoaderDialogUtils.hideDialog(context);
} await Future.delayed(const Duration(seconds: 2));
}) AppToast.showErrorToast(message: activation.errorEndUserMessage);
.catchError((err) { Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: WelcomeLogin));
print(err); } else {
await sharedPref.remove(FAMILY_FILE);
activation.list!.isFamily = false;
userdata = activation.list;
await sharedPref.setString(BLOOD_TYPE, activation.patientBloodType ?? "");
authenticatedUserObject.user = activation.list!;
projectViewModel.setPrivilege(privilegeList: result);
await sharedPref.setObject(MAIN_USER, activation.list);
await sharedPref.setObject(USER_PROFILE, activation.list);
loginTokenID = activation.logInTokenID;
await sharedPref.setObject(LOGIN_TOKEN_ID, activation.logInTokenID);
await sharedPref.setString(TOKEN, activation.authenticationTokenID!);
checkIfUserAgreedBefore(activation, context);
projectViewModel.analytics.loginRegistration.login_successful();
}
} else {
GifLoaderDialogUtils.hideDialog(context);
await Future.delayed(const Duration(seconds: 1));
Navigator.of(context).pop();
AppToast.showErrorToast(message: result, localContext: context);
projectViewModel.analytics.loginRegistration.login_fail(error: result);
projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result);
}
} else {
result = await authService.checkActivationCodeRegister(req.toJson(), value);
if (result is Map) {
final activation = CheckActivationCode.fromJson(result as Map<String, dynamic>);
Navigator.of(context).push(
FadePage(page: RegisterNewStep2(nHICData, req)),
);
// Optionally: Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew));
} else {
Navigator.of(context).pop();
GifLoaderDialogUtils.hideDialog(context);
await Future.delayed(const Duration(seconds: 1));
AppToast.showErrorToast(message: result, localContext: context);
// Optionally: log analytics here
}
}
} catch (err) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
Future.delayed(Duration(seconds: 1), () { await Future.delayed(const Duration(seconds: 1));
AppToast.showErrorToast(message: err); print(err);
// startSMSService(tempType); AppToast.showErrorToast(message: err.toString());
}); }
}); }
// checkActivationCode({value, type, skipRegistration}) async {
// // Navigator.pop(context);
// // GifLoaderDialogUtils.showMyDialog(context);
// var request = authService.getCommonRequest(
// registerd_data: null,
// deviceToken: DEVICE_TOKEN,
// mobileNumber: int.parse(mobileNo),
// zipCode: selectedCountry.countryCode,
// patientOutSA: selectedCountry.countryCode == "966" ? 0 : 1,
// loginTokenID: LoginTokenID,
// selectedOption: type,
// user: SelectDeviceIMEIRES());
// dynamic res;
//
// request.dob = isHijri == 1 ? selectedDOB!.toString() : dateFormat.format(selectedDOB!);
// if (selectedCountry.countryCode == "966" && !skipRegistration) {
// request.healthId = nHICData!.healthId!;
// } else {
// request.healthId = "";
// }
// request.isHijri = isHijri ?? 0;
// if (!skipRegistration) {
// request.nationalID = selectedCountry.countryCode == "966" ? nHICData!.idNumber : nationalIDorFile.text;
// request.patientIdentificationID = selectedCountry.countryCode == "966" ? nHICData!.idNumber : nationalIDorFile.text;
// request.isRegister = true;
// }
// if (skipRegistration) {
// request.patientIdentificationID = nationalIDorFile.text;
// request.nationalID = nationalIDorFile.text;
// request.deviceToken = null;
// request.healthId = "";
// request.isHijri = isHijri ?? 0;
// request.dob = isHijri == 1 ? selectedDOB!.toString() : dateFormat.format(selectedDOB!);
// authService
// .checkActivationCode(request.toJson(), value)
// .then((result) async => {
// res = result,
// if (result is Map)
// {
// result = CheckActivationCode.fromJson(result as Map<String, dynamic>),
// if (result.errorCode == '699')
// {
// //699 block run here
// GifLoaderDialogUtils.hideDialog(context),
// Future.delayed(Duration(seconds: 2), () {
// AppToast.showErrorToast(message: result.errorEndUserMessage);
// Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: WelcomeLogin));
// })
// }
// else
// {
// sharedPref.remove(FAMILY_FILE),
// result.list.isFamily = false,
// user = result.list,
// sharedPref.setString(BLOOD_TYPE, result.patientBloodType ?? ""),
// authenticatedUserObject.user = result.list,
// context.read<ProjectViewModel>().setPrivilege(privilegeList: res),
// await sharedPref.setObject(MAIN_USER, result.list),
// await sharedPref.setObject(USER_PROFILE, result.list),
// loginTokenID = result.logInTokenID,
// await sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID),
// await sharedPref.setString(TOKEN, result.authenticationTokenID),
// checkIfUserAgreedBefore(result, context),
// context.read<ProjectViewModel>().analytics.loginRegistration.login_successful(),
// }
// }
// else
// {
// GifLoaderDialogUtils.hideDialog(context),
// Future.delayed(Duration(seconds: 1), () {
// Navigator.of(context).pop();
// AppToast.showErrorToast(message: result, localContext: context);
// }),
// context.read<ProjectViewModel>().analytics.loginRegistration.login_fail(error: result),
// context.read<ProjectViewModel>().analytics.errorTracking.log('otp_verification_at_confirm_login', error: result)
// }
// })
// .catchError((err) {
// GifLoaderDialogUtils.hideDialog(context);
// Future.delayed(Duration(seconds: 1), () {
// print(err);
// AppToast.showErrorToast(message: err);
// // startSMSService(tempType);
// });
// });
// } else {
// authService
// .checkActivationCodeRegister(request.toJson(), value)
// .then((result) => {
// res = result,
// if (result is Map)
// {
// result = CheckActivationCode.fromJson(result as Map<String, dynamic>),
// Navigator.of(context).push(
// FadePage(page: RegisterNewStep2(nHICData, request)),
// )
//
// // // if(widget.isDubai ==false){
// // // widget.changePageViewIndex!(1),
// // // if(widget.isDubai ==false){
// //
// // Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)),
// // }
// }
// else
// {
// Navigator.of(context).pop(),
// GifLoaderDialogUtils.hideDialog(context),
// Future.delayed(Duration(seconds: 1), () {
// AppToast.showErrorToast(message: result, localContext: context);
// }),
// // projectViewModel.analytics.loginRegistration.login_fail(error: result),
// // projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result),
// }
// })
// .catchError((err) {
// print(err);
// GifLoaderDialogUtils.hideDialog(context);
// Future.delayed(Duration(seconds: 1), () {
// AppToast.showErrorToast(message: err);
// // startSMSService(tempType);
// });
// });
// }
// }
getCommonRequest({type}) {
bool fileNo = false;
if (nationalIDorFile.text != null && nationalIDorFile.text.isNotEmpty) {
fileNo = nationalIDorFile.text.length < 10;
}
var request = SendActivationRequest();
request.patientMobileNumber = int.parse(mobileNo);
request.mobileNo = '0' + mobileNo.toString();
request.deviceToken = DEVICE_TOKEN;
request.projectOutSA = selectedCountry.countryCode == "966" ? false : true;
request.loginType = type == 1 ? type : 2;
request.oTPSendType = type == 1 ? type : 2; //this.selectedOption == 1 ? 1 : 2;
request.zipCode = selectedCountry.countryCode;
request.logInTokenID = LoginTokenID ?? "";
// if (this.registerd_data != null) {
// request.searchType = this.registerd_data.searchType != null ? this.registerd_data.searchType : 1;
// request.patientID = this.registerd_data.patientID != null ? this.registerd_data.patientID : 0;
// request.patientIdentificationID = request.nationalID = this.registerd_data.patientIdentificationID != null ? this.registerd_data.patientIdentificationID : '0';
// request.dob = this.registerd_data.dob;
// request.isRegister = this.registerd_data.isRegister;
// } else {
// request.searchType = request.searchType != null ? request.searchType : 1;
if (fileNo) {
request.patientID = int.parse(nationalIDorFile.text);
request.patientIdentificationID = request.nationalID = "";
request.searchType = 2;
} else {
request.patientID = 0;
request.searchType = 1;
request.patientIdentificationID = request.nationalID = nationalIDorFile != null ? nationalIDorFile.text : '0';
}
request.isRegister = false;
request.deviceTypeID = request.searchType;
return request;
} }
// startSMSService(type) { // startSMSService(type) {
@ -704,7 +1000,7 @@ class _RegisterNew extends State<RegisterNew> {
// ).displayDialog(context); // ).displayDialog(context);
// } // }
startSMSService(type) { startSMSService(type, skipRegistration) {
late SMSOTP smsOtp; // Declare the variable first late SMSOTP smsOtp; // Declare the variable first
smsOtp = SMSOTP( smsOtp = SMSOTP(
context, context,
@ -712,7 +1008,7 @@ class _RegisterNew extends State<RegisterNew> {
mobileNo, mobileNo,
(code) { (code) {
smsOtp.dispose(); // Now we can reference it smsOtp.dispose(); // Now we can reference it
this.checkActivationCode(value: code, type: type); checkActivationCode(value: code, type: type, skipRegistration: skipRegistration);
}, },
() { () {
smsOtp.dispose(); // Now we can reference it smsOtp.dispose(); // Now we can reference it
@ -721,4 +1017,175 @@ class _RegisterNew extends State<RegisterNew> {
); );
smsOtp.displayDialog(context); smsOtp.displayDialog(context);
} }
checkActivationCodeMobile({value}) async {
GifLoaderDialogUtils.showMyDialog(context);
var request = this.getCommonRequest().toJson();
var res;
authService
.checkActivationCode(request, value)
.then((result) async => {
res = result,
if (result is Map)
{
result = CheckActivationCode.fromJson(result as Map<String, dynamic>),
if (result.errorCode == '699')
{
//699 block run here
GifLoaderDialogUtils.hideDialog(context),
Future.delayed(Duration(seconds: 2), () {
AppToast.showErrorToast(message: result.errorEndUserMessage);
Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: WelcomeLogin));
})
}
else
{
sharedPref.remove(FAMILY_FILE),
result.list.isFamily = false,
user = result.list,
sharedPref.setString(BLOOD_TYPE, result.patientBloodType ?? ""),
authenticatedUserObject.user = result.list,
context.read<ProjectViewModel>().setPrivilege(privilegeList: res),
await sharedPref.setObject(MAIN_USER, result.list),
await sharedPref.setObject(USER_PROFILE, result.list),
loginTokenID = result.logInTokenID,
await sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID),
await sharedPref.setString(TOKEN, result.authenticationTokenID),
checkIfUserAgreedBefore(result, context),
context.read<ProjectViewModel>().analytics.loginRegistration.login_successful(),
}
}
else
{
GifLoaderDialogUtils.hideDialog(context),
Future.delayed(Duration(seconds: 1), () {
Navigator.of(context).pop();
AppToast.showErrorToast(message: result, localContext: context);
}),
}
})
.catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
Future.delayed(Duration(seconds: 1), () {
print(err);
AppToast.showErrorToast(message: err);
// startSMSService(tempType);
});
});
}
checkIfUserAgreedBefore(CheckActivationCode result, context) {
if (projectViewModel.havePrivilege(109)) {
authService.checkIfUserAgreed().then((result) {
if (result['IsPatientAlreadyAgreed']) {
goToHome(context);
} else {
authService.getUserAgreementContent().then((result) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
Navigator.pushAndRemoveUntil(
context,
FadePage(
page: UserLoginAgreementPage(
userAgreementText: result['UserAgreementContent'],
authenticatedUserObject: authenticatedUserObject,
appointmentRateViewModel: appointmentRateViewModel,
selectedOption: selectedOption,
isArabic: projectViewModel.isArabic,
),
),
(r) => false);
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
print(err);
});
}
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(context);
print(err);
});
} else {
goToHome(context);
}
}
Future<void> goToHome(context) async {
authenticatedUserObject.isLogin = true;
appointmentRateViewModel.isLogin = true;
projectViewModel.isLogin = true;
projectViewModel.user = authenticatedUserObject.user;
await authenticatedUserObject.getUser(getUser: true);
getToDoCount();
checkIfIsInPatient();
appointmentRateViewModel.getIsLastAppointmentRatedList(projectViewModel.isArabic ? 1 : 2).then((_) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
if (appointmentRateViewModel.isHaveAppointmentNotRate) {
Navigator.pushAndRemoveUntil(
context,
FadePage(page: RateAppointmentDoctor()),
(route) => false,
);
} else {
Navigator.pushAndRemoveUntil(
context,
FadePage(page: LandingPage()),
(route) => false,
);
}
insertIMEI();
}).catchError((error) {
print(error);
});
}
void getToDoCount() {
context.read<ToDoCountProviderModel>().setState(0, 0, true, "0");
ClinicListService().getActiveAppointmentNo(context).then((res) {
if (res['MessageStatus'] == 1) {
context.read<ToDoCountProviderModel>().setState(
res['AppointmentActiveNumber'],
res['AncillaryOrderListCount'],
true,
"0",
);
}
}).catchError((err) => print(err));
}
insertIMEI() {
authService.insertDeviceImei(selectedOption).then((value) => {}).catchError((err) {
print(err);
});
}
void checkIfIsInPatient() {
final service = ClinicListService();
service.checkIfInPatientAPI(context).then((res) {
if (res['MessageStatus'] != 1) return;
final isAdmitted = res['isAdmitted'] == true;
final hasAdmissionRequest = res['hasAdmissionRequests'] == true;
print("IS ADMITTED: $isAdmitted");
print("Has Admission Request: $hasAdmissionRequest");
ProjectViewModel projectViewModel = context.read<ProjectViewModel>();
if (isAdmitted && res['PatientAdmittedInformation']?.isNotEmpty == true) {
final info = GetAdmissionInfoResponseModel.fromJson(res['PatientAdmittedInformation'][0]);
projectViewModel.setInPatientProjectID(res['PatientAdmittedInformation'][0]['ProjectID']);
projectViewModel.setInPatientAdmissionInfo(info);
projectViewModel.setIsPatientAdmitted(true);
}
if (hasAdmissionRequest && res['MedicalInstruction']?.isNotEmpty == true) {
final reqInfo = GetAdmissionRequestInfoResponseModel.fromJson(res['MedicalInstruction'][0]);
projectViewModel.setInPatientProjectID(res['MedicalInstruction'][0]['projectId']);
projectViewModel.setInPatientAdmissionRequest(reqInfo);
projectViewModel.setPatientHasAdmissionRequest(true);
}
});
}
} }

@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:hmg_patient_app/config/shared_pref_kay.dart'; import 'package:hmg_patient_app/config/shared_pref_kay.dart';
import 'package:hmg_patient_app/config/size_config.dart'; import 'package:hmg_patient_app/config/size_config.dart';
@ -67,25 +69,33 @@ class _RegisterNew extends State<RegisterNewStep2> {
void initState() { void initState() {
super.initState(); super.initState();
isFromDubai = widget.payload.zipCode!.contains("971") || widget.payload.zipCode!.contains("+971"); isFromDubai = widget.payload.zipCode!.contains("971") || widget.payload.zipCode!.contains("+971");
if (isFromDubai) { loadCountriesList();
getCountries(); // if (isFromDubai) {
} // // getCountries();
// }
// isFromDubai = widget.payload.zipCode!.contains("971") || widget.payload.zipCode!.contains("+971"); // isFromDubai = widget.payload.zipCode!.contains("971") || widget.payload.zipCode!.contains("+971");
} }
getCountries() { loadCountriesList() async {
ClinicListService service = ClinicListService(); final String response = await DefaultAssetBundle.of(context).loadString('assets/json/countriesList.json');
service.getCountries().then((res) { final List<dynamic> data = json.decode(response);
if (res['MessageStatus'] == 1) { countriesList = data.map((e) => NationalityCountries.fromJson(e)).toList();
print(res['ListNationality']); setState(() {});
countriesList = (res['ListNationality'] as List).map((e) => NationalityCountries.fromJson(e)).toList();
setState(() {});
}
}).catchError((err) {
print(err);
});
} }
// getCountries() {
// ClinicListService service = ClinicListService();
// service.getCountries().then((res) {
// if (res['MessageStatus'] == 1) {
// print(res['ListNationality']);
// countriesList = (res['ListNationality'] as List).map((e) => NationalityCountries.fromJson(e)).toList();
// setState(() {});
// }
// }).catchError((err) {
// print(err);
// });
// }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
projectViewModel = Provider.of(context); projectViewModel = Provider.of(context);
@ -215,7 +225,12 @@ class _RegisterNew extends State<RegisterNewStep2> {
selectionCustomIcon: "assets/images/svg/arrow-down.svg", selectionCustomIcon: "assets/images/svg/arrow-down.svg",
leadingIcon: 'assets/images/svg/smart-phone.svg', leadingIcon: 'assets/images/svg/smart-phone.svg',
).withVerticalPadding(8) ).withVerticalPadding(8)
: inputWidget(TranslationBase.of(context).maritalStatus, (widget.nHICData!.maritalStatus ?? ""), null, : inputWidget(
TranslationBase.of(context).maritalStatus,
context.selectedLanguage == "ar"
? (MaritalStatusTypeExtension.fromValue(widget.nHICData!.maritalStatusCode)!.typeAr)
: (MaritalStatusTypeExtension.fromValue(widget.nHICData!.maritalStatusCode)!.type),
null,
isEnable: true, isEnable: true,
prefix: null, prefix: null,
removePadding: true, removePadding: true,
@ -255,7 +270,15 @@ class _RegisterNew extends State<RegisterNewStep2> {
selectionCustomIcon: "assets/images/svg/arrow-down.svg", selectionCustomIcon: "assets/images/svg/arrow-down.svg",
leadingIcon: 'assets/images/svg/globe.svg', leadingIcon: 'assets/images/svg/globe.svg',
).withVerticalPadding(8) ).withVerticalPadding(8)
: inputWidget(TranslationBase.of(context).nationality, (widget.nHICData!.nationality ?? ""), null, : inputWidget(
TranslationBase.of(context).nationality,
context.selectedLanguage == "ar"
? (countriesList.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).nameN ?? "")
: (countriesList.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).name ?? ""),
// (widget.nHICData!.nationalityCode ?? "")
null,
isEnable: true, isEnable: true,
prefix: null, prefix: null,
removePadding: true, removePadding: true,

@ -62,9 +62,11 @@ class _SavedLogin extends State<SavedLogin> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
print("==== Saved Login=====");
phoneController = TextEditingController(text: widget.savedLoginData.mobile!.startsWith('0') ? widget.savedLoginData.mobile!.substring(1) : widget.savedLoginData.mobile); phoneController = TextEditingController(text: widget.savedLoginData.mobile!.startsWith('0') ? widget.savedLoginData.mobile!.substring(1) : widget.savedLoginData.mobile);
phoneNumber = widget.savedLoginData.mobile!.startsWith('0') ? widget.savedLoginData.mobile!.substring(1) : widget.savedLoginData.mobile; phoneNumber = widget.savedLoginData.mobile!.startsWith('0') ? widget.savedLoginData.mobile!.substring(1) : widget.savedLoginData.mobile;
if (widget.savedLoginData.logInType! == 2 || widget.savedLoginData.logInType! == 3) {
loginWithFingerPrintFace(widget.savedLoginData.logInType!, widget.savedLoginData.iMEI!);
}
} }
@override @override
@ -169,7 +171,7 @@ class _SavedLogin extends State<SavedLogin> {
margin: EdgeInsets.all(16), margin: EdgeInsets.all(16),
child: SvgPicture.asset( child: SvgPicture.asset(
getTypeIcons(widget.savedLoginData.logInType!, context), getTypeIcons(widget.savedLoginData.logInType!, context),
color: widget.savedLoginData.logInType == 4 ? null: Color(0xFFED1C2B) , color: widget.savedLoginData.logInType == 4 ? null : Color(0xFFED1C2B),
height: 64, height: 64,
width: 64, width: 64,
), ),
@ -210,99 +212,43 @@ class _SavedLogin extends State<SavedLogin> {
), ),
const SizedBox(height: 24), const SizedBox(height: 24),
// OTP login button // OTP login button
CustomButton( widget.savedLoginData.logInType != null && widget.savedLoginData.logInType != 1
text: TranslationBase.of(context).loginByOTP, ? CustomButton(
onPressed: () { text: TranslationBase.of(context).loginByOTP,
showModalBottomSheet( onPressed: () {
context: context, if (widget.savedLoginData.logInType! == 2 || widget.savedLoginData.logInType! == 3) {
isScrollControlled: true, loginWithFingerPrintFace(widget.savedLoginData.logInType!, widget.savedLoginData.iMEI!);
isDismissible: false, } else {
useSafeArea: true, widget.savedLoginData.logInType = 1;
backgroundColor: Colors.transparent, int? val = widget.savedLoginData.logInType!;
builder: (bottomSheetContext) => StatefulBuilder(builder: (BuildContext context, StateSetter setModalState) { checkUserAuthentication(val);
return Padding( }
padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), },
child: SingleChildScrollView( backgroundColor: Colors.white,
child: GenericBottomSheet( borderColor: Color(0xFF2E3039),
countryCode: selectedCountry.countryCode, textColor: Color(0xFF2E3039),
initialPhoneNumber: phoneController!.text, borderWidth: 2,
textController: phoneController, padding: EdgeInsets.fromLTRB(0, 14, 0, 14),
isEnableCountryDropdown: false, icon: "assets/images/svg/password-validation.svg",
isFromSavedLogin: true, )
onCountryChange: (value) { : CustomButton(
selectedCountry = value; text: "${TranslationBase.of(context).loginBy} ${getType(4, context)}",
setModalState(() {}); onPressed: () {
}, if (widget.savedLoginData.logInType! == 2 || widget.savedLoginData.logInType! == 3) {
onChange: (String? value) { loginWithFingerPrintFace(widget.savedLoginData.logInType!, widget.savedLoginData.iMEI!);
phoneNumber = value; } else {
}, widget.savedLoginData.logInType = 4;
buttons: [ int? val = widget.savedLoginData.logInType!;
Padding( checkUserAuthentication(val);
padding: const EdgeInsets.only(bottom: 10), }
child: CustomButton( },
text: TranslationBase.of(context).sendOTPSMS, backgroundColor: Colors.white,
onPressed: () { borderColor: Color(0xFF2E3039),
int? val = Utils.onOtpBtnPressed(OTPType.sms, phoneNumber); textColor: Color(0xFF2E3039),
if (val != null) { borderWidth: 2,
checkUserAuthentication( padding: EdgeInsets.fromLTRB(0, 14, 0, 14),
val, icon: "assets/images/svg/whatsapp.svg",
); ),
}
},
backgroundColor: CustomColors.bgRedColor,
borderColor: CustomColors.bgRedBorderColor,
textColor: Colors.white,
icon: "assets/images/svg/message.svg",
),
),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Text(
TranslationBase.of(context).oR,
style: context.dynamicTextStyle(
fontSize: 16,
color: Color(0xFF2E3039),
fontWeight: FontWeight.w500,
),
),
),
],
),
Padding(
padding: const EdgeInsets.only(bottom: 10, top: 10),
child: CustomButton(
text: TranslationBase.of(context).sendOTPWHATSAPP,
onPressed: () {
int? val = Utils.onOtpBtnPressed(OTPType.whatsapp, phoneNumber);
if (val != null) {
GifLoaderDialogUtils.showMyDialog(context);
checkUserAuthentication(val);
}
},
backgroundColor: Colors.white,
borderColor: Color(0xFF2E3039),
textColor: Color(0xFF2E3039),
icon: "assets/images/svg/whatsapp.svg",
),
),
],
),
),
);
}),
);
},
backgroundColor: Colors.white,
borderColor: Color(0xFF2E3039),
textColor: Color(0xFF2E3039),
borderWidth: 2,
padding: EdgeInsets.fromLTRB(0, 14, 0, 14),
icon: "assets/images/svg/password-validation.svg",
),
const Spacer(flex: 2), const Spacer(flex: 2),
// OR divider // OR divider
@ -424,17 +370,16 @@ class _SavedLogin extends State<SavedLogin> {
// setDefault(); // setDefault();
sharedPref.setInt(LAST_LOGIN, lastLogin); sharedPref.setInt(LAST_LOGIN, lastLogin);
checkActivationCode(null, lastLogin, result['LogInTokenID']); checkActivationCode(null, lastLogin, result['LogInTokenID']);
}else if(result['ErrorEndUserMessage'] != null) { } else if (result['ErrorEndUserMessage'] != null) {
ConfirmDialog dialog = new ConfirmDialog( ConfirmDialog dialog = new ConfirmDialog(
context: context, context: context,
confirmMessage: result['ErrorEndUserMessage'], confirmMessage: result['ErrorEndUserMessage'],
okText: TranslationBase.of(context).confirm, okText: TranslationBase.of(context).confirm,
cancelText: TranslationBase.of(context).cancel_nocaps, cancelText: TranslationBase.of(context).cancel_nocaps,
okFunction: () => { okFunction: () => {
ConfirmDialog.closeAlertDialog(context), ConfirmDialog.closeAlertDialog(context),
Navigator.of(context).pushReplacement(FadePage(page: WelcomeLogin())),
Navigator.of(context).pushReplacement(FadePage(page: WelcomeLogin())), },
},
cancelFunction: () => {}); cancelFunction: () => {});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
} }

@ -39,6 +39,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:intl/src/intl/date_format.dart'; import 'package:intl/src/intl/date_format.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../models/Authentication/authenticated_user.dart';
import '../../widgets/dialogs/confirm_dialog.dart'; import '../../widgets/dialogs/confirm_dialog.dart';
class WelcomeLogin extends StatefulWidget { class WelcomeLogin extends StatefulWidget {
@ -71,6 +72,8 @@ class _WelcomeLogin extends State<WelcomeLogin> {
var deviceToken; var deviceToken;
var lastLogin; var lastLogin;
AuthenticatedUser? userData;
AuthenticatedUserObject authenticatedUserObject = locator<AuthenticatedUserObject>(); AuthenticatedUserObject authenticatedUserObject = locator<AuthenticatedUserObject>();
AppointmentRateViewModel appointmentRateViewModel = locator<AppointmentRateViewModel>(); AppointmentRateViewModel appointmentRateViewModel = locator<AppointmentRateViewModel>();
late ProjectViewModel projectViewModel; late ProjectViewModel projectViewModel;
@ -80,7 +83,6 @@ class _WelcomeLogin extends State<WelcomeLogin> {
late int selectedOption; late int selectedOption;
bool onlySMSBox = false; bool onlySMSBox = false;
var userData;
int fingrePrintBefore = 0; int fingrePrintBefore = 0;
@ -312,21 +314,21 @@ class _WelcomeLogin extends State<WelcomeLogin> {
authService authService
.checkPatientAuthentication(request) .checkPatientAuthentication(request)
.then((value) => { .then((value) => {
// GifLoaderDialogUtils.hideDialog(context), // GifLoaderDialogUtils.hideDialog(context),
if (value['isSMSSent']) if (value['isSMSSent'])
{ {
sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']), sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']),
this.loginTokenID = value['LogInTokenID'], this.loginTokenID = value['LogInTokenID'],
sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, request), sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, request),
// Future.delayed(Duration(seconds: 1), () { // Future.delayed(Duration(seconds: 1), () {
this.sendActivationCode(type) this.sendActivationCode(type)
// }) // })
} }
else else
{ {
if (value['IsAuthenticated']) {this.checkActivationCode()} if (value['IsAuthenticated']) {this.checkActivationCode()}
} }
}) })
.catchError((err) { .catchError((err) {
print(err); print(err);
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
@ -336,9 +338,9 @@ class _WelcomeLogin extends State<WelcomeLogin> {
okText: TranslationBase.of(context).confirm, okText: TranslationBase.of(context).confirm,
cancelText: TranslationBase.of(context).cancel_nocaps, cancelText: TranslationBase.of(context).cancel_nocaps,
okFunction: () => { okFunction: () => {
ConfirmDialog.closeAlertDialog(context), ConfirmDialog.closeAlertDialog(context),
Navigator.of(context).push(FadePage(page: RegisterNew())), Navigator.of(context).push(FadePage(page: RegisterNew())),
}, },
cancelFunction: () => {}); cancelFunction: () => {});
dialog.showAlertDialog(context); dialog.showAlertDialog(context);
projectViewModel.analytics.loginRegistration.login_fail(error: err.toString()); projectViewModel.analytics.loginRegistration.login_fail(error: err.toString());
@ -396,30 +398,30 @@ class _WelcomeLogin extends State<WelcomeLogin> {
authService authService
.checkActivationCodeRegister(request, value) .checkActivationCodeRegister(request, value)
.then((result) => { .then((result) => {
res = result, res = result,
if (result is Map) if (result is Map)
{ {
result = CheckActivationCode.fromJson(result as Map<String, dynamic>), result = CheckActivationCode.fromJson(result as Map<String, dynamic>),
if (this.registerd_data != null && this.registerd_data.isRegister == true) if (this.registerd_data != null && this.registerd_data.isRegister == true)
{ {
// if(widget.isDubai ==false){ // if(widget.isDubai ==false){
// widget.changePageViewIndex!(1), // widget.changePageViewIndex!(1),
// if(widget.isDubai ==false){ // if(widget.isDubai ==false){
Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)), Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)),
} }
} }
else else
{ {
Navigator.of(context).pop(), Navigator.of(context).pop(),
GifLoaderDialogUtils.hideDialog(context), GifLoaderDialogUtils.hideDialog(context),
Future.delayed(Duration(seconds: 1), () { Future.delayed(Duration(seconds: 1), () {
AppToast.showErrorToast(message: result); AppToast.showErrorToast(message: result);
}), }),
// projectViewModel.analytics.loginRegistration.login_fail(error: result), // projectViewModel.analytics.loginRegistration.login_fail(error: result),
// projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result), // projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result),
} }
}) })
.catchError((err) { .catchError((err) {
print(err); print(err);
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
@ -432,56 +434,56 @@ class _WelcomeLogin extends State<WelcomeLogin> {
authService authService
.checkActivationCode(request, value) .checkActivationCode(request, value)
.then((result) async => { .then((result) async => {
res = result, res = result,
if (result is Map) if (result is Map)
{ {
result = CheckActivationCode.fromJson(result as Map<String, dynamic>), result = CheckActivationCode.fromJson(result as Map<String, dynamic>),
if (result.errorCode == '699') if (result.errorCode == '699')
{ {
//699 block run here //699 block run here
GifLoaderDialogUtils.hideDialog(context), GifLoaderDialogUtils.hideDialog(context),
Future.delayed(Duration(seconds: 2), () { Future.delayed(Duration(seconds: 2), () {
AppToast.showErrorToast(message: result.errorEndUserMessage); AppToast.showErrorToast(message: result.errorEndUserMessage);
Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: WelcomeLogin)); Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: WelcomeLogin));
}) })
} }
else if (this.registerd_data != null && this.registerd_data.isRegister == true) else if (this.registerd_data != null && this.registerd_data.isRegister == true)
{ {
// widget.changePageViewIndex!(1), // widget.changePageViewIndex!(1),
Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)), Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)),
} }
else else
{ {
sharedPref.remove(FAMILY_FILE), sharedPref.remove(FAMILY_FILE),
result.list.isFamily = false, result.list.isFamily = false,
userData = result.list, userData = result.list,
sharedPref.setString(BLOOD_TYPE, result.patientBloodType ?? ""), sharedPref.setString(BLOOD_TYPE, result.patientBloodType ?? ""),
//Remove o+ from here Added by Aamir //Remove o+ from here Added by Aamir
authenticatedUserObject.user = result.list, authenticatedUserObject.user = result.list,
projectViewModel.setPrivilege(privilegeList: res), projectViewModel.setPrivilege(privilegeList: res),
await sharedPref.setObject(MAIN_USER, result.list), await sharedPref.setObject(MAIN_USER, result.list),
await sharedPref.setObject(USER_PROFILE, result.list), await sharedPref.setObject(USER_PROFILE, result.list),
loginTokenID = result.logInTokenID, loginTokenID = result.logInTokenID,
await sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID), await sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID),
await sharedPref.setString(TOKEN, result.authenticationTokenID), await sharedPref.setString(TOKEN, result.authenticationTokenID),
checkIfUserAgreedBefore(result), checkIfUserAgreedBefore(result),
// projectViewModel.analytics.loginRegistration.login_successful(), // projectViewModel.analytics.loginRegistration.login_successful(),
} }
} }
else else
{ {
// Navigator.of(context).pop(), // Navigator.of(context).pop(),
GifLoaderDialogUtils.hideDialog(context), GifLoaderDialogUtils.hideDialog(context),
Future.delayed(Duration(seconds: 1), () { Future.delayed(Duration(seconds: 1), () {
Navigator.of(context).pop(); Navigator.of(context).pop();
AppToast.showErrorToast(message: result, localContext: context); AppToast.showErrorToast(message: result, localContext: context);
startSMSService(tempType); startSMSService(tempType);
}), }),
// projectViewModel.analytics.loginRegistration.login_fail(error: result), // projectViewModel.analytics.loginRegistration.login_fail(error: result),
// projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result) // projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result)
} }
}) })
.catchError((err) { .catchError((err) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
Future.delayed(Duration(seconds: 1), () { Future.delayed(Duration(seconds: 1), () {
@ -503,11 +505,11 @@ class _WelcomeLogin extends State<WelcomeLogin> {
context, context,
type, type,
phoneNumber, phoneNumber,
(code) { (code) {
smsOtp.dispose(); // Now we can reference it smsOtp.dispose(); // Now we can reference it
this.checkActivationCode(value: code); this.checkActivationCode(value: code);
}, },
() { () {
smsOtp.dispose(); // Now we can reference it smsOtp.dispose(); // Now we can reference it
Navigator.pop(context); Navigator.pop(context);
}, },
@ -515,11 +517,7 @@ class _WelcomeLogin extends State<WelcomeLogin> {
smsOtp.displayDialog(context); smsOtp.displayDialog(context);
} }
// showLoader(bool isTrue) {
// setState(() {
// isLoading = isTrue;
// });
// }
setDefault() async { setDefault() async {
// showLoader(true); // showLoader(true);
@ -534,12 +532,12 @@ class _WelcomeLogin extends State<WelcomeLogin> {
this.zipCode = this.registerd_data != null this.zipCode = this.registerd_data != null
? this.registerd_data.zipCode ? this.registerd_data.zipCode
: this.user!.outSA == true : this.user!.outSA == true
? "971" ? "971"
: "966"; : "966";
this.patientOutSA = this.registerd_data != null this.patientOutSA = this.registerd_data != null
? this.registerd_data.zipCode == "966" ? this.registerd_data.zipCode == "966"
? 0 ? 0
: 1 : 1
: this.user!.outSA; : this.user!.outSA;
if (this.registerd_data != null) { if (this.registerd_data != null) {
this.loginTokenID = await sharedPref.getString(LOGIN_TOKEN_ID); this.loginTokenID = await sharedPref.getString(LOGIN_TOKEN_ID);
@ -558,8 +556,8 @@ class _WelcomeLogin extends State<WelcomeLogin> {
this.lastLogin = await sharedPref.getInt(LAST_LOGIN) != null this.lastLogin = await sharedPref.getInt(LAST_LOGIN) != null
? await sharedPref.getInt(LAST_LOGIN) ? await sharedPref.getInt(LAST_LOGIN)
: user != null : user != null
? user!.logInType ? user!.logInType
: null; : null;
// showLoader(false); // showLoader(false);
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
@ -625,7 +623,7 @@ class _WelcomeLogin extends State<WelcomeLogin> {
isArabic: projectViewModel.isArabic, isArabic: projectViewModel.isArabic,
), ),
), ),
(r) => false); (r) => false);
}).catchError((err) { }).catchError((err) {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
print(err); print(err);
@ -657,13 +655,13 @@ class _WelcomeLogin extends State<WelcomeLogin> {
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage(page: RateAppointmentDoctor()), FadePage(page: RateAppointmentDoctor()),
(route) => false, (route) => false,
); );
} else { } else {
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
FadePage(page: LandingPage()), FadePage(page: LandingPage()),
(route) => false, (route) => false,
); );
} }
insertIMEI(); insertIMEI();

@ -274,7 +274,6 @@ class AuthProvider with ChangeNotifier {
Future<dynamic> checkActivationCode(request, [value]) async { Future<dynamic> checkActivationCode(request, [value]) async {
var neRequest = CheckActivationCodeReq.fromJson(request); var neRequest = CheckActivationCodeReq.fromJson(request);
neRequest.activationCode = value ?? "0000"; neRequest.activationCode = value ?? "0000";
neRequest.isSilentLogin = value != null ? false : true; neRequest.isSilentLogin = value != null ? false : true;
neRequest.versionID = VERSION_ID; neRequest.versionID = VERSION_ID;

@ -136,6 +136,33 @@ class Utils {
} }
} }
static String formatHijriDateToDisplay(String hijriDateString) {
try {
// Assuming hijriDateString is in the format yyyy-MM-dd
final parts = hijriDateString.split('-');
if (parts.length != 3) return "";
final day = parts[2].padLeft(2, '0');
final year = parts[0];
// Map month number to short month name (Hijri months)
const hijriMonthNames = [
'Muharram', 'Safar', 'Rabi I', 'Rabi II', 'Jumada I', 'Jumada II',
'Rajab', 'Sha\'ban', 'Ramadan', 'Shawwal', 'Dhu al-Qi\'dah', 'Dhu al-Hijjah'
];
final monthIndex = int.tryParse(parts[1]) ?? 1;
final month = hijriMonthNames[monthIndex - 1];
return '$day $month, $year';
} catch (e) {
print("Error formatting hijri date: $e");
return "";
}
}
static String formatDateToUsage(String isoDateString) { static String formatDateToUsage(String isoDateString) {
try { try {
final dateTime = DateTime.parse(isoDateString); final dateTime = DateTime.parse(isoDateString);

Loading…
Cancel
Save