85 lines
3.1 KiB
Dart
85 lines
3.1 KiB
Dart
import 'package:get/get.dart';
|
|
import 'package:google_sign_in/google_sign_in.dart';
|
|
import 'package:firebase_auth/firebase_auth.dart';
|
|
import 'package:logger/logger.dart';
|
|
|
|
String? userName;
|
|
String? mobileNumber;
|
|
String? emailAddress;
|
|
String? firebaseidTokenGoogleSignin;
|
|
String? packageidTokenGoogleSignin;
|
|
var logger = Logger(
|
|
printer: PrettyPrinter(
|
|
// methodCount: 2, // Number of method calls to be displayed
|
|
// errorMethodCount: 8, // Number of method calls if stacktrace is provided
|
|
// lineLength: 120, // Width of the output
|
|
colors: true, // Colorful log messages
|
|
// printEmojis: true, // Print an emoji for each log message
|
|
// printTime: false // Should each log print contain a timestamp
|
|
),
|
|
);
|
|
|
|
class GoogleAuthService extends GetxController {
|
|
final GoogleSignIn _googleSignIn = GoogleSignIn(scopes: ['email']);
|
|
Rx<User?> user = Rx<User?>(FirebaseAuth.instance.currentUser);
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
FirebaseAuth.instance.authStateChanges().listen((User? newUser) {
|
|
user.value = newUser;
|
|
});
|
|
}
|
|
|
|
Future<String?> handleGoogleSignIn() async {
|
|
try {
|
|
// Sign out the user if they are already signed in
|
|
await _googleSignIn.signOut();
|
|
|
|
// This will show the Google Sign-In popup and allow the user to select an account.
|
|
final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
|
|
|
|
if (googleUser == null) {
|
|
return 'Google Sign-In canceled';
|
|
}
|
|
|
|
// // If the user signed in successfully, we can get their user information.
|
|
final GoogleSignInAuthentication googleAuth =
|
|
await googleUser.authentication;
|
|
final String? accessToken = googleAuth.accessToken;
|
|
packageidTokenGoogleSignin = googleAuth.accessToken;
|
|
final String? idToken = googleAuth.idToken;
|
|
logger.d(packageidTokenGoogleSignin);
|
|
//new method
|
|
|
|
// Sign in with Google credentials using Firebase Authentication.
|
|
final AuthCredential credential = GoogleAuthProvider.credential(
|
|
accessToken: accessToken,
|
|
idToken: idToken,
|
|
);
|
|
|
|
// Use Firebase Authentication to sign in with the provided credential.
|
|
final UserCredential authResult =
|
|
await FirebaseAuth.instance.signInWithCredential(credential);
|
|
|
|
// Firebase user information is available in authResult.user.
|
|
final User? firebaseUser = authResult.user;
|
|
|
|
print("Firebase user ID: ${firebaseUser?.uid}");
|
|
print("Firebase user email: ${firebaseUser?.email}");
|
|
print("Firebase user display name: ${firebaseUser?.displayName}");
|
|
print("Firebase user metadata: ${firebaseUser?.metadata}");
|
|
print("Firebase user number: ${firebaseUser?.phoneNumber}");
|
|
userName = firebaseUser?.displayName;
|
|
mobileNumber = firebaseUser?.phoneNumber;
|
|
emailAddress = firebaseUser?.email;
|
|
firebaseidTokenGoogleSignin = firebaseUser?.uid;
|
|
return packageidTokenGoogleSignin;
|
|
} catch (error) {
|
|
// Handle any errors that occurred during the sign-in process.
|
|
print('Error during Google Sign-In: $error');
|
|
return null;
|
|
}
|
|
}
|
|
}
|