Untitled
unknown
plain_text
a year ago
7.5 kB
9
Indexable
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:paywell_apps/data/dataSource/repository/api_response.dart';
import 'package:paywell_apps/models/licence/ess_licence_model.dart';
import 'package:paywell_apps/models/login/get_login/get_login_data_model.dart';
import 'package:paywell_apps/models/login/get_login/get_login_model.dart';
import 'package:paywell_apps/models/login/get_login/login_data_model.dart';
import 'package:paywell_apps/models/login/get_login/validate_login_model.dart';
import 'package:paywell_apps/models/response/base/response_model.dart';
import 'package:paywell_apps/utils/app_prefrence.dart';
import 'package:paywell_apps/utils/app_routes.dart';
import 'package:paywell_apps/widgets/common_widgets/toast.dart';
import '../data/repository/auth_repo.dart';
class AuthProvider with ChangeNotifier {
final AuthRepo authRepo;
AuthProvider({required this.authRepo});
bool _isLoading = false;
bool get isLoading => _isLoading;
// Variables
bool _passwordVisible = false;
bool get passwordVisible => _passwordVisible;
bool _isClickable = true;
final _formKey = GlobalKey<FormState>();
GlobalKey<FormState> get formKey => _formKey;
///Input controller
TextEditingController clientCodeController = TextEditingController();
TextEditingController usernameController = TextEditingController();
TextEditingController passwordController = TextEditingController();
GetLoginModel? _loginModel;
//Functions
Future<void> onTapLogin(context) async {
if (_isClickable) {
if (_formKey.currentState?.validate() ?? false) {
_isClickable = false;
await login(clientCodeController.text, context);
}
}
}
void onTextObscure() {
_passwordVisible = !_passwordVisible;
notifyListeners();
}
Future<ResponseModel> login(clientCode, context) async {
ResponseModel responseModel;
_isLoading = true;
notifyListeners();
try {
ApiResponse apiRegisterResponse = await authRepo.login(clientCode);
if (apiRegisterResponse.response != null &&
apiRegisterResponse.response!.statusCode == 200) {
if (apiRegisterResponse.response?.data["status"]
.toString()
.contains("Success") ??
false) {
// Parse json data in Model class
_loginModel =
GetLoginModel.fromJson(apiRegisterResponse.response?.data);
await authRepo.setUserToken(_loginModel?.token ?? "");
var d = json.decode(_loginModel?.result ?? "");
var connectionString =
ConnectionString.fromJson(d["ConnectionString"][0]);
await authRepo.setValue(
AppLocal.customerId, connectionString.customerid ?? "");
await authRepo.setValue(
AppLocal.clientCode, clientCodeController.text);
// Validate Login
var validateLoginModel = (await validateLogin());
var licenseResp = await essLicenseFun(context);
if (!licenseResp.isSuccess) {
throw Error.safeToString(licenseResp.message);
}
if (validateLoginModel.isSuccess) {
var res = jsonDecode(validateLoginModel.data.data ?? "");
Login? login;
if (res["Login"] == null) {
throw Error.safeToString(validateLoginModel.data.message ?? "");
}
login = Login.fromJson(res["Login"][0]);
await authRepo.setValue(AppLocal.companyCode, login.companyCode);
await authRepo.setValue(AppLocal.empCode, login.empCode);
await authRepo.setValue(AppLocal.userId, login.userId);
await authRepo.setValue(AppLocal.applicableForEPunch, login.applicableForEPunch);
if (login.mobileAppAllowed == 1) {
FToast().toast(context, validateLoginModel.data.message);
Navigator.pushNamedAndRemoveUntil(
context, AppRoute.leaveApplication, (route) => false);
responseModel =
ResponseModel(true, 'Login Successful', _loginModel);
} else {
throw Error.safeToString("you are not eligible for mobile app");
}
} else {
throw Error.safeToString(validateLoginModel.message);
}
} else {
responseModel = ResponseModel(false, 'Login failed', null);
}
} else {
responseModel =
ResponseModel(false, apiRegisterResponse.error ?? "", null);
}
} catch (e) {
FToast().toast(
context, e.toString().replaceAll('\\""', "").replaceAll('"\\"', ""));
responseModel = ResponseModel(false, 'Login Failed', null);
}
_isLoading = false;
_isClickable = true;
notifyListeners();
return responseModel;
}
Future<ResponseModel> validateLogin() async {
ResponseModel responseModel;
notifyListeners();
try {
ApiResponse apiRegisterResponse = await authRepo.validateLogin({
"username": usernameController.text,
"password": passwordController.text,
});
if (apiRegisterResponse.response!.statusCode == 200) {
if (apiRegisterResponse.response?.data["status"] == "Success") {
responseModel = ResponseModel(
true,
'Validate Successful',
ValidateLoginModel.fromJson(
apiRegisterResponse.response?.data ?? {}));
} else {
throw Error.safeToString("Validation Failed");
}
} else {
throw Error.safeToString("Validation Failed");
}
} catch (e) {
responseModel = ResponseModel(false, 'Validation Failed', null);
}
notifyListeners();
return responseModel;
}
Future<ResponseModel> essLicenseFun(context) async {
ResponseModel responseModel;
notifyListeners();
try {
ApiResponse apiRegisterResponse = await authRepo.essLicenseFun({
"username": usernameController.text,
"password": passwordController.text,
});
if (apiRegisterResponse.response!.statusCode == 200) {
if (apiRegisterResponse.response?.data["statusCode"] == "1") {
responseModel = ResponseModel(true, '',
EssLicenseModel.fromJson(apiRegisterResponse.response?.data));
} else {
throw Error.safeToString(
apiRegisterResponse.response?.data['message']);
}
} else {
throw Error.safeToString("License Failed");
}
} catch (e) {
print("Error -> $e");
responseModel = ResponseModel(false, e.toString().trim(), null);
}
notifyListeners();
return responseModel;
}
Future<ResponseModel> logout() async {
ResponseModel responseModel;
_isLoading = true;
try {
responseModel = ResponseModel(true, "Logout", null);
await clearSharedData();
} on Exception {
responseModel = ResponseModel(false, "Logout", null);
}
_isLoading = false;
notifyListeners();
return responseModel;
}
bool isLoggedIn() {
return authRepo.isLoggedIn();
}
Future<bool> clearSharedData() async {
return await authRepo.clearSharedData();
}
String getUserToken() {
return authRepo.getUserToken();
}
void clear() {
// Clear Provider
notifyListeners();
}
}
Editor is loading...
Leave a Comment