signInWithFacebook method

  1. @override
Future<Response<Credential>> signInWithFacebook()
override

Implementation

@override
Future<Response<Credential>> signInWithFacebook() async {
  const response = Response<Credential>();
  try {
    final token = await facebookAuth.accessToken;
    LoginResult? result;

    result = token == null
        ? await facebookAuth.login(permissions: ['public_profile', 'email'])
        : null;

    final status = result?.status ?? LoginStatus.failed;

    if (token != null || status == LoginStatus.success) {
      final accessToken = result?.accessToken ?? token;
      if (accessToken != null) {
        final credential = FacebookAuthProvider.credential(accessToken.token);
        final fbData = await facebookAuth.getUserData();
        final data = Credential.fromMap(fbData);
        return response.copy(
          data: data.copyWith(
            accessToken: accessToken.token,
            credential: credential,
          ),
        );
      } else {
        return response.copy(error: 'Token not valid!');
      }
    } else {
      return response.copy(error: 'Token not valid!');
    }
  } on FirebaseAuthException catch (e) {
    return response.copy(error: e.message);
  }
}