signInWithGitHub method
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());
}
}