login method

Future<String?> login(
  1. AuthInfo authInfo,
  2. BuildContext context
)

Implementation

Future<String?> login(AuthInfo authInfo, BuildContext context) async {
  if (PlatformGlobals.isTv) {
    DeviceCode deviceCode = DeviceCode();
    var token = await deviceCode.authenticateUser(
        authInfo, "offline_access", authInfo.deviceCodeUrl, context);

    Preferences.prefs?.setString("AccessToken", token!);

    return token;
  }

  var state = Preferences.prefs?.getString("OAuth_State");
  var codeVerifier = Preferences.prefs?.getString("OAuth_CodeVerifier");

  if (kIsWeb && codeVerifier == null) {
    codeVerifier = randomAlphaNumeric(80);
    Preferences.prefs?.setString("OAuth_CodeVerifier", codeVerifier);
  }

  AccessTokenResponse tknResponse = await client.getTokenWithAuthCodeFlow(
    clientId: authInfo.clientId,
    scopes: ["offline_access"],
    webAuthClient: baseWebAuth,
    state: state,
    codeVerifier: codeVerifier,
    webAuthOpts: {"useWebview": false},
  );

  var refreshToken = tknResponse.refreshToken;
  if (refreshToken != null) {
    Preferences.prefs?.setString("RefreshToken", refreshToken);
  }

  Preferences.prefs?.setString("AccessToken", tknResponse.accessToken!);

  return tknResponse.accessToken;
}