Untitled
unknown
plain_text
a year ago
2.7 kB
6
Indexable
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:logger/logger.dart';
import 'package:tamworth/core/util/get_storage.dart';
import 'package:tamworth/feature/login/data/model/social_login_post_model.dart';
import 'package:tamworth/feature/login/presentation/cubit/social_login_cubit.dart';
final GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: ['email'],
);
class GoogleSignInService {
GoogleSignInAccount? _currentUser;
GoogleSignInAccount? get currentUser => _currentUser;
// Method to initialize Google Sign-In
Future<void> initializeGoogleSignIn(
{required Function(GoogleSignInAccount?) onUserChanged,
required BuildContext context}) async {
_googleSignIn.onCurrentUserChanged
.listen((GoogleSignInAccount? account) async {
if (!kIsWeb && account != null) {
bool isAuthorized = await _googleSignIn.canAccessScopes(['email']);
if (!isAuthorized) {
await _googleSignIn.disconnect();
}
}
_currentUser = account;
onUserChanged(account);
});
}
Future<bool> signInWithGoogle(BuildContext context) async {
try {
await signOutFromGoogle();
final account = await _googleSignIn.signIn();
if (account != null && context.mounted) {
await loginWithGoogleAccount(account, context);
return true;
}
return false;
} catch (error) {
debugPrint("Error signing in with Google: $error");
return false;
}
}
Future<void> signOutFromGoogle() async {
if (_currentUser != null) {
await _googleSignIn.disconnect();
}
}
Future<void> loginWithGoogleAccount(
GoogleSignInAccount account, BuildContext context) async {
GetSetStorage().setEmail(account.email);
GetSetStorage().setUsername(account.displayName ?? '');
final String? idToken = (await account.authentication).accessToken;
if (idToken != null) {
final SocialLoginPostModel socialLoginPostModel = SocialLoginPostModel(
provider: "google",
token: idToken, // Use idToken instead of serverAuthCode
deviceToken: GetSetStorage().getFcmToken(),
deviceType: Platform.isAndroid
? "Android"
: Platform.isIOS
? "IOS"
: "",
);
Logger().d(socialLoginPostModel.toMap());
if (context.mounted) {
context.read<SocialLoginCubit>().socialLogin(socialLoginPostModel);
_googleSignIn.signOut();
}
} else {
debugPrint('Error: idToken is null');
}
}
}
Editor is loading...
Leave a Comment