170 lines
5.8 KiB
Dart
170 lines
5.8 KiB
Dart
import 'package:sefer_driver/constant/box_name.dart';
|
|
import 'package:sefer_driver/controller/auth/captin/login_captin_controller.dart';
|
|
import 'package:sefer_driver/main.dart';
|
|
import 'package:sefer_driver/views/auth/captin/cards/sms_signup.dart';
|
|
import 'package:sefer_driver/views/home/on_boarding_page.dart';
|
|
import 'package:sefer_driver/views/widgets/error_snakbar.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:google_sign_in/google_sign_in.dart';
|
|
|
|
import '../../views/auth/captin/ai_page.dart';
|
|
import '../functions/add_error.dart';
|
|
import '../functions/encrypt_decrypt.dart';
|
|
|
|
class GoogleSignInHelper {
|
|
static final GoogleSignIn _googleSignIn = GoogleSignIn(
|
|
scopes: [
|
|
'email',
|
|
'profile',
|
|
],
|
|
);
|
|
|
|
// Method to handle Google Sign-In
|
|
static Future<GoogleSignInAccount?> signIn() async {
|
|
try {
|
|
final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
|
|
if (googleUser != null) {
|
|
await _handleSignUp(googleUser);
|
|
if (box.read(BoxName.countryCode) == 'Egypt') {
|
|
Get.to(() => SmsSignupEgypt());
|
|
} else if (box.read(BoxName.countryCode) == 'Jordan') {
|
|
Get.to(() => AiPage());
|
|
}
|
|
}
|
|
return googleUser;
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// static Future<GoogleSignInAccount?> signInFromLogin() async {
|
|
// // try {
|
|
// // final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
|
|
// // if (googleUser != null) {
|
|
// // await _handleSignUp(googleUser);
|
|
// // // if (box.read(BoxName.countryCode) == 'Egypt') {
|
|
// // await Get.find<LoginDriverController>().loginUsingCredentials(
|
|
// // box.read(BoxName.driverID).toString(),
|
|
// // box.read(BoxName.emailDriver).toString(),
|
|
// // );
|
|
// // // } else if (box.read(BoxName.countryCode) == 'Jordan') {
|
|
// // // // Get.to(() => AiPage());
|
|
// // // }
|
|
// // }
|
|
// // return googleUser;
|
|
// // } catch (error) {
|
|
// // return null;
|
|
// // }
|
|
// try {
|
|
// final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
|
|
// if (googleUser != null) {
|
|
// // Handle sign-up logic
|
|
// await _handleSignUp(googleUser);
|
|
//
|
|
// // Get country code
|
|
// final String countryCode = box.read(BoxName.countryCode).toString();
|
|
// final String driverID = box.read(BoxName.driverID).toString();
|
|
// final String emailDriver = box.read(BoxName.emailDriver).toString();
|
|
//
|
|
// // Log-in using credentials based on country code
|
|
// if (countryCode == 'Egypt') {
|
|
// await Get.find<LoginDriverController>()
|
|
// .loginUsingCredentials(driverID, emailDriver);
|
|
// } else if (countryCode == 'Jordan') {
|
|
// // Add logic for Jordan if needed, e.g., navigate to AiPage
|
|
// // Get.to(() => AiPage());
|
|
// }
|
|
// }
|
|
// return googleUser;
|
|
// } catch (error) {
|
|
// Get.snackbar('Google Sign-In error', '$error',
|
|
// backgroundColor: AppColor.redColor);
|
|
// // Log error details
|
|
// return null;
|
|
// }
|
|
// }
|
|
Future<GoogleSignInAccount?> signInFromLogin() async {
|
|
try {
|
|
final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
|
|
|
|
if (googleUser != null) {
|
|
// Handle sign-up and store user information
|
|
await _handleSignUp(googleUser);
|
|
|
|
// Retrieve driverID and emailDriver with added validation
|
|
final driverID =
|
|
(box.read(BoxName.driverID)!.toString()) ?? 'Unknown ID';
|
|
final emailDriver =
|
|
(box.read(BoxName.emailDriver)!.toString()) ?? 'Unknown Email';
|
|
|
|
// Debug print statements
|
|
print('Driver ID: $driverID');
|
|
print('Driver Email: $emailDriver');
|
|
|
|
// Check if driverID is a valid numeric string
|
|
// if (driverID != 'Unknown ID' && int.tryParse(driverID) != null) {
|
|
await Get.find<LoginDriverController>()
|
|
.loginWithGoogleCredential(driverID, emailDriver);
|
|
// }
|
|
// else {
|
|
// print('Invalid driverID format: $driverID');
|
|
// Get.snackbar('Login Error', 'Invalid driver ID format.',
|
|
// backgroundColor: AppColor.redColor);
|
|
// }
|
|
}
|
|
|
|
return googleUser;
|
|
} catch (error) {
|
|
mySnackeBarError('$error');
|
|
addError(error.toString(), 'GoogleSignInAccount?> signInFromLogin()');
|
|
return null;
|
|
}
|
|
}
|
|
|
|
static Future<void> _handleSignUp(GoogleSignInAccount user) async {
|
|
// Store driver information
|
|
box.write(
|
|
BoxName.driverID,
|
|
encryptionHelper.encryptData(user.id) ??
|
|
'Unknown ID'); // Ensure there's a fallback value
|
|
box.write(BoxName.emailDriver,
|
|
encryptionHelper.encryptData(user.email) ?? 'Unknown Email');
|
|
}
|
|
|
|
// Method to handle Google Sign-Out
|
|
static Future<void> signOut() async {
|
|
try {
|
|
await _googleSignIn.signOut();
|
|
await _handleSignOut();
|
|
} catch (error) {}
|
|
}
|
|
|
|
static Future<void> _handleSignOut() async {
|
|
// Clear stored driver information
|
|
|
|
box.remove(BoxName.driverID);
|
|
box.remove(BoxName.emailDriver);
|
|
box.remove(BoxName.lang);
|
|
box.remove(BoxName.nameDriver);
|
|
box.remove(BoxName.passengerID);
|
|
box.remove(BoxName.phoneDriver);
|
|
box.remove(BoxName.tokenFCM);
|
|
box.remove(BoxName.tokens);
|
|
box.remove(BoxName.carPlate);
|
|
box.remove(BoxName.lastNameDriver);
|
|
box.remove(BoxName.agreeTerms);
|
|
box.remove(BoxName.tokenDriver);
|
|
box.remove(BoxName.countryCode);
|
|
box.remove(BoxName.accountIdStripeConnect);
|
|
box.remove(BoxName.phoneVerified);
|
|
Get.offAll(OnBoardingPage());
|
|
// Perform any additional sign-out tasks or API calls here
|
|
// For example, you can notify your server about the user sign-out
|
|
}
|
|
|
|
// Method to get the current signed-in user
|
|
static GoogleSignInAccount? getCurrentUser() {
|
|
return _googleSignIn.currentUser;
|
|
}
|
|
}
|