signInWithFacebook method

Future<bool> signInWithFacebook({
  1. List<String>? permissions,
  2. void listener(
    1. User? user
    )?,
  3. bool? silently,
})

Sign into Firebase by logging into Facebook

https://pub.dev/packages/flutter_facebook_login

Implementation

Future<bool> signInWithFacebook({
  List<String>? permissions,
  void Function(User? user)? listener,
  bool? silently,
}) async {
  //
  if (facebookAuth == null) {
    return false;
  }

  final fbAuth = facebookAuth!;

  silently ??= false;

  String? token;
  AccessToken? access;

  try {
    access = await fbAuth.accessToken;
  } catch (ex) {
    setError(ex);
  }
  token = access?.token ?? '';

  if (token.isEmpty && !silently) {
    //
    permissions ??= _permissions;

    if (permissions.isEmpty) {
      permissions = ['email'];
    }

    LoginResult result;

    try {
      result = await fbAuth.login(permissions: permissions);

      if (result.status == LoginStatus.success) {
        //
        token = result.accessToken?.token ?? '';
      } else if (result.status == LoginStatus.cancelled) {
        //
        token = '';
      } else if (result.status == LoginStatus.failed) {
        //
        token = '';
        setError(Exception(result.message));
      }
    } catch (ex) {
      token = '';

      setError(ex);
    }
  }

  var signIn = false;

  if (token.isNotEmpty) {
    // No need this is done in signInWithCredential
    _accessToken = token;
    final AuthCredential credential = FacebookAuthProvider.credential(token);
    signIn = await signInWithCredential(
        credential: credential, listener: listener);
  }
  return signIn;
}