From 0a270bd323472b1d2bd219d30c8944632e23c32e Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Wed, 14 Oct 2026 19:23:27 +0300 Subject: [PATCH] login flow updated --- lib/api/login_api_client.dart | 16 ++ lib/app_state/app_state.dart | 7 + lib/models/generic_response_model.dart | 6 +- .../dashboard_screen_for_dependet.dart | 107 +++++++-- lib/ui/login/login_screen.dart | 224 ++++++++++++++++-- lib/ui/login/verify_last_login_screen.dart | 19 +- 6 files changed, 335 insertions(+), 44 deletions(-) diff --git a/lib/api/login_api_client.dart b/lib/api/login_api_client.dart index efd4122..6799ed3 100644 --- a/lib/api/login_api_client.dart +++ b/lib/api/login_api_client.dart @@ -49,6 +49,22 @@ class LoginApiClient { postParams["MemberType"] = memberType ?? ApiConsts.selectedMemberType.value; return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + + if (responseData != null) { + bool? isEmp = responseData.isEmpLastLoginToDevice; + if (isEmp == null && json is Map) { + dynamic raw = json["IsEmpLastLoginToDevice"] ?? json["isEmpLastLoginToDevice"]; + if (raw is bool) { + isEmp = raw; + } else if (raw is num) { + isEmp = raw == 1; + } else if (raw is String) { + isEmp = raw.toLowerCase() == "true" || raw == "1"; + } + } + AppState().setIsEmpLastLoginToDevice = isEmp; + } + return (responseData.mohemmGetMobileLoginInfoList?.length ?? 0) > 0 ? (responseData.mohemmGetMobileLoginInfoList!.first) : null; }, url, postParams); } diff --git a/lib/app_state/app_state.dart b/lib/app_state/app_state.dart index 91f8be6..af5722d 100644 --- a/lib/app_state/app_state.dart +++ b/lib/app_state/app_state.dart @@ -134,6 +134,12 @@ class AppState { set setAuthenticationTokenID(String? token) => _authenticationTokenID = token; + bool? _isEmpLastLoginToDevice; + + bool? get isEmpLastLoginToDevice => _isEmpLastLoginToDevice; + + set setIsEmpLastLoginToDevice(bool? val) => _isEmpLastLoginToDevice = val; + void setPostParamsInitConfig() { isAuthenticated = false; isLogged = false; @@ -144,6 +150,7 @@ class AppState { _dependentLoginType = null; _dependentDob = null; _authenticationTokenID = null; + _isEmpLastLoginToDevice = null; _postParamsInitConfig.pLegislationCode = null; _postParams = _postParamsInitConfig; } diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 0982da9..59edbde 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -407,7 +407,7 @@ class GenericResponseModel { String? businessCardQROutside; EmpBusinessCardInfoModel? empBusinessCardInfoModel; - + bool? isEmpLastLoginToDevice; GenericResponseModel({ this.date, this.languageID, @@ -685,6 +685,7 @@ class GenericResponseModel { this.walaPlusCategories, this.businessCardQROutside, this.empBusinessCardInfoModel, + this.isEmpLastLoginToDevice }); GenericResponseModel.fromJson(Map json) { @@ -1492,6 +1493,7 @@ class GenericResponseModel { walaPlusCategories!.add(WalaPlusCategoryModel.fromJson(v)); }); } + isEmpLastLoginToDevice = json["IsEmpLastLoginToDevice"]; } Map toJson() { @@ -1992,7 +1994,7 @@ class GenericResponseModel { if (walaPlusCategories != null) { data['WalaPlus_Categories'] = walaPlusCategories!.map((WalaPlusCategoryModel v) => v.toJson()).toList(); } - + data["IsEmpLastLoginToDevice"] = this.isEmpLastLoginToDevice; return data; } } diff --git a/lib/ui/landing/dashboard_screen_for_dependet.dart b/lib/ui/landing/dashboard_screen_for_dependet.dart index e277f9c..beb765e 100644 --- a/lib/ui/landing/dashboard_screen_for_dependet.dart +++ b/lib/ui/landing/dashboard_screen_for_dependet.dart @@ -92,6 +92,7 @@ class _DashboardScreenForDependetState extends State _loadDependentName(); WidgetsBinding.instance.addPostFrameCallback((_) async { if (mounted) { + await _saveDependentSessionToPrefs(); await _registerMobileLoginInfo(); await fetchCategories(); await fetchOffers(categoryId: currentCategoryId.isEmpty ? "all" : currentCategoryId); @@ -344,6 +345,64 @@ class _DashboardScreenForDependetState extends State Navigator.pushNamed(context, AppRoutes.walaPlusRetailerDetails, arguments: item); } + Future _saveDependentSessionToPrefs() async { + if (!ApiConsts.isDependetLogin) return; + try { + await Utils.saveStringFromPrefs("P_DEP_IS_LOGGED_IN", "true"); + String nationalId = AppState().getUserName ?? ""; + if (nationalId.isNotEmpty) { + await Utils.saveStringFromPrefs("P_DEP_NATIONAL_ID", nationalId); + } + String dob = AppState().dependentDob ?? ""; + if (dob.isNotEmpty) { + await Utils.saveStringFromPrefs("P_DEP_BIRTH_DATE", dob); + } + String name = AppState().dependentName ?? ""; + if (name.isNotEmpty) { + await Utils.saveStringFromPrefs("P_DEPENDENT_NAME", name); + } + String mobile = AppState().postParamsObject?.mobileNumber ?? ""; + if (mobile.isNotEmpty) { + await Utils.saveStringFromPrefs("P_DEP_MOBILE_NUMBER", mobile); + } + String tokenID = + (AppState().postParamsObject?.tokenID != null && AppState().postParamsObject!.tokenID!.isNotEmpty) + ? AppState().postParamsObject!.tokenID! + : (AppState().authenticationTokenID ?? ""); + if (tokenID.isNotEmpty) { + await Utils.saveStringFromPrefs("P_DEP_TOKEN_ID", tokenID); + } + String logInTokenID = AppState().postParamsObject?.logInTokenID ?? ""; + if (logInTokenID.isNotEmpty) { + await Utils.saveStringFromPrefs("P_DEP_LOGIN_TOKEN_ID", logInTokenID); + } + String authTokenID = AppState().authenticationTokenID ?? ""; + if (authTokenID.isNotEmpty) { + await Utils.saveStringFromPrefs("P_DEP_AUTHENTICATION_TOKEN_ID", authTokenID); + } + int loginType = AppState().dependentLoginType ?? 1; + await Utils.saveStringFromPrefs("P_DEP_LOGIN_TYPE", loginType.toString()); + String deviceToken = AppState().getIsHuawei ? AppState().getHuaweiPushToken : (AppState().getDeviceToken ?? ""); + if (deviceToken.isNotEmpty) { + await Utils.saveStringFromPrefs("P_DEP_DEVICE_TOKEN", deviceToken); + } + } catch (e) { + if (kDebugMode) print("Error saving dependent session to prefs: $e"); + } + } + + Future _clearDependentPrefs() async { + await Utils.removeStringFromPrefs("P_DEP_IS_LOGGED_IN"); + await Utils.removeStringFromPrefs("P_DEP_NATIONAL_ID"); + await Utils.removeStringFromPrefs("P_DEP_BIRTH_DATE"); + await Utils.removeStringFromPrefs("P_DEP_TOKEN_ID"); + await Utils.removeStringFromPrefs("P_DEP_LOGIN_TOKEN_ID"); + await Utils.removeStringFromPrefs("P_DEP_AUTHENTICATION_TOKEN_ID"); + await Utils.removeStringFromPrefs("P_DEP_MOBILE_NUMBER"); + await Utils.removeStringFromPrefs("P_DEPENDENT_NAME"); + await Utils.removeStringFromPrefs("P_DEP_LOGIN_TYPE"); + } + void _performLogout() { ConfirmBottomSheet.show( context, @@ -351,11 +410,20 @@ class _DashboardScreenForDependetState extends State confirmText: LocaleKeys.yes.tr(), cancelText: LocaleKeys.no.tr(), isDestructive: true, - onConfirm: () { + onConfirm: () async { + if (ApiConsts.isDependetLogin) { + await _clearDependentPrefs(); + } ApiConsts.selectedMemberType = MemberType.employee; ApiConsts.ISDependetLogin = false; + AppState().setDependentName = null; + AppState().setDependentDob = null; + AppState().setDependentLoginType = null; + AppState().setWalaplusDepInfoModel = null; AppState().setPostParamsInitConfig(); - Navigator.pushNamedAndRemoveUntil(context, AppRoutes.login, (Route route) => false); + if (mounted) { + Navigator.pushNamedAndRemoveUntil(context, AppRoutes.login, (Route route) => false); + } }, ); } @@ -379,21 +447,23 @@ class _DashboardScreenForDependetState extends State children: [ Row( children: [ - InkWell( - borderRadius: BorderRadius.circular(10), - onTap: () { - if (Navigator.canPop(context)) { - Navigator.pop(context); - } else { - _performLogout(); - } - }, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 8), - child: Icon(isAr ? Icons.arrow_forward_ios_rounded : Icons.arrow_back_ios_new_rounded, size: 20, color: const Color(0xFF1E293B)), + if (!ApiConsts.isDependetLogin) ...[ + InkWell( + borderRadius: BorderRadius.circular(10), + onTap: () { + if (Navigator.canPop(context)) { + Navigator.pop(context); + } else { + _performLogout(); + } + }, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 8), + child: Icon(isAr ? Icons.arrow_forward_ios_rounded : Icons.arrow_back_ios_new_rounded, size: 20, color: const Color(0xFF1E293B)), + ), ), - ), - const SizedBox(width: 8) , + const SizedBox(width: 8), + ], SvgPicture.asset("assets/icons/mazaya_brand.svg", height: 48, fit: BoxFit.contain), ], ), @@ -427,6 +497,11 @@ class _DashboardScreenForDependetState extends State } }, ), + if (ApiConsts.isDependetLogin) IconButton( + icon: const Icon(Icons.logout_rounded, size: 24, color: Color(0xFF1E293B)), + tooltip: LocaleKeys.logout.tr(), + onPressed: _performLogout, + ), ], ), ], diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index 3715091..9299bfe 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -217,16 +217,56 @@ class _LoginScreenState extends State { } String devType = Platform.isAndroid ? "android" : "ios"; - if (ApiConsts.selectedMemberType.isDependent) { - dependentLoginInfo = await LoginApiClient().getMobileLoginInfoNEWDependent(devToken, devType, memberType: MemberType.dependent.value); - Utils.hideLoading(context); - if (dependentLoginInfo != null) { - _handleDependentLoginInfo(dependentLoginInfo!); + // if (ApiConsts.selectedMemberType.isDependent) { + // dependentLoginInfo = await LoginApiClient().getMobileLoginInfoNEWDependent(devToken, devType, memberType: MemberType.dependent.value); + // Utils.hideLoading(context); + // if (dependentLoginInfo != null) { + // _handleDependentLoginInfo(dependentLoginInfo!); + // } + // return; + // } + + loginInfo = await LoginApiClient().getMobileLoginInfoNEW(devToken, devType, memberType: ApiConsts.selectedMemberType.value); + + bool isEmpLast = AppState().isEmpLastLoginToDevice ?? true; + + if (!isEmpLast) { + // Dependent login flow + ApiConsts.selectedMemberType = MemberType.dependent; + ApiConsts.ISDependetLogin = true; + if (mounted) { + setState(() { + ApiConsts.selectedMemberType = MemberType.dependent; + ApiConsts.ISDependetLogin = true; + }); + } + + bool autoLoggedIn = await _tryDependentAutoLogin(); + if (autoLoggedIn) { + return; + }else { + dependentLoginInfo = await LoginApiClient().getMobileLoginInfoNEWDependent(devToken, devType, memberType: MemberType.dependent.value); + Utils.hideLoading(context); + if (dependentLoginInfo != null) { + _handleDependentLoginInfo(dependentLoginInfo!); + } + if (mounted) { + setState(() {}); + } + return; } - return; } - loginInfo = await LoginApiClient().getMobileLoginInfoNEW(devToken, devType, memberType: ApiConsts.selectedMemberType.value); + // Employee login flow + ApiConsts.selectedMemberType = MemberType.employee; + ApiConsts.ISDependetLogin = false; + if (mounted) { + setState(() { + ApiConsts.selectedMemberType = MemberType.employee; + ApiConsts.ISDependetLogin = false; + }); + } + if (loginInfo == null) { await checkPrefs(); _autoLogin = false; @@ -363,7 +403,7 @@ class _LoginScreenState extends State { AppState().setMohemmWifiPassword = mohemmWifiPassword; } Utils.hideLoading(context); - if (_autoLogin) { + if (_autoLogin && loginInfo != null) { Navigator.pushReplacementNamed(context, AppRoutes.verifyLastLogin, arguments: loginInfo); } else { Navigator.pushNamed(context, AppRoutes.verifyLogin, arguments: "$firebaseToken"); @@ -440,12 +480,15 @@ class _LoginScreenState extends State { void _switchToMode(MemberType type) async { if (ApiConsts.selectedMemberType != type) { + AppState().setIsEmpLastLoginToDevice = (type == MemberType.employee); setState(() { ApiConsts.selectedMemberType = type; ApiConsts.ISDependetLogin = (type == MemberType.dependent); }); if (type == MemberType.dependent) { await checkDependentPrefs(); + } else { + await checkPrefs(); } if (firebaseToken == null || firebaseToken!.isEmpty) { String saved = await Utils.getStringFromPrefs("P_DEP_DEVICE_TOKEN"); @@ -453,7 +496,6 @@ class _LoginScreenState extends State { firebaseToken = saved; } } - checkLoginInfo(); } } @@ -724,6 +766,152 @@ class _LoginScreenState extends State { ).displayDialog(context); } + bool _isAutoLoggingInDependent = false; + + Future _tryDependentAutoLogin() async { + if (_isAutoLoggingInDependent) return true; + _isAutoLoggingInDependent = true; + + try { + String isDepLoggedIn = await Utils.getStringFromPrefs("P_DEP_IS_LOGGED_IN"); + if (isDepLoggedIn != "true") { + return false; + } + String savedNid = await Utils.getStringFromPrefs("P_DEP_NATIONAL_ID"); + if (savedNid.isEmpty) { + return false; + } + String savedDob = await Utils.getStringFromPrefs("P_DEP_BIRTH_DATE"); + String savedToken = await Utils.getStringFromPrefs("P_DEP_TOKEN_ID"); + String savedLoginToken = await Utils.getStringFromPrefs("P_DEP_LOGIN_TOKEN_ID"); + String savedAuthToken = await Utils.getStringFromPrefs("P_DEP_AUTHENTICATION_TOKEN_ID"); + String savedMobile = await Utils.getStringFromPrefs("P_DEP_MOBILE_NUMBER"); + String savedName = await Utils.getStringFromPrefs("P_DEPENDENT_NAME"); + String savedLoginType = await Utils.getStringFromPrefs("P_DEP_LOGIN_TYPE"); + int loginType = int.tryParse(savedLoginType) ?? 1; + + String effectiveToken = savedAuthToken.isNotEmpty + ? savedAuthToken + : (savedToken.isNotEmpty ? savedToken : savedLoginToken); + + if (nationalId.text.isEmpty) { + nationalId.text = savedNid; + } + if (savedDob.isNotEmpty && dobController.text.isEmpty) { + DateTime? parsed = _parseBirthDate(savedDob); + if (parsed != null) { + selectedDob = parsed; + dobController.text = DateFormat('dd-MM-yyyy').format(parsed); + } else { + dobController.text = savedDob; + } + } + + if (AppState().postParamsObject == null) { + AppState().setPostParamsInitConfig(); + } + + ApiConsts.selectedMemberType = MemberType.dependent; + ApiConsts.ISDependetLogin = true; + + AppState().postParamsObject?.setTokenID = effectiveToken; + AppState().setAuthenticationTokenID = effectiveToken; + AppState().postParamsObject?.setLogInTokenID = savedLoginToken.isNotEmpty ? savedLoginToken : effectiveToken; + AppState().postParamsObject?.setUserName = savedNid; + AppState().postParamsObject?.setPUserName = savedNid; + if (savedMobile.isNotEmpty) { + AppState().postParamsObject?.setMobileNumer = savedMobile; + } + AppState().postParamsObject?.channel = 31; + AppState().postParamsObject?.versionID = 20; + AppState().setUserName = savedNid; + AppState().isAuthenticated = true; + AppState().setLogged = true; + if (savedName.isNotEmpty) { + AppState().setDependentName = savedName; + } + if (savedDob.isNotEmpty) { + AppState().setDependentDob = savedDob; + } + AppState().setDependentLoginType = loginType; + + if (savedDob.isNotEmpty) { + String devToken = AppState().getIsHuawei ? AppState().getHuaweiPushToken : (firebaseToken ?? ""); + if (devToken.isEmpty && !AppState().getIsHuawei) { + if (AppState().getDeviceToken != null && AppState().getDeviceToken!.isNotEmpty) { + devToken = AppState().getDeviceToken!; + } else { + devToken = await Utils.getStringFromPrefs("P_DEP_DEVICE_TOKEN"); + } + } + String devType = Platform.isAndroid ? "android" : "ios"; + + try { + GenericResponseModel? depLoginResponse = await LoginApiClient().memberLoginDependent( + nationalId: savedNid, + birthDate: savedDob, + deviceToken: devToken, + deviceType: devType, + context: context, + ); + + if (depLoginResponse?.errorMessage != null && depLoginResponse!.errorMessage!.isNotEmpty) { + if (Utils.isMazayaAccessRevoked(depLoginResponse.errorMessage)) { + if (mounted) { + Utils.hideLoading(context); + _navigateToMazayaAccessRevoked(savedName); + } + return true; + } + } + + if (depLoginResponse != null) { + String? authToken = (depLoginResponse.authenticationTokenID != null && depLoginResponse.authenticationTokenID!.trim().isNotEmpty) + ? depLoginResponse.authenticationTokenID!.trim() + : null; + String? logInTokenID = depLoginResponse.logInTokenID; + String? mobileNumber = depLoginResponse.getWalaplusDepInfoModel?.pEmpMobileNumber ?? savedMobile; + + if (authToken != null && authToken.isNotEmpty) { + if (mounted) { + Utils.hideLoading(context); + _completeDependentLogin( + depLoginResponse, + logInTokenID ?? authToken, + mobileNumber, + loginType: loginType, + navigateToDashboard: true, + ); + } + return true; + } + } + } catch (ex) { + if (Utils.isMazayaAccessRevoked(ex)) { + if (mounted) { + Utils.hideLoading(context); + _navigateToMazayaAccessRevoked(savedName); + } + return true; + } + if (kDebugMode) print("Error in memberLoginDependent auto-login: $ex"); + } + } + + if (effectiveToken.isNotEmpty && mounted) { + Utils.hideLoading(context); + Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboardScreenForDependet, (Route route) => false); + return true; + } + } catch (e) { + if (kDebugMode) print("Error in _tryDependentAutoLogin: $e"); + } finally { + _isAutoLoggingInDependent = false; + } + + return false; + } + void _completeDependentLogin(GenericResponseModel? checkOtpResponse, String logInTokenID, String mobileNumber, {int loginType = 1, bool navigateToDashboard = true}) { String effectiveToken = (checkOtpResponse?.authenticationTokenID != null && checkOtpResponse!.authenticationTokenID!.trim().isNotEmpty) @@ -732,11 +920,14 @@ class _LoginScreenState extends State { ? checkOtpResponse.tokenID! : ((checkOtpResponse?.logInTokenID != null && checkOtpResponse!.logInTokenID!.isNotEmpty) ? checkOtpResponse.logInTokenID! : logInTokenID)); + String effectiveNationalId = nationalId.text.trim().isNotEmpty ? nationalId.text.trim() : (AppState().getUserName ?? ""); + String effectiveDob = getFormattedBirthDate().isNotEmpty ? getFormattedBirthDate() : (AppState().dependentDob ?? ""); + AppState().postParamsObject?.setTokenID = effectiveToken; AppState().setAuthenticationTokenID = effectiveToken; AppState().postParamsObject?.setLogInTokenID = (checkOtpResponse?.logInTokenID != null && checkOtpResponse!.logInTokenID!.isNotEmpty) ? checkOtpResponse.logInTokenID! : logInTokenID; - AppState().postParamsObject?.setUserName = nationalId.text.trim(); - AppState().postParamsObject?.setPUserName = nationalId.text.trim(); + AppState().postParamsObject?.setUserName = effectiveNationalId; + AppState().postParamsObject?.setPUserName = effectiveNationalId; String resolvedMobile = mobileNumber.isNotEmpty ? mobileNumber : (checkOtpResponse?.getWalaplusDepInfoModel?.pEmpMobileNumber ?? ""); if (resolvedMobile.isNotEmpty) { @@ -746,7 +937,7 @@ class _LoginScreenState extends State { AppState().postParamsObject?.channel = 31; AppState().postParamsObject?.versionID = 20; - AppState().setUserName = nationalId.text.trim(); + AppState().setUserName = effectiveNationalId; AppState().isAuthenticated = true; AppState().setLogged = true; @@ -760,10 +951,11 @@ class _LoginScreenState extends State { } AppState().setDependentLoginType = loginType; - AppState().setDependentDob = getFormattedBirthDate(); + AppState().setDependentDob = effectiveDob; - Utils.saveStringFromPrefs("P_DEP_NATIONAL_ID", nationalId.text.trim()); - Utils.saveStringFromPrefs("P_DEP_BIRTH_DATE", getFormattedBirthDate()); + Utils.saveStringFromPrefs("P_DEP_IS_LOGGED_IN", "true"); + Utils.saveStringFromPrefs("P_DEP_NATIONAL_ID", effectiveNationalId); + Utils.saveStringFromPrefs("P_DEP_BIRTH_DATE", effectiveDob); Utils.saveStringFromPrefs("P_DEP_LOGIN_TOKEN_ID", AppState().postParamsObject?.logInTokenID ?? logInTokenID); Utils.saveStringFromPrefs("P_DEP_TOKEN_ID", effectiveToken); if (checkOtpResponse?.authenticationTokenID != null && checkOtpResponse!.authenticationTokenID!.trim().isNotEmpty) { @@ -773,7 +965,7 @@ class _LoginScreenState extends State { Utils.saveStringFromPrefs("P_DEP_LOGIN_TYPE", loginType.toString()); if (navigateToDashboard && ApiConsts.ISDependetLogin) { - Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboardScreenForDependet, (route) => false); + Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboardScreenForDependet, (Route route) => false); } } diff --git a/lib/ui/login/verify_last_login_screen.dart b/lib/ui/login/verify_last_login_screen.dart index f43ebc6..feca8b3 100644 --- a/lib/ui/login/verify_last_login_screen.dart +++ b/lib/ui/login/verify_last_login_screen.dart @@ -60,10 +60,9 @@ class _VerifyLastLoginScreenState extends State { @override Widget build(BuildContext context) { - if (ModalRoute.of(context)!.settings.arguments != null) { - mobileLoginInfoListModel ??= ModalRoute.of(context)!.settings.arguments as GetMobileLoginInfoListModel; - // String empName = AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr! : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!; - String empName = mobileLoginInfoListModel!.employeeName!; + Object? args = ModalRoute.of(context)?.settings.arguments; + if (args is GetMobileLoginInfoListModel) { + mobileLoginInfoListModel ??= args; } return Scaffold( @@ -124,7 +123,7 @@ class _VerifyLastLoginScreenState extends State { crossAxisAlignment: CrossAxisAlignment.center, children: [ LocaleKeys.lastLoginDetails.tr().toText16(), - DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn ?? DateTime.now().toString()), false).toText12(), + mobileLoginInfoListModel != null ? DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel?.editedOn ?? DateTime.now().toString()), false).toText12() : const SizedBox(), ], ), Row( @@ -132,9 +131,9 @@ class _VerifyLastLoginScreenState extends State { crossAxisAlignment: CrossAxisAlignment.center, children: [ LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color), - getVerificationType(mobileLoginInfoListModel!.loginType!).toText12(), + getVerificationType(mobileLoginInfoListModel?.loginType).toText12(), const Expanded(child: SizedBox()), - DateUtil.formatDateToTime(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!)).toText12(), + DateUtil.formatDateToTime(DateUtil.convertStringToDate(mobileLoginInfoListModel?.editedOn ?? DateTime.now().toString())).toText12(), ], ), ], @@ -206,7 +205,7 @@ class _VerifyLastLoginScreenState extends State { if (mounted) setState(() {}); } - String getVerificationType(int type) { + String getVerificationType(int? type) { if (type == 1) { return LocaleKeys.sms.tr(); } else if (type == 2) { @@ -278,7 +277,7 @@ class _VerifyLastLoginScreenState extends State { if (!authenticateWithFaceAndTouchID) { return; } else { - if (mobileLoginInfoListModel!.loginType == 3 || mobileLoginInfoListModel!.loginType == 4) { + if (mobileLoginInfoListModel?.loginType == 3 || mobileLoginInfoListModel?.loginType == 4) { // bool authenticateWithFaceAndTouchID = await loginWithFaceIDAndBiometrics(); // if (!authenticateWithFaceAndTouchID) { // return; @@ -396,7 +395,7 @@ class _VerifyLastLoginScreenState extends State { _flag, AppState().memberLoginList?.pMOBILENUMBER ?? "", AppState().getUserName!, - AppState().getIsHuawei ? AppState().getHuaweiPushToken : mobileLoginInfoListModel!.deviceToken!, + AppState().getIsHuawei ? AppState().getHuaweiPushToken : (mobileLoginInfoListModel?.deviceToken ?? AppState().getDeviceToken ?? ""), Platform.isAndroid ? "android" : "ios", memberType: MemberType.employee.value, );