Current File : /home/tradevaly/public_html/fresh/lib/provider/auth_provider.dart |
import 'package:flutter/material.dart';
import 'package:flutter_grocery/data/model/response/base/api_response.dart';
import 'package:flutter_grocery/data/model/response/base/error_response.dart';
import 'package:flutter_grocery/data/model/response/response_model.dart';
import 'package:flutter_grocery/data/model/response/signup_model.dart';
import 'package:flutter_grocery/data/repository/auth_repo.dart';
import 'package:flutter_grocery/localization/language_constrants.dart';
import 'package:flutter_grocery/provider/splash_provider.dart';
import 'package:flutter_grocery/view/base/custom_snackbar.dart';
import 'package:provider/provider.dart';
import '../helper/api_checker.dart';
import '../view/screens/auth/login_screen.dart';
class AuthProvider with ChangeNotifier {
final AuthRepo authRepo;
AuthProvider({@required this.authRepo});
// for registration section
bool _isLoading = false;
bool get isLoading => _isLoading;
String _registrationErrorMessage = '';
String get registrationErrorMessage => _registrationErrorMessage;
updateRegistrationErrorMessage(String message) {
_registrationErrorMessage = message;
notifyListeners();
}
Future<ResponseModel> registration(SignUpModel signUpModel) async {
_isLoading = true;
_registrationErrorMessage = '';
notifyListeners();
ApiResponse apiResponse = await authRepo.registration(signUpModel);
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
Map map = apiResponse.response.data;
String token = map["token"];
authRepo.saveUserToken(token);
await authRepo.updateToken();
responseModel = ResponseModel(true, 'successful');
} else {
String errorMessage;
if (apiResponse.error is String) {
errorMessage = apiResponse.error.toString();
} else {
ErrorResponse errorResponse = apiResponse.error;
errorMessage = errorResponse.errors[0].message;
}
print(errorMessage);
_registrationErrorMessage = errorMessage;
responseModel = ResponseModel(false, errorMessage);
}
_isLoading = false;
notifyListeners();
return responseModel;
}
// for login section
String _loginErrorMessage = '';
String get loginErrorMessage => _loginErrorMessage;
Future<ResponseModel> login(String email, String password) async {
_isLoading = true;
_loginErrorMessage = '';
notifyListeners();
ApiResponse apiResponse = await authRepo.login(email: email, password: password);
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
Map map = apiResponse.response.data;
String token = map["token"];
authRepo.saveUserToken(token);
await authRepo.updateToken();
responseModel = ResponseModel(true, 'successful');
} else {
String errorMessage;
if (apiResponse.error is String) {
errorMessage = apiResponse.error.toString();
} else {
errorMessage = apiResponse.error.errors[0].message;
}
print(errorMessage);
_loginErrorMessage = errorMessage;
responseModel = ResponseModel(false, errorMessage);
}
_isLoading = false;
notifyListeners();
return responseModel;
}
Future deleteUser(BuildContext context) async {
_isLoading = true;
notifyListeners();
ApiResponse response = await authRepo.deleteUser();
_isLoading = false;
print('status code is : ${response.response.statusCode}');
if (response.response.statusCode == 200) {
Provider.of<SplashProvider>(context, listen: false).removeSharedData();
showCustomSnackBar(getTranslated('your_account_remove_successfully', context),context );
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (_) => LoginScreen()), (route) => false);
}else{
Navigator.of(context).pop();
ApiChecker.checkApi(context, response);
}
}
// for forgot password
bool _isForgotPasswordLoading = false;
bool get isForgotPasswordLoading => _isForgotPasswordLoading;
Future<ResponseModel> forgetPassword(String email) async {
_isForgotPasswordLoading = true;
notifyListeners();
ApiResponse apiResponse = await authRepo.forgetPassword(email);
_isForgotPasswordLoading = false;
notifyListeners();
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
responseModel = ResponseModel(true, apiResponse.response.data["message"]);
} else {
String errorMessage;
if (apiResponse.error is String) {
print(apiResponse.error.toString());
errorMessage = apiResponse.error.toString();
} else {
ErrorResponse errorResponse = apiResponse.error;
print(errorResponse.errors[0].message);
errorMessage = errorResponse.errors[0].message;
}
responseModel = ResponseModel(false, errorMessage);
}
return responseModel;
}
Future<ResponseModel> resetPassword(String mail, String resetToken, String password, String confirmPassword) async {
_isForgotPasswordLoading = true;
notifyListeners();
ApiResponse apiResponse = await authRepo.resetPassword(mail, resetToken, password, confirmPassword);
_isForgotPasswordLoading = false;
notifyListeners();
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
responseModel = ResponseModel(true, apiResponse.response.data["message"]);
} else {
String errorMessage;
if (apiResponse.error is String) {
print(apiResponse.error.toString());
errorMessage = apiResponse.error.toString();
} else {
ErrorResponse errorResponse = apiResponse.error;
print(errorResponse.errors[0].message);
errorMessage = errorResponse.errors[0].message;
}
responseModel = ResponseModel(false, errorMessage);
}
return responseModel;
}
Future<void> updateToken() async {
ApiResponse apiResponse = await authRepo.updateToken();
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
} else {
String errorMessage;
if (apiResponse.error is String) {
errorMessage = apiResponse.error.toString();
} else {
errorMessage = apiResponse.error.errors[0].message;
}
print(errorMessage);
}
}
// for phone verification
bool _isPhoneNumberVerificationButtonLoading = false;
bool get isPhoneNumberVerificationButtonLoading => _isPhoneNumberVerificationButtonLoading;
String _verificationMsg = '';
String get verificationMessage => _verificationMsg;
String _email = '';
String get email => _email;
updateEmail(String email) {
_email = email;
notifyListeners();
}
Future<ResponseModel> checkEmail(String email) async {
_isPhoneNumberVerificationButtonLoading = true;
_verificationMsg = '';
notifyListeners();
ApiResponse apiResponse = await authRepo.checkEmail(email);
_isPhoneNumberVerificationButtonLoading = false;
notifyListeners();
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
responseModel = ResponseModel(true, apiResponse.response.data["token"]);
} else {
String errorMessage;
if (apiResponse.error is String) {
print(apiResponse.error.toString());
errorMessage = apiResponse.error.toString();
} else {
ErrorResponse errorResponse = apiResponse.error;
print(errorResponse.errors[0].message);
errorMessage = errorResponse.errors[0].message;
}
responseModel = ResponseModel(false, errorMessage);
_verificationMsg = errorMessage;
}
notifyListeners();
return responseModel;
}
Future<ResponseModel> verifyToken(String email) async {
_isPhoneNumberVerificationButtonLoading = true;
notifyListeners();
ApiResponse apiResponse = await authRepo.verifyToken(email, _verificationCode);
_isPhoneNumberVerificationButtonLoading = false;
notifyListeners();
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
responseModel = ResponseModel(true, apiResponse.response.data["message"]);
} else {
String errorMessage;
if (apiResponse.error is String) {
print(apiResponse.error.toString());
errorMessage = apiResponse.error.toString();
} else {
ErrorResponse errorResponse = apiResponse.error;
print(errorResponse.errors[0].message);
errorMessage = errorResponse.errors[0].message;
}
responseModel = ResponseModel(false, errorMessage);
}
return responseModel;
}
Future<ResponseModel> verifyEmail(String email) async {
_isPhoneNumberVerificationButtonLoading = true;
_verificationMsg = '';
notifyListeners();
ApiResponse apiResponse = await authRepo.verifyEmail(email, _verificationCode);
_isPhoneNumberVerificationButtonLoading = false;
notifyListeners();
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
responseModel = ResponseModel(true, apiResponse.response.data["message"]);
} else {
String errorMessage;
if (apiResponse.error is String) {
print(apiResponse.error.toString());
errorMessage = apiResponse.error.toString();
} else {
ErrorResponse errorResponse = apiResponse.error;
print(errorResponse.errors[0].message);
errorMessage = errorResponse.errors[0].message;
}
responseModel = ResponseModel(false, errorMessage);
_verificationMsg = errorMessage;
}
notifyListeners();
return responseModel;
}
//phone
Future<ResponseModel> checkPhone(String phone) async {
_isPhoneNumberVerificationButtonLoading = true;
_verificationMsg = '';
notifyListeners();
ApiResponse apiResponse = await authRepo.checkPhone(phone);
_isPhoneNumberVerificationButtonLoading = false;
notifyListeners();
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
responseModel = ResponseModel(true, apiResponse.response.data["token"]);
} else {
String errorMessage;
if (apiResponse.error is String) {
print(apiResponse.error.toString());
errorMessage = apiResponse.error.toString();
} else {
ErrorResponse errorResponse = apiResponse.error;
print(errorResponse.errors[0].message);
errorMessage = errorResponse.errors[0].message;
}
responseModel = ResponseModel(false, errorMessage);
_verificationMsg = errorMessage;
}
notifyListeners();
return responseModel;
}
Future<ResponseModel> verifyPhone(String phone) async {
_isPhoneNumberVerificationButtonLoading = true;
_verificationMsg = '';
notifyListeners();
ApiResponse apiResponse = await authRepo.verifyPhone(phone, _verificationCode);
_isPhoneNumberVerificationButtonLoading = false;
notifyListeners();
ResponseModel responseModel;
if (apiResponse.response != null && apiResponse.response.statusCode == 200) {
responseModel = ResponseModel(true, apiResponse.response.data["message"]);
} else {
String errorMessage;
if (apiResponse.error is String) {
print(apiResponse.error.toString());
errorMessage = apiResponse.error.toString();
} else {
ErrorResponse errorResponse = apiResponse.error;
print(errorResponse.errors[0].message);
errorMessage = errorResponse.errors[0].message;
}
responseModel = ResponseModel(false, errorMessage);
_verificationMsg = errorMessage;
}
notifyListeners();
return responseModel;
}
// for verification Code
String _verificationCode = '';
String get verificationCode => _verificationCode;
bool _isEnableVerificationCode = false;
bool get isEnableVerificationCode => _isEnableVerificationCode;
updateVerificationCode(String query) {
if (query.length == 4) {
_isEnableVerificationCode = true;
} else {
_isEnableVerificationCode = false;
}
_verificationCode = query;
notifyListeners();
}
// for Remember Me Section
bool _isActiveRememberMe = false;
bool get isActiveRememberMe => _isActiveRememberMe;
toggleRememberMe() {
_isActiveRememberMe = !_isActiveRememberMe;
notifyListeners();
}
clearRememberMe(){
_isActiveRememberMe = false;
notifyListeners();
}
bool isLoggedIn() {
return authRepo.isLoggedIn();
}
Future<bool> clearSharedData() async {
return await authRepo.clearSharedData();
}
void saveUserNumberAndPassword(String number, String password) async{
await authRepo.saveUserNumberAndPassword(number, password);
}
String getUserNumber() {
return authRepo.getUserNumber() ?? "";
}
String getUserPassword() {
return authRepo.getUserPassword() ?? "";
}
Future<bool> clearUserNumberAndPassword() async {
return authRepo.clearUserNumberAndPassword();
}
String getUserToken() {
return authRepo.getUserToken();
}
}