|
|
|
|
@ -217,16 +217,56 @@ class _LoginScreenState extends State<LoginScreen> {
|
|
|
|
|
}
|
|
|
|
|
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<LoginScreen> {
|
|
|
|
|
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<LoginScreen> {
|
|
|
|
|
|
|
|
|
|
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<LoginScreen> {
|
|
|
|
|
firebaseToken = saved;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
checkLoginInfo();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -724,6 +766,152 @@ class _LoginScreenState extends State<LoginScreen> {
|
|
|
|
|
).displayDialog(context);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool _isAutoLoggingInDependent = false;
|
|
|
|
|
|
|
|
|
|
Future<bool> _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<dynamic> 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<LoginScreen> {
|
|
|
|
|
? 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<LoginScreen> {
|
|
|
|
|
|
|
|
|
|
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<LoginScreen> {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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<LoginScreen> {
|
|
|
|
|
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<dynamic> route) => false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|