Untitled
unknown
plain_text
a year ago
12 kB
9
Indexable
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:get/get.dart';
import 'package:hazard_monitor/screens/auth_screens/sign_in_screen.dart';
import 'package:hazard_monitor/screens/home_screen/home_screen.dart';
import 'package:hazard_monitor/utils/pushy_notification_service/pushy_notification_service.dart';
import 'package:hazard_monitor/utils/sharedprf_service/sharedpref_keys.dart';
import 'package:hazard_monitor/utils/translation/language_keys.dart';
import 'package:http/http.dart' as http;
import 'package:image_picker/image_picker.dart';
import '../components/dialogs/r_snakbar.dart';
import '../models/user_model.dart';
import '../utils/api/api_endpoints.dart';
import '../utils/app_reg_exp.dart';
import '../utils/sharedprf_service/shared_preference.dart';
class AuthController extends GetxController {
var user = Rxn<UserModel>();
var token = "".obs;
var language = "".obs;
var isObsecure = true.obs,
isLoading = false.obs,
isEmailError = false.obs,
isPasswordError = false.obs;
var emailError = "".obs, passwordError = "".obs;
TextEditingController emailController = TextEditingController();
TextEditingController passController = TextEditingController();
var emailFocusNode = FocusNode().obs;
var passwordFocusNode = FocusNode().obs;
var selectedImage = Rxn<File>();
var uploadedImage = "".obs;
final picker = ImagePicker();
var isUploadingProfilePicture = false.obs;
var showUploadButton = false.obs;
// ----------- Forgot and Change Pass Vaiables
TextEditingController forgotEmailController = TextEditingController();
TextEditingController forgotPassController = TextEditingController();
TextEditingController forgotConPassController = TextEditingController();
var forgotEmailErrorMsg = "".obs,
forgotPasswordErrorMsg = "".obs,
forgotConPassErrorMsg = "".obs;
var isForgotEmailError = false.obs,
isForgotPasswordError = false.obs,
isForgotConPassError = false.obs,
isForgotPassObscure = true.obs,
isForgotConPassObscure = true.obs,
isForgotLoading = false.obs;
var forgotEmailFocusNode = FocusNode().obs,
forgotPasswordFocusNode = FocusNode().obs,
forgotConPasswordFocusNode = FocusNode().obs;
// ----------- Forgot and Change Pass Vaiables
@override
void onInit() {
loggedinUserCheck();
super.onInit();
}
loggedinUserCheck() async {
token.value = await AppSharedPrefs.getValue(
key: AppSharedprefKey.token, defaultValue: "")
.toString();
var userData = await AppSharedPrefs.getValue(
key: AppSharedprefKey.userData, defaultValue: "");
await checkAppLanguage();
print("token: ${token.value}");
print("userData: $userData");
if (userData != "") {
final extractedUserData = json.decode(userData.toString());
// print(extractedUserData);
user.value = UserModel.fromJson(extractedUserData);
print("Logged In");
PushyNotificationService().pushyRegister();
Get.offAll(HomeScreen());
} else {
print("Not Logged In");
Get.offAll(SignInScreen());
}
}
logOutUser() {
AppSharedPrefs.preferences!.clear();
Get.offAll(SignInScreen());
}
checkAppLanguage() async {
language.value = await AppSharedPrefs.getValue(
key: AppSharedprefKey.applLanguage, defaultValue: "")
.toString();
print("language: ${language.value}");
if (language.value != "") {
setAppLanguage(languageCode: language.value);
} else {
setAppLanguage(languageCode: "en");
}
}
setAppLanguage({required String languageCode}) {
Get.updateLocale(Locale(languageCode));
language.value = languageCode;
AppSharedPrefs.setValue(
key: AppSharedprefKey.applLanguage, value: languageCode);
}
makeValidatorFalse() {
Get.focusScope!.unfocus();
emailError = "".obs;
isEmailError = false.obs;
passwordError = "".obs;
isPasswordError = false.obs;
}
emailPasswordCheck() {
makeValidatorFalse();
String pattern = AppRegExp.emailPattern;
RegExp regExp = RegExp(pattern);
if (emailController.text.isEmpty) {
isEmailError = true.obs;
emailError = AppConstants.emailFieldIsEmpty.tr.obs;
Get.focusScope!.requestFocus(emailFocusNode.value);
} else if (!regExp.hasMatch(emailController.text)) {
isEmailError = true.obs;
emailError = AppConstants.invalidEmail.tr.obs;
Get.focusScope!.requestFocus(emailFocusNode.value);
} else if (passController.text.isEmpty) {
isPasswordError = true.obs;
passwordError = AppConstants.passwordFieldIsEmpty.tr.obs;
Get.focusScope!.requestFocus(passwordFocusNode.value);
} else {
/// Navigate
Get.focusScope!.requestFocus(FocusNode());
isLoading(true);
loginWithEmail();
// Navigator.push( context, SlideLeftRoute(page: const OtpVerificationScreen()));
}
}
Future<void> loginWithEmail() async {
var headers = {'Content-Type': 'application/json'};
try {
var url = Uri.parse(AppUrls.baseUrl + AppUrls.signin);
var body = {
'email': emailController.text.trim(),
'password': passController.text
};
print("login: $url, $body");
http.Response response =
await http.post(url, body: jsonEncode(body), headers: headers);
print(response.statusCode.toString());
print(response.body.toString());
isLoading(false);
if (response.statusCode == 200 || response.statusCode == 201) {
final json = jsonDecode(response.body);
print(json['user']);
user.value = UserModel.fromJson(json['user']);
token.value = json['access_token'];
AppSharedPrefs.setValue(
key: AppSharedprefKey.token, value: json['access_token']);
AppSharedPrefs.setValue(
key: AppSharedprefKey.userData, value: jsonEncode(json['user']));
emailController.clear();
passController.clear();
PushyNotificationService().pushyRegister();
// Get.offAll(HomeScreen());
checkLocationPermission(onPermissionGranted: (){
Get.offAll(HomeScreen());
});
} else if (response.statusCode == 401) {
rSnackbar(
title: AppConstants.error.tr,
msg: AppConstants.invaliEmailOrPassword.tr);
logOutUser();
} else if (response.statusCode == 422) {
rSnackbar(
title: AppConstants.error.tr,
msg: AppConstants.emailOrPasswordIsNotvalid.tr);
} else {
// throw jsonDecode(response.body)["Message"] ?? "Unknown Error Occured";
rSnackbar(
title: AppConstants.error.tr,
msg: AppConstants.somethinWentWrong.tr);
}
} catch (error) {
isLoading(false);
rSnackbar(
title: AppConstants.error.tr, msg: AppConstants.somethinWentWrong.tr);
throw error.toString();
// Get.back();
// showDialog(
// context: Get.context!,
// builder: (context) {
// return SimpleDialog(
// title: Text('Error'),
// contentPadding: EdgeInsets.all(20),
// children: [Text(error.toString())],
// );
// });
}
}
//----------------- image
Future selectProfileImages() async {
final pickedFile = await picker.pickImage(
source: ImageSource.gallery,
imageQuality: 100,
maxHeight: 1000,
maxWidth: 1000);
XFile? xfilePick = pickedFile;
if (xfilePick != null) {
selectedImage.value = File(xfilePick.path);
showUploadButton(true);
} else {
rSnackbar(
title: AppConstants.alert.tr, msg: AppConstants.nothingSelected.tr);
}
}
uploadImage() async {
// Future<Future<bool?>?> uploadImage() async {
isUploadingProfilePicture(true);
var headers = {
'Content-Type': 'application/json',
'Authorization': "Bearer ${token.value}",
};
// create multipart request
try {
var url = Uri.parse(AppUrls.baseUrl + AppUrls.uploadProfilePic);
print("image Upload: $url");
var request = http.MultipartRequest('POST', url);
request.headers.addAll(headers);
if (selectedImage.value != null) {
request.files.add(http.MultipartFile(
'file',
File(selectedImage.value!.path).readAsBytes().asStream(),
File(selectedImage.value!.path).lengthSync(),
filename: selectedImage.value!.path.split("/").last));
// send
var response = await request.send();
print(response.statusCode.toString());
// print(response.body.toString());
// listen for response
response.stream.transform(utf8.decoder).listen((value) {
print("picture: $value");
var responseImage = jsonDecode(value);
uploadedImage.value = responseImage["file"][0]["path"];
print("picture: ${uploadedImage.value}");
updateUserPic(); // updateUserPic
});
} else {
isUploadingProfilePicture(false);
rSnackbar(
title: AppConstants.alert.tr, msg: AppConstants.nothingSelected.tr);
}
} catch (e) {
isUploadingProfilePicture(false);
rSnackbar(
title: AppConstants.error.tr,
msg: AppConstants.uploadFailedSomethingWentWrong.tr);
}
}
Future<void> updateUserPic() async {
var headers = {
'Content-Type': 'application/json',
'Authorization': "Bearer ${token.value}",
};
try {
var url = Uri.parse(AppUrls.baseUrl + AppUrls.updateUser);
var body = {
'avatar': uploadedImage.value,
};
print("UpdateUserPic: $url, $body");
http.Response response =
await http.put(url, body: jsonEncode(body), headers: headers);
print(response.statusCode.toString());
print(response.body.toString());
if (response.statusCode == 200 || response.statusCode == 201) {
final json = jsonDecode(response.body);
print(json['user']);
user.value = UserModel.fromJson(json['user']);
AppSharedPrefs.setValue(
key: AppSharedprefKey.userData, value: jsonEncode(json['user']));
clearImageSetup();
} else if (response.statusCode == 401) {
isUploadingProfilePicture(false);
rSnackbar(
title: AppConstants.error.tr,
msg: AppConstants.authorizationError.tr);
logOutUser();
} else {
isUploadingProfilePicture(false);
rSnackbar(
title: AppConstants.error.tr,
msg: jsonDecode(response.body)["message"] ??
AppConstants.unknownErrorOccured.tr);
}
} catch (error) {
isUploadingProfilePicture(false);
rSnackbar(
title: AppConstants.error.tr, msg: AppConstants.somethinWentWrong.tr);
throw error.toString();
}
}
clearImageSetup() {
isUploadingProfilePicture(false);
showUploadButton(false);
selectedImage.value = null;
}
Future<void> checkLocationPermission({Function? onPermissionGranted}) async {
while (true) {
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.always ||
permission == LocationPermission.whileInUse) {
if (onPermissionGranted != null) {
onPermissionGranted(); // Call the passed function if provided
}
break;
} else {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied || permission == LocationPermission.deniedForever) {
rSnackbar(
title: AppConstants.error.tr,
msg: "Location permission is required to proceed.");
}
}
}
}
}Editor is loading...
Leave a Comment