signInWithGitHub method

  1. @override
Future<Either<AuthFailure, Unit>> signInWithGitHub()
override

Sign in with GitHub return Future<Either<AuthFailure, Unit>>

Implementation

@override
Future<Either<AuthFailure, Unit>> signInWithGitHub() async {
  try {
    githubloginStreamController =
        StreamController<Either<AuthFailure, Unit>>();
    var provider = GithubAuthProvider()
      ..addScope('repo')
      ..setCustomParameters({'allow_signup': false});

    if (kIsWeb) {
      final result = await _firebaseAuth.signInWithPopup(provider);
      var credential = result.credential;
      await _firebaseAuth.signInWithCredential(credential!);
      return right(unit);
    } else {
      final url = '$githubAuthUrl'
          '$githubClientId&$githubScope';
      await _streamSubscription?.cancel();
      _streamSubscription = linkStream.listen((deeplink) async {
        final code = _getCodeFromGitHubLink(deeplink!);
        await _loginWithGitHub(code);
      });
      if (await canLaunch(url)) {
        print('Launchunbg url');
        await launch(url);
      } else {
        return left(const AuthFailure.serverError());
      }
      final failureOrSuccess =
          await githubloginStreamController!.stream.first;
      //await githubloginStreamController!.close();
      print(failureOrSuccess);
      return failureOrSuccess;
    }
  } catch (e) {
    print(e);
    return left(const AuthFailure.serverError());
  }
}