Untitled
import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_login_facebook/flutter_login_facebook.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/data/model/social_register_post_model.dart'; import 'package:tamworth/feature/login/presentation/cubit/social_login_cubit.dart'; import 'package:tamworth/feature/login/presentation/cubit/social_register_cubit.dart'; //Reminder : facebookm login only works in production mode class FacebookSignInService { final FacebookLogin _fb = FacebookLogin(debug: true); Future<bool> signInWithFacebook(BuildContext context, {String page = "LoginPage"}) async { try { await signOutFromFacebook(); debugPrint("Starting Facebook login..."); final isLoggedIn = await _fb.isLoggedIn; debugPrint("Is already logged in: $isLoggedIn"); if (isLoggedIn) { await _fb.logOut(); debugPrint("Logged out existing session"); } final result = await _fb.logIn(permissions: [ FacebookPermission.publicProfile, FacebookPermission.email, ]); debugPrint("Login result status: ${result.status}"); debugPrint("Login result error: ${result.error}"); switch (result.status) { case FacebookLoginStatus.success: debugPrint("Facebook login succeeded"); final accessToken = await _fb.accessToken; if (accessToken != null && context.mounted) { await loginWithFacebookAccount(accessToken, context, page: page); return true; } return false; case FacebookLoginStatus.cancel: debugPrint("Facebook login cancelled by user"); return false; case FacebookLoginStatus.error: debugPrint("Facebook login failed with error: ${result.error}"); return false; default: debugPrint("Unexpected login status: ${result.status}"); return false; } } catch (error, stackTrace) { debugPrint("Error signing in with Facebook: $error"); debugPrint("Stack trace: $stackTrace"); return false; } } Future<void> loginWithFacebookAccount( FacebookAccessToken accessToken, BuildContext context, {String page = "LoginPage"}) async { final profile = await _fb.getUserProfile(); final email = await _fb.getUserEmail(); // Store user email and name if (email != null) { GetSetStorage().setEmail(email); } if (profile?.name != null) { GetSetStorage().setUsername(profile!.name!); } String token; String provider; if (accessToken.isLimitedLogin == true) { token = accessToken.authenticationToken ?? ""; provider = "facebook_limited"; } else { token = accessToken.token; provider = "facebook"; } if (context.mounted) { if (page == "LoginPage") { final SocialLoginPostModel socialLoginPostModel = SocialLoginPostModel( provider: provider, token: token, deviceToken: GetSetStorage().getFcmToken(), deviceType: Platform.isAndroid ? "Android" : "IOS", ); Logger().d(socialLoginPostModel.toMap()); context.read<SocialLoginCubit>().socialLogin(socialLoginPostModel); } else { SocialRegisterPostModel socialRegisterPostModel = SocialRegisterPostModel( provider: provider, token: token, deviceToken: GetSetStorage().getFcmToken(), deviceType: Platform.isAndroid ? "Android" : "IOS", ); Logger().d(socialRegisterPostModel.toMap()); context .read<SocialRegisterCubit>() .socialRegister(socialRegisterPostModel); } } } Future<void> signOutFromFacebook() async { if (await _fb.isLoggedIn) { await _fb.logOut(); } } }
Leave a Comment