From 5b45855cf69bdb580de13d337d6fa936fc62aae7 Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Thu, 10 Jul 2025 11:52:55 +0300 Subject: [PATCH] saved login created --- assets/images/lock-icon.png | Bin 0 -> 66514 bytes assets/images/svg/Check Mark.lottie | Bin 0 -> 1181 bytes assets/images/svg/qlogin.svg | 9 - lib/config/localized_values.dart | 2 + .../otp/otp_validation_bootmsheet_widget.dart | 1 + lib/pages/landing/landing_page.dart | 114 +++-- lib/pages/login/saved_login.dart | 441 ++++++++++++++++++ lib/pages/login/welcome.dart | 1 + lib/routes.dart | 2 +- lib/splashPage.dart | 2 +- lib/uitl/translations_delegate_base.dart | 2 + lib/widgets/quick_login.dart | 81 +++- 12 files changed, 589 insertions(+), 66 deletions(-) create mode 100644 assets/images/lock-icon.png create mode 100644 assets/images/svg/Check Mark.lottie delete mode 100644 assets/images/svg/qlogin.svg create mode 100644 lib/pages/login/saved_login.dart diff --git a/assets/images/lock-icon.png b/assets/images/lock-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..39645887af7379a9f33622b1f5aecffda03993e4 GIT binary patch literal 66514 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 literal 0 HcmV?d00001 diff --git a/assets/images/svg/Check Mark.lottie b/assets/images/svg/Check Mark.lottie new file mode 100644 index 0000000000000000000000000000000000000000..28630fbd70259a7f2d78496216b7b0cffe802a42 GIT binary patch literal 1181 zcmWIWW@Zs#U|`^25ZtjoNW?E`-iC$K5eqL{{Bi|tf0oV6N z*()77FRZI#^iPOc(9^XrA;HAZ_x-yyG3DRuKgHc+l3$}cjYnDI#z9%*F#n~W<~uD6 z=}>z2-`nQ)605tOX@6(S-98|b?k|&RFi)(bQTFwRf~n2oZrQ3m!EP~2rXIRimC1Hh zy8Xl}?Vs;AvZN?axBAWUy7Dh$0E$yfj@>`{mWhF3F3_DOK&Jv-nwwaXnV(mzZ*Gxl zmTX{|sB2{@Ywv>1|om8FV>a`u${Sn z+wRueg_D<+=8N)oOl)g42|Z)CO5=a+bE!EK9IljQ?amZtvOfOo*S*KZ>rb}jO`CG* z_x9)cYSZs`ExIy`<*a7tCE+iNv!|y{4&Jpe+h=ctsc-1K@Y0p)>(8lODwLhRt?AXD zburmq>&>p*36$!%R%EE(&Fb^Ybg7W9^GfZEQty@G3xXFmr_FoKzcVht>U4H2*Qs!} zxC8gv&RnW6VEDc6z|=%n>l+U*mAaPC4oujaC@ygA)&2)713u&~JG^)C&0htvZ4W~E z4?0CRJmuMDbY}kZ?N8@1?21#)IebvH-$$h`jN^Xa>z%UyXP6fo|2bN)rF&Own)A`V z>0IlL8E3w*-DoBweRRLEU9YWs=YhZj%lC_AwQ=F6Ie#zh zO-_9-Se>q9;Pc0XA+CjGkwC}++vZ(<5^iZO+kTg@&ga-;ft97N|F2u1fN! zX>RwbjW?~Hw5&Y9KKcIkmydtXUFqnxBKVn`@68|^gTqUA`&#+$YI?u-@Vx&*k>-aA z4&9f%d+`v4)~@pHDd1Cf77Ad??J*wf{fMW1;HvjNc~Q z5u&u&$6qUTX8n1#OD?N6mgl*R$6Muha_54z4orXk zm~XS+p?bfTV9f^~gF6f!$k`p&EJ*s3C}h%nc0=&IFW*m{-l`{kZ)?tP?f`E_CJ_eQ oc^#OCkN`@~N7ss;_YnG41DWLH!~kzrHjpVyKsXmjzhVaQ09JkYD*ylh literal 0 HcmV?d00001 diff --git a/assets/images/svg/qlogin.svg b/assets/images/svg/qlogin.svg deleted file mode 100644 index 3fcf2ffd..00000000 --- a/assets/images/svg/qlogin.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 7922976e..8a9e5a4f 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -2329,6 +2329,8 @@ const Map localizedValues = { "clickPrivacyPolicy": {"en": "Please click here to view the privacy policy", "ar": "الرجاء الضغط هنا لعرض سياسة الخصوصية"}, "welcomeToDrSulaiman": {"en": "Welcome to Dr. Sulaiman Al Habib Medical Group", "ar": "مرحباً بكم في مجموعة الدكتور سليمان الحبيب الطبية"}, "dontHaveAccount": {"en": "Don’t have an account?", "ar": "ليس لديك حساب؟"}, + "loginByOTP": {"en": "Login By OTP", "ar":"تسجيل الدخول باستخدام OTP"}, + "loginBy": {"en": "Login By", "ar":"تسجيل الدخول بواسطة"}, "prepareToElevate": {"en": "Prepared to elevate your health and well-being?", "ar": "هل أنت مستعد لتحسين صحتك ورفاهتك؟"}, "alreadyHaveAccount": {"en": "Already have an account?", "ar": "هل لديك حساب بالفعل؟"}, "loginNow": {"en": "Login Now", "ar": "تسجيل الدخول الآن"} diff --git a/lib/new_ui/otp/otp_validation_bootmsheet_widget.dart b/lib/new_ui/otp/otp_validation_bootmsheet_widget.dart index d51c8dea..2bd1b5f4 100644 --- a/lib/new_ui/otp/otp_validation_bootmsheet_widget.dart +++ b/lib/new_ui/otp/otp_validation_bootmsheet_widget.dart @@ -109,6 +109,7 @@ class CustomButton extends StatelessWidget { this.fontFamily, this.fontWeight = FontWeight.w500, this.isDisabled = false, + this.icon, }) : super(key: key); diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index 1ba2518e..c8ffb593 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -17,6 +17,8 @@ import 'package:hmg_patient_app/pages/BookAppointment/Search.dart'; import 'package:hmg_patient_app/pages/DrawerPages/family/my-family.dart'; import 'package:hmg_patient_app/pages/ToDoList/ToDo.dart'; import 'package:hmg_patient_app/pages/landing/home_page_2.dart'; +import 'package:hmg_patient_app/pages/login/saved_login.dart'; +import 'package:hmg_patient_app/pages/login/welcome.dart'; import 'package:hmg_patient_app/pages/medical/medical_profile_page_new.dart'; import 'package:hmg_patient_app/services/authentication/auth_provider.dart'; import 'package:hmg_patient_app/services/clinic_services/get_clinic_service.dart'; @@ -83,7 +85,7 @@ class _LandingPageState extends State with WidgetsBindingObserver { DateTime? currentBackPressTime; bool authenticated = false; // SignalRUtil signalRUtil; - + // bool isDoneQuickLogin =false; late ToDoCountProviderModel toDoProvider; bool _showBottomNavigationBar = true; @@ -104,26 +106,26 @@ class _LandingPageState extends State with WidgetsBindingObserver { bool isTalking = false; var sharedPref = new AppSharedPreferences(); - - var data = { - "AppointmentNo": "2016059247", - "ProjectID": "15", - "NotificationType": "10", - "background": "0", - "doctorname": "Call from postman", - "clinicname": "LIVECARE FAMILY MEDICINE AND GP", - "speciality": "General Practioner", - "appointmentdate": "2022-01-19", - "appointmenttime": "12:10", - "PatientName": "Testing", - "session_id": "1_MX40NjIwOTk2Mn5-MTY0NzI1NjYxNDI2OX5ySXhlVjZjam13RFdMVmdleWVsSDhzQkx-fg", - "token": - "T1==cGFydG5lcl9pZD00NjIwOTk2MiZzaWc9OGMyY2IyYWFiZmZmMzI4ZmEwMjgxNDdmMGFhZGI0N2JiZjdmZWY4MjpzZXNzaW9uX2lkPTFfTVg0ME5qSXdPVGsyTW41LU1UWTBOekkxTmpZeE5ESTJPWDV5U1hobFZqWmphbTEzUkZkTVZtZGxlV1ZzU0RoelFreC1mZyZjcmVhdGVfdGltZT0xNjQ3MjU2NjE0Jm5vbmNlPTAuMjgzNDgyNjM1NDczNjQ2OCZyb2xlPW1vZGVyYXRvciZleHBpcmVfdGltZT0xNjQ3MjU4NDE0JmluaXRpYWxfbGF5b3V0X2NsYXNzX2xpc3Q9", - "DoctorImageURL": "https://image.shutterstock.com/image-vector/sample-stamp-square-grunge-sign-260nw-1474408826.jpg", - "callerID": "9920", - "PatientID": "1231755", - "is_call": "true" - }; + // + // var data = { + // "AppointmentNo": "2016059247", + // "ProjectID": "15", + // "NotificationType": "10", + // "background": "0", + // "doctorname": "Call from postman", + // "clinicname": "LIVECARE FAMILY MEDICINE AND GP", + // "speciality": "General Practioner", + // "appointmentdate": "2022-01-19", + // "appointmenttime": "12:10", + // "PatientName": "Testing", + // "session_id": "1_MX40NjIwOTk2Mn5-MTY0NzI1NjYxNDI2OX5ySXhlVjZjam13RFdMVmdleWVsSDhzQkx-fg", + // "token": + // "T1==cGFydG5lcl9pZD00NjIwOTk2MiZzaWc9OGMyY2IyYWFiZmZmMzI4ZmEwMjgxNDdmMGFhZGI0N2JiZjdmZWY4MjpzZXNzaW9uX2lkPTFfTVg0ME5qSXdPVGsyTW41LU1UWTBOekkxTmpZeE5ESTJPWDV5U1hobFZqWmphbTEzUkZkTVZtZGxlV1ZzU0RoelFreC1mZyZjcmVhdGVfdGltZT0xNjQ3MjU2NjE0Jm5vbmNlPTAuMjgzNDgyNjM1NDczNjQ2OCZyb2xlPW1vZGVyYXRvciZleHBpcmVfdGltZT0xNjQ3MjU4NDE0JmluaXRpYWxfbGF5b3V0X2NsYXNzX2xpc3Q9", + // "DoctorImageURL": "https://image.shutterstock.com/image-vector/sample-stamp-square-grunge-sign-260nw-1474408826.jpg", + // "callerID": "9920", + // "PatientID": "1231755", + // "is_call": "true" + // }; void _requestIOSPermissions() { flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation()?.requestPermissions( @@ -372,25 +374,42 @@ class _LandingPageState extends State with WidgetsBindingObserver { var data = await sharedPref.getObject(IMEI_USER_DATA); sharedPref.remove(REGISTER_DATA_FOR_LOGIIN); if (data != null) { - Navigator.of(context).pushNamed(CONFIRM_LOGIN); + SelectDeviceIMEIRES savedData = SelectDeviceIMEIRES.fromJson(data); + Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (BuildContext context) => SavedLogin(savedData), + ), + ); + + } else { - // AppGlobal.context = context; GifLoaderDialogUtils.showMyDialog(context); authService.selectDeviceImei(DEVICE_TOKEN).then((value) async { GifLoaderDialogUtils.hideDialog(context); var data = await sharedPref.getObject(IMEI_USER_DATA); if (value != null) { + SelectDeviceIMEIRES savedData = SelectDeviceIMEIRES.fromJson(data); setUserValues(value); - Navigator.of(context).pushNamed(CONFIRM_LOGIN); + Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (BuildContext context) => SavedLogin(savedData), + ), + ); } else { GifLoaderDialogUtils.hideDialog(context); - Navigator.of(context).pushNamed( - WELCOME_LOGIN, + Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (BuildContext context) => WelcomeLogin(), + ), ); } }).catchError((err) { GifLoaderDialogUtils.hideDialog(context); - Navigator.of(context).pushNamed(WELCOME_LOGIN); + Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (BuildContext context) => WelcomeLogin(), + ), + ); }); } } @@ -454,10 +473,12 @@ class _LandingPageState extends State with WidgetsBindingObserver { getNotificationCount(token) async { if (await sharedPref.getObject(USER_PROFILE) != null) { var data = AuthenticatedUser.fromJson(await sharedPref.getObject(USER_PROFILE)); + if (data != null) { authService.getDashboard().then((value) => { if (value != null) { + setState(() { notificationCount = value['List_PatientDashboard'][0]['UnreadPatientNotificationCount'] > 99 ? '99+' : value['List_PatientDashboard'][0]['UnreadPatientNotificationCount'].toString(); @@ -655,7 +676,8 @@ class _LandingPageState extends State with WidgetsBindingObserver { if (authenticatedUserObject.isLogin) { var data = AuthenticatedUser.fromJson(await sharedPref.getObject(USER_PROFILE)); if (data != null) { - // authService.registeredAuthenticatedUser(data, token, 0, 0).then((res) => {}); + authService.registeredAuthenticatedUser(data, token, 0, 0).then((res) => {}); + checkLastLoginStatus(data, token); authService.getDashboard().then((value) async { setState(() { if (value != null) { @@ -663,7 +685,7 @@ class _LandingPageState extends State with WidgetsBindingObserver { notificationCount = value['List_PatientDashboard'][0]['UnreadPatientNotificationCount'] > 99 ? '99+' : value['List_PatientDashboard'][0]['UnreadPatientNotificationCount'].toString(); model.setState(model.count, model.ancillaryCount, true, notificationCount); sharedPref.setString(NOTIFICATION_COUNT, notificationCount); - checkLastLoginStatus(data, token); + } }); // if (await AppSharedPreferences().getBool(IS_LAST_APPOINTMENT_RATE_SHOWN) == null || !await AppSharedPreferences().getBool(IS_LAST_APPOINTMENT_RATE_SHOWN)) { @@ -714,17 +736,19 @@ class _LandingPageState extends State with WidgetsBindingObserver { int lastLoginStatus = await sharedPref.getInt(LAST_LOGIN) != null ? await sharedPref.getInt(LAST_LOGIN) : 1; if(lastLoginStatus == 1 || lastLoginStatus == 2){ - showQuickLoginBottomSheet(context, user, deviceToken); + showQuickLoginBottomSheet(context, user, deviceToken,false); } } - void showQuickLoginBottomSheet(BuildContext context, AuthenticatedUser user, String deviceToken) { + void showQuickLoginBottomSheet(BuildContext context, AuthenticatedUser user, String deviceToken, bool isDone) { showModalBottomSheet( context: context, backgroundColor: Colors.transparent, isScrollControlled: true, - builder: (context) => QuickLoginBottomSheet(onPressed: (){ + builder: (context) => QuickLoginBottomSheet( + isDone:isDone, + onPressed: (){ loginWithFingerPrintFace(3, 1, user, deviceToken); },), ); @@ -750,18 +774,26 @@ class _LandingPageState extends State with WidgetsBindingObserver { AppToast.showErrorToast(message: 'Please enable your Touch or Face ID'); } if (authenticated == true) { + Navigator.of(context).pop(); int lastLogin = 1; - List availableBiometrics = []; - if (availableBiometrics.contains(BiometricType.face)) { - lastLogin = 3; - } else if (availableBiometrics.contains(BiometricType.fingerprint)) { - lastLogin = 2; - } else { - lastLogin = 1; + var availableBiometrics = await auth.getAvailableBiometrics(); + + if (availableBiometrics.contains(BiometricType.strong)) { + lastLogin = 3; // Assume Face or secure fingerprint + } else if (availableBiometrics.contains(BiometricType.weak)) { + lastLogin = 2; // Likely weak fingerprint } + await sharedPref.setInt(LAST_LOGIN, lastLogin); - authService.registeredAuthenticatedUser(user, deviceToken, 0, 0).then(( - res) => {}); + showQuickLoginBottomSheet(context, user, deviceToken, true); + insertIMEI(lastLogin); } } + + insertIMEI(lastLogin) { + authService.insertDeviceImei(lastLogin).then((value) => {}).catchError((err) { + print(err); + }); } + } + diff --git a/lib/pages/login/saved_login.dart b/lib/pages/login/saved_login.dart new file mode 100644 index 00000000..50ebe25e --- /dev/null +++ b/lib/pages/login/saved_login.dart @@ -0,0 +1,441 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:hmg_patient_app/config/config.dart'; +import 'package:hmg_patient_app/config/shared_pref_kay.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/extensions/string_extensions.dart'; +import 'package:hmg_patient_app/models/Authentication/authenticated_user.dart'; +import 'package:hmg_patient_app/models/Authentication/check_activation_code_response.dart'; +import 'package:hmg_patient_app/models/Authentication/select_device_imei_res.dart'; +import 'package:hmg_patient_app/new_ui/otp/otp_validation_bootmsheet_widget.dart'; +import 'package:hmg_patient_app/pages/landing/landing_page.dart'; +import 'package:hmg_patient_app/pages/login/welcome.dart'; +import 'package:hmg_patient_app/services/authentication/auth_provider.dart' hide sharedPref; +import 'package:hmg_patient_app/uitl/app_toast.dart'; +import 'package:hmg_patient_app/uitl/date_uitl.dart'; +import 'package:hmg_patient_app/uitl/gif_loader_dialog_utils.dart'; +import 'package:hmg_patient_app/uitl/translations_delegate_base.dart'; +import 'package:hmg_patient_app/uitl/utils.dart' hide sharedPref; +import 'package:hmg_patient_app/widgets/text/app_texts_widget.dart'; +import 'package:local_auth/local_auth.dart'; +import 'package:provider/provider.dart'; + + +class SavedLogin extends StatefulWidget { + final SelectDeviceIMEIRES savedLoginData; + const SavedLogin(this.savedLoginData, {Key? key}) : super(key: key); + + @override + _SavedLogin createState() => _SavedLogin(); +} + +class _SavedLogin extends State { + TextEditingController get phoneController => + TextEditingController( + text: widget.savedLoginData.mobile!.startsWith('0') + ? widget.savedLoginData.mobile!.substring(1) + : widget.savedLoginData.mobile, + ); + + final authService = new AuthProvider(); + late ProjectViewModel projectViewModel; + + + @override + Widget build(BuildContext context) { + + projectViewModel = Provider.of(context); + + return Scaffold( + backgroundColor: const Color(0xFFF8F8FA), + body: SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 24.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Spacer(flex: 2), + // Welcome back text + const Text( + 'Welcome back', + style: TextStyle( + fontSize: 22, + color: Color(0xFF6C757D), + fontWeight: FontWeight.w400, + ), + ), + const SizedBox(height: 16), + // Names + Column( + children: [ + Text( + widget.savedLoginData.name!.toLowerCase().capitalizeFirstofEach, + style: TextStyle( + fontSize: 28, + fontWeight: FontWeight.bold, + color: Colors.grey[800], + ), + ), + // Text( + // 'Abdul Ghaffar', + // style: TextStyle( + // fontSize: 28, + // fontWeight: FontWeight.bold, + // color: Colors.grey[800], + // ), + // ), + ], + ), + const SizedBox(height: 24), + Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: Colors.white), + borderRadius: BorderRadius.circular(8.0), + ), + child: Column(children: [ + + // Last login info + Text( + 'Last Login by ${getType(widget.savedLoginData!.logInType!, context)}', + style: const TextStyle( + fontSize: 14, + color: Color(0xFF6C757D), + ), + ), + Text( + widget.savedLoginData.createdOn != null ? DateUtil.getFormattedDate(DateUtil.convertStringToDate( widget.savedLoginData!.createdOn!), "d MMMM, y 'at' HH:mm") : '--', + style: const TextStyle( + fontSize: 16, + ), + ), + Container( + margin: EdgeInsets.all(16), + child: SvgPicture.asset("assets/images/svg/apple-finder.svg", color: Colors.red, height: 54, width: 54,),), + // Face ID login button + CustomButton( + text: "${TranslationBase.of(context).loginBy} ${getType(widget.savedLoginData!.logInType!, context)}", + onPressed: (){ + loginWithFingerPrintFace(widget.savedLoginData!.logInType!, widget.savedLoginData!.iMEI!); + + }, + backgroundColor:Color(0xffFEE9EA), + borderColor:Color(0xffFEE9EA), + textColor: Color(0xffED1C2B), + fontSize: 12, + padding : EdgeInsets.fromLTRB(0, 10, 0, 10), + // icon: "assets/images/svg/apple-finder.svg", + ), + ],),), + const SizedBox(height: 24), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.0), + + child: Text( + 'OR', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500 + ), + ), + ), + const SizedBox(height: 24), + // OTP login button + CustomButton( + text:TranslationBase.of(context).loginByOTP, + onPressed: (){ + + showModalBottomSheet( + context: context, + isScrollControlled: true, + isDismissible: false, + backgroundColor: Colors.transparent, + builder: (bottomSheetContext) => Padding( + padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), + child: SingleChildScrollView( + child: GenericBottomSheet( + countryCode: "966", + initialPhoneNumber: "", + textController: phoneController!, // Assumed to be a TextEditingController + buttons: [ + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: CustomButton( + text: "Send me OTP on SMS", + onPressed: () { + int? val = Utils.onOtpBtnPressed(OTPType.sms, phoneController); + if (val != null) { + //checkUserAuthentication(val); + } + }, + backgroundColor: Colors.red, + borderColor: Colors.red, + 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: AppText( + "OR", + fontSize: 16, + fontFamily: 'poppins', + color: Color(0xFF2E3039), + fontWeight: FontWeight.w500, + ), + ), + ], + ), + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: CustomButton( + text: "Send me OTP on WhatsApp", + onPressed: () { + int? val = Utils.onOtpBtnPressed(OTPType.whatsapp, phoneController); + if (val != null) { + //checkUserAuthentication(val); + } + }, + backgroundColor: Colors.white, + borderColor: Color(0xFF2E3039), + textColor: Color(0xFF2E3039), + icon: "assets/images/svg/whatsapp.svg", + ), + ), + ], + ), + ), + ));}, + backgroundColor:Colors.white, + borderColor:Colors.black, + textColor: Colors.black, + padding : EdgeInsets.fromLTRB(0, 14, 0, 14), + // icon: "assets/images/svg/apple-finder.svg", + ), + const Spacer(flex: 2), + // OR divider + + const SizedBox(height: 24), + // Guest and Switch account + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TextButton( + onPressed: () { Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (BuildContext context) => LandingPage(), + + ), + );}, + child: const Text( + 'Guest', + style: TextStyle( + color: Color(0xFFED1C2B), + fontSize: 16, + fontWeight: FontWeight.w500, + ), + ), + ), + const SizedBox(width: 24), + TextButton( + onPressed: () { + Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (BuildContext context) => WelcomeLogin(), + + ), + ); + + }, + child: const Text( + 'Switch account', + style: TextStyle( + color: Color(0xFFED1C2B), + fontSize: 16, + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ), + const SizedBox(height: 20), + ], + ), + ), + ), + + ); + } + + String getType(int type, BuildContext context) { + final t = TranslationBase.of(context); + final types = { + 1: t.verifySMS, + 2: t.verifyFingerprint, + 3: t.verifyFaceID, + 4: t.verifyWhatsApp, + }; + return types[type] ?? t.verifySMS; + } + + //need to move this function on provider to avoid multiple repeat + + loginWithFingerPrintFace(type, String deviceToken ) async { + bool authenticated = false; + final LocalAuthentication auth = LocalAuthentication(); + + try { + authenticated = await auth.authenticate( + localizedReason: 'Scan your fingerprint to authenticate', + options: const AuthenticationOptions( + useErrorDialogs: true, + stickyAuth: true, + ), + authMessages: [ + // Optional: uncomment for iOS custom messages + // IOSAuthMessages( + // cancelButton: 'Cancel', + // goToSettingsButton: 'Settings', + // goToSettingsDescription: 'Please set up your Touch ID.', + // lockOut: 'Please re-enable your Touch ID.', + // ), + ], + ); + } on PlatformException catch (e) { + GifLoaderDialogUtils.hideDialog(context); + AppToast.showErrorToast(message: 'Please enable your Touch or Face ID'); + return; + } + + + if (authenticated) { + int lastLogin = 1; + var availableBiometrics = await auth.getAvailableBiometrics(); + + if (availableBiometrics.contains(BiometricType.strong)) { + lastLogin = 3; // Assume Face or secure fingerprint + } else if (availableBiometrics.contains(BiometricType.weak)) { + lastLogin = 2; // Likely weak fingerprint + } + + var request = authService.getCommonRequest( + type: type, + registerd_data: null, + deviceToken: widget.savedLoginData.iMEI, + mobileNumber: int.parse(widget.savedLoginData.mobile!), + zipCode: widget.savedLoginData.outSA == 1 ? '971' : '966', + patientOutSA: widget.savedLoginData.outSA, + loginTokenID: null, + selectedOption: lastLogin, + user: widget.savedLoginData, + ); + + getMobileInfo(request, lastLogin); + } +} + + + getMobileInfo(request,int lastLogin) { + // GifLoaderDialogUtils.showMyDialog(context); + this.authService.getLoginInfo(request).then((result) { + GifLoaderDialogUtils.hideDialog(context); + if (result['SMSLoginRequired'] == false) { + // this.loginTokenID = result['LogInTokenID']; + // this.patientOutSA = result['PatientOutSA']; + // setDefault(); + checkActivationCode(lastLogin,result['LogInTokenID']); + } + }).catchError((err) { + GifLoaderDialogUtils.hideDialog(context); + print(err); + }); + } + + + checkActivationCode(int loginType, String loginToken) async { + + AppGlobal.context = context; + GifLoaderDialogUtils.showMyDialog(context); + var request = authService.getCommonRequest( + type: loginType, + registerd_data: null, + deviceToken: widget.savedLoginData.iMEI, + mobileNumber: int.parse(widget.savedLoginData.mobile!), + zipCode: widget.savedLoginData.outSA == 1 ? '971' : '966', + patientOutSA: widget.savedLoginData.outSA, + loginTokenID: loginToken, + selectedOption: loginType, + user: widget.savedLoginData, + ).toJson(); + dynamic res; + + authService + .checkActivationCode(request, null) + .then((result) async => { + res = result, + if (result is Map) + { + result = CheckActivationCode.fromJson(result as Map), + // 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: Login)); + // }) + // } + // else if (this.registerd_data != null && this.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, + // userData = result.list, + sharedPref.setString(BLOOD_TYPE, result.patientBloodType ?? ""), + //Remove o+ from here Added by Aamir + 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), + 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); + // }), + // + // projectViewModel.analytics.loginRegistration.login_fail(error: result), + // projectViewModel.analytics.errorTracking.log('otp_verification_at_confirm_login', error: result) + // } + }); + } + + + insertIMEI(lastLogin) { + + authService.insertDeviceImei(lastLogin).then((value) => {}).catchError((err) { + print(err); + }); + } +} \ No newline at end of file diff --git a/lib/pages/login/welcome.dart b/lib/pages/login/welcome.dart index e0405520..5518ff1a 100644 --- a/lib/pages/login/welcome.dart +++ b/lib/pages/login/welcome.dart @@ -102,6 +102,7 @@ class _WelcomeLogin extends State { @override Widget build(BuildContext context) { projectViewModel = context.read(); + toDoProvider = context.read(); return AppScaffold( appBarTitle: TranslationBase.of(context).welcome, isShowDecPage: false, diff --git a/lib/routes.dart b/lib/routes.dart index ec391bd3..b48cd5d7 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -15,6 +15,7 @@ import 'package:hmg_patient_app/pages/login/login-type.dart'; import 'package:hmg_patient_app/pages/login/login.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/saved_login.dart'; import 'package:hmg_patient_app/pages/login/welcome.dart'; import 'package:hmg_patient_app/pages/packages_offers/OfferAndPackagesCartPage.dart'; import 'package:hmg_patient_app/pages/packages_offers/PackageOrderCompletedPage.dart'; @@ -58,7 +59,6 @@ const String OPENTOK_CALL_PAGE = 'OPENTOK_CALL_PAGE'; const String CART_ORDER_PAGE = 'cart-order-page'; const String CALL_PAGE = 'CALL_PAGE'; const String INCOMING_CALL_PAGE = 'INCOMING_CALL_PAGE'; - const String HEALTH_WEATHER = 'health-weather'; const APP_UPDATE = 'app-update'; diff --git a/lib/splashPage.dart b/lib/splashPage.dart index ebff30a2..ac51a490 100644 --- a/lib/splashPage.dart +++ b/lib/splashPage.dart @@ -51,7 +51,7 @@ class _SplashScreenState extends State { if (!_privilegeService.hasError) { Navigator.of(context).pushReplacement( MaterialPageRoute( - builder: (BuildContext context) => WelcomeLogin(), + builder: (BuildContext context) => LandingPage(), // builder: (BuildContext context) => LandingPage(), ), ); diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 836add30..9145bcf9 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -3477,6 +3477,8 @@ class TranslationBase { String get welcomeToDrSulaiman => localizedValues["welcomeToDrSulaiman"][locale.languageCode]; String get prepareToElevate => localizedValues["prepareToElevate"][locale.languageCode]; String get dontHaveAccount => localizedValues["dontHaveAccount"][locale.languageCode]; + String get loginByOTP => localizedValues['loginByOTP'][locale.languageCode]; + String get loginBy => localizedValues['loginBy'][locale.languageCode]; String get alreadyHaveAccount => localizedValues["alreadyHaveAccount"][locale.languageCode]; String get loginNow => localizedValues["loginNow"][locale.languageCode]; diff --git a/lib/widgets/quick_login.dart b/lib/widgets/quick_login.dart index ad73642d..ae57f2af 100644 --- a/lib/widgets/quick_login.dart +++ b/lib/widgets/quick_login.dart @@ -1,13 +1,22 @@ import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:hmg_patient_app/new_ui/otp/otp_validation_bootmsheet_widget.dart'; import 'package:hmg_patient_app/uitl/translations_delegate_base.dart'; +import 'package:hmg_patient_app/uitl/utils.dart'; import 'package:hmg_patient_app/widgets/buttons/defaultButton.dart'; -class QuickLoginBottomSheet extends StatelessWidget { +class QuickLoginBottomSheet extends StatefulWidget { final VoidCallback onPressed; - const QuickLoginBottomSheet({required this.onPressed}); + final bool isDone; + + const QuickLoginBottomSheet({required this.onPressed, this.isDone = false}); + + @override + _QuickLoginBottomSheet createState() => _QuickLoginBottomSheet(); +} +class _QuickLoginBottomSheet extends State { @override Widget build(BuildContext context) { @@ -20,21 +29,50 @@ class QuickLoginBottomSheet extends StatelessWidget { ), ), padding: const EdgeInsets.all(24), - child: Column( + child: Column( mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center,children: [ + + + widget.isDone ? Column(children: [ + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: SvgPicture.asset("assets/images/svg/cross-circle.svg", width: 24, height: 24)),],), + Utils.showLottie(context: context, assetPath: 'assets/animations/lottie/checkmark.json', width: 120, height: 120, repeat: true), + + + const Text( + 'All Set! Now you can login with Face ID or Biometric', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.black, + fontFamily: 'Poppins', + + ), + ), + + ],) : Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - // Header + + Image.asset("assets/images/lock-icon.png", height: 101,), + const SizedBox(height: 10), const Text( 'Enable Quick Login', style: TextStyle( - fontSize: 20, + fontSize: 26, fontWeight: FontWeight.bold, color: Colors.black, ), ), - const SizedBox(height: 16), + const SizedBox(height: 5), // Description const Text( @@ -46,10 +84,7 @@ class QuickLoginBottomSheet extends StatelessWidget { ), ), - const SizedBox(height: 24), - // Divider - const Divider(height: 1, thickness: 1), const SizedBox(height: 24), @@ -61,16 +96,34 @@ class QuickLoginBottomSheet extends StatelessWidget { CustomButton( text: "Enable Quick Login", - onPressed: onPressed, - backgroundColor: Colors.red, - borderColor: Colors.red, + onPressed:widget.onPressed, + backgroundColor:Color(0xffED1C2B), + borderColor:Color(0xffED1C2B), textColor: Colors.white, - icon: "assets/images/svg/apple_finder.svg", + icon: "assets/images/svg/apple-finder.svg", )), ], ), + SizedBox(height: 16,), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Expanded(child: + + CustomButton( + text: "Not Now", + onPressed: (){ Navigator.pop(context);}, + backgroundColor:Color(0xffFEE9EA), + borderColor:Color(0xffFEE9EA), + textColor: Colors.red, + // icon: "assets/images/svg/apple-finder.svg", + )), + ], + ), ], - ), + )],), ); } + + } \ No newline at end of file