getAccessToken method

  1. @override
Future<String> getAccessToken(
  1. String code
)
override

Implementation

@override
Future<String> getAccessToken(String code) async {
  if (_clientId == null || _clientSecret == null) {
    throw PlatformException(
      code: 'SETUP_REQUIRED',
      message: 'Please call setUp before getAccessToken',
    );
  }

  try {
    final tokenUrl = _getTokenUrl();

    final response = await html.HttpRequest.request(
      tokenUrl,
      method: 'POST',
      requestHeaders: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json',
      },
      sendData: _buildTokenRequestBody(code),
    );

    if (response.status == 200) {
      final responseData = json.decode(response.responseText!);
      final accessToken = responseData['access_token'];

      if (accessToken != null) {
        return accessToken;
      } else {
        throw PlatformException(
          code: 'NO_ACCESS_TOKEN',
          message: 'No access token in response',
        );
      }
    } else {
      throw PlatformException(
        code: 'HTTP_ERROR',
        message: 'HTTP ${response.status}: ${response.responseText}',
      );
    }
  } catch (e) {
    throw PlatformException(
      code: 'TOKEN_ERROR',
      message: e.toString(),
    );
  }
}