import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:hmg_nurses/classes/colors.dart'; import 'package:hmg_nurses/classes/date-utils.dart'; import 'package:hmg_nurses/classes/enums.dart'; import 'package:hmg_nurses/config/routes.dart'; import 'package:hmg_nurses/extensions/int_extensions.dart'; import 'package:hmg_nurses/extensions/string_extensions.dart'; import 'package:hmg_nurses/extensions/util_extensions.dart'; import 'package:hmg_nurses/extensions/widget_extensions.dart'; import 'package:hmg_nurses/generated/locale_keys.g.dart'; import 'package:hmg_nurses/main.dart'; import 'package:hmg_nurses/provider/login_provider_model.dart'; import 'package:hmg_nurses/ui/login/widgets/verification_method_card.dart'; import 'package:hmg_nurses/widgets/button/default_button.dart'; import 'package:local_auth/local_auth.dart'; import 'package:provider/provider.dart'; import 'package:sizer/sizer.dart'; // WhatsApp 2 // SMS 1 // Face ID 3 // Finger Print 4 class LoginMethodsPage extends StatefulWidget { const LoginMethodsPage({Key? key}) : super(key: key); @override LoginMethodsPageState createState() => LoginMethodsPageState(); } class LoginMethodsPageState extends State { bool isMoreOption = false; bool onlySMSBox = false; LoginType? loginType; AuthMethodTypes? selectedAuthType; late LoginProviderModel loginProviderModel; @override Widget build(BuildContext context) { if (loginType == null) { loginType = ModalRoute.of(context)!.settings.arguments as LoginType; } loginProviderModel = context.read(); return Scaffold( // appBar: AppBar( // backgroundColor: Colors.transparent, // leading: null, // // actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width], // ), body: Container( width: double.infinity, height: double.infinity, padding: const EdgeInsets.all(21), child: Column( children: [ Expanded( child: SafeArea( child: SingleChildScrollView( child: Column( children: [ 21.height, if (loginType == LoginType.SILENT_LOGIN && appState.lastLoginImeiDate != null) Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: [ LocaleKeys.welcomeBack.tr().toText12(), (appState.lastLoginImeiDate!.titleDescription! + " " + appState.lastLoginImeiDate!.doctorName!).toText20(isBold: true), heightSpacer3per(), LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText14(), heightSpacer3per(), Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.white, borderRadius: const BorderRadius.all(Radius.circular(10)), border: Border.all(color: HexColor('#707070'), width: 0.1), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ LocaleKeys.lastLoginDetails.tr().toText13(), SizedBox( width: 55.w, child: Row( children: [ "${LocaleKeys.verificationType.tr()} : ".toText11(), loginProviderModel.getType(appState.lastLoginImeiDate!.logInTypeID ?? 1).toText11(isBold: true), ], ), ), ], ), Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.end, children: [ (appState.lastLoginImeiDate!.editedOn != null ? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.editedOn ?? ""), isMonthShort: true) : appState.lastLoginImeiDate!.createdOn != null ? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.createdOn ?? ""), isMonthShort: true) : '--') .toText11(isBold: true), heightSpacer06per(), (appState.lastLoginImeiDate!.editedOn != null ? AppDateUtils.getHour(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.editedOn ?? "")) : appState.lastLoginImeiDate!.createdOn != null ? AppDateUtils.getHour(AppDateUtils.convertStringToDate(appState.lastLoginImeiDate!.createdOn ?? "")) : '--') .toText10() ], ) ], ), ), heightSpacer3per(), LocaleKeys.pleaseVerify.tr().toText14().paddingOnly(left: 1.w), heightSpacer2per(), ], ), Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_WITH_OTP) Column( children: [ LocaleKeys.pleaseVerifyForBio.tr().toText14(), 21.height, ], ), if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN) Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: VerificationMethodsList( authMethodType: AuthMethodTypes.faceID, isBioAvailable: loginProviderModel.isFaceBioAvailable, authenticateUser: (AuthMethodTypes authMethodType, isActive) async { bool isAuthenticated = await loginProviderModel.loginWithFaceIDAndBiometrics(); if (isAuthenticated) { appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType); if (loginType == LoginType.FROM_LOGIN) { setState(() { loginType = LoginType.FROM_LOGIN; }); } else if (loginType == LoginType.SILENT_LOGIN) { if (appState.lastLoginImeiDate!.logInTypeID == loginProviderModel.getLoginMethodId(authMethodType)) { loginProviderModel.sendActivationCode( appState.memberBeforeLogin!, appState.projectID, loginProviderModel.getLoginMethodId(AuthMethodTypes.sms), loginType ?? LoginType.FROM_LOGIN, isNeedBinding: false, ); } else { setState(() { loginType = LoginType.SILENT_WITH_OTP; }); } } } else { print("Authentication Failed"); } }, ), ), 21.width, Expanded( child: VerificationMethodsList( authMethodType: AuthMethodTypes.fingerPrint, isBioAvailable: loginProviderModel.isFingerBioAvailable, authenticateUser: (AuthMethodTypes authMethodType, isActive) async { bool isAuthenticated = await loginProviderModel.loginWithFaceIDAndBiometrics(); if (isAuthenticated) { appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType); if (loginType == LoginType.FROM_LOGIN) { setState(() { loginType = LoginType.FROM_LOGIN; }); } else if (loginType == LoginType.SILENT_LOGIN) { if (appState.lastLoginImeiDate!.logInTypeID == loginProviderModel.getLoginMethodId(authMethodType)) { loginProviderModel.sendActivationCode( appState.memberBeforeLogin!, appState.projectID, loginProviderModel.getLoginMethodId(AuthMethodTypes.sms), loginType ?? LoginType.FROM_LOGIN, isNeedBinding: false, ); } else { setState(() { loginType = LoginType.SILENT_WITH_OTP; }); } } } else { print("Authentication Failed"); } }, ), ), ], ), 21.height, Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: VerificationMethodsList( authMethodType: AuthMethodTypes.sms, authenticateUser: (AuthMethodTypes authMethodType, isActive) { if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN) { if (appState.lastLoginTyp == -1) appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType); if (loginType == LoginType.SILENT_LOGIN) { loginType = LoginType.SILENT_WITH_OTP; } } loginProviderModel.sendActivationCode( appState.memberBeforeLogin!, appState.projectID, loginProviderModel.getLoginMethodId(AuthMethodTypes.sms), loginType ?? LoginType.FROM_LOGIN, ); }, ), ), 21.width, Expanded( child: VerificationMethodsList( authMethodType: AuthMethodTypes.whatsApp, authenticateUser: (AuthMethodTypes authMethodType, isActive) { if (loginType == LoginType.FROM_LOGIN || loginType == LoginType.SILENT_LOGIN) { if (appState.lastLoginTyp == -1) appState.lastLoginTyp = loginProviderModel.getLoginMethodId(authMethodType); if (loginType == LoginType.SILENT_LOGIN) { loginType = LoginType.SILENT_WITH_OTP; } } loginProviderModel.sendActivationCode( appState.memberBeforeLogin!, appState.projectID, loginProviderModel.getLoginMethodId(AuthMethodTypes.whatsApp), loginType ?? LoginType.FROM_LOGIN, ); }, ), ), ], ), ], ), 12.height, ], ), ), ), ), 21.height, DefaultButton( LocaleKeys.useAnotherAccount.tr(), () async { Navigator.pushReplacementNamed(context, AppRoutes.login, arguments:false); }, colors: const [ MyColors.redColor, MyColors.redColor, ], ), ], ), ), ); } }