signIn method

Implementation

Future<GitHubSignInResult> signIn(BuildContext context) async {
  var authorizedResult;

  if (kIsWeb) {
    authorizedResult = await launchUrl(
      Uri.parse(_generateAuthorizedUrl()),
      webOnlyWindowName: '_self',
    );
    // Push data into authorized result somehow (if applicable)
  } else {
    authorizedResult = await Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => GitHubSignInPage(
          url: _generateAuthorizedUrl(),
          redirectUrl: redirectUrl,
          userAgent: userAgent,
          clearCache: clearCache,
          title: title,
          centerTitle: centerTitle,
        ),
      ),
    );
  }

  if (authorizedResult == null ||
      authorizedResult.toString().contains('access_denied')) {
    return GitHubSignInResult(
      GitHubSignInResultStatus.cancelled,
      errorMessage: "Sign In attempt has been cancelled.",
    );
  } else if (authorizedResult is Exception) {
    return GitHubSignInResult(
      GitHubSignInResultStatus.failed,
      errorMessage: authorizedResult.toString(),
    );
  }

  // Exchange authorization code for access token
  return await _getAccessToken(authorizedResult);
}