Untitled
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'); } } }
Leave a Comment