signInWithFacebook method

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

Implementation

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

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

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

    if (token != null || status == IFacebookLoginStatus.success) {
      final accessToken = result?.accessToken ?? token;
      if (accessToken != null) {
        final credential = FacebookAuthProvider.credential(accessToken.token);
        final fbData = await facebookAuth.getUserData();
        return response.withData(Credential.fromMap(fbData).copy(
          accessToken: accessToken.token,
          credential: credential,
        ));
      } else {
        return response.withException(
          'Token not valid!',
          status: Status.error,
        );
      }
    } else {
      return response.withException('Token not valid!', status: Status.error);
    }
  } catch (_) {
    return response.withException(_.toString(), status: Status.failure);
  }
}