signInWithFacebook method

Future<User?> signInWithFacebook({
  1. dynamic onError(
    1. String
    )?,
  2. dynamic onSignInSuccessful(
    1. User
    )?,
})

Implementation

Future<User?> signInWithFacebook({
  Function(String)? onError,
  Function(User)? onSignInSuccessful,
}) async {
  if (Foundation.kIsWeb) {
    //The WebFlow
    FacebookAuthProvider facebookProvider = FacebookAuthProvider();
    facebookProvider.addScope('email');
    facebookProvider.setCustomParameters({
      'display': 'popup',
    });

    // Once signed in, return the UserCredential
    User? user;
    try {
      UserCredential userCred =
          await FirebaseAuth.instance.signInWithPopup(facebookProvider);
      user = userCred.user;
    } catch (e) {
      if (onError != null) onError(e.toString());
      print("FBError: $e");
    }
    if (user != null) {
      if (onSignInSuccessful != null) onSignInSuccessful(user);
      //======================HOT RESTART BUG BYPASS============================
      await HotRestartBypassMechanism.saveLoginState(true);
      //======================HOT RESTART BUG BYPASS============================
    }
    return user;
  } else {
    //The NativeFlow
    User? user;
    try {
      final LoginResult result = await FacebookAuth.instance.login();
      final facebookAuthCredential =
          FacebookAuthProvider.credential(result.accessToken!.token);
      UserCredential userCred = await FirebaseAuth.instance
          .signInWithCredential(facebookAuthCredential);
      user = userCred.user;

      if (user != null) {
        if (onSignInSuccessful != null) onSignInSuccessful(user);
      }
    } catch (e) {
      if (onError != null) onError(e.toString());
      print("FBError: $e");
    }

    return user;
  }
}