get method

Future<void> get(
  1. QueryParameters queryParameters, [
  2. Duration? timeout
])

Get function invoked on HTTP requests

Implementation

Future<void> get(QueryParameters queryParameters, [Duration? timeout]) async {
  final uri = Uri.https(_baseUri, '/v1/vardata', queryParameters.toJson());

  final request =
      httpClient.get(uri, headers: {'Authorization': 'Api-Key $_apiKey'});

  if (timeout != null) {
    request.timeout(
      timeout,
      onTimeout: () => throw TimeoutException('Request timed out!'),
    );
  }

  final response = await request;

  if (response.statusCode != 200) {
    String data = response.body;

    if (!_isRetry && _shouldRetry) {
      // If the server did not return a 200 OK response,
      // then throw an exception.
      throw Exception({
        'message': 'Failed to fetch through SDK!',
        'status': response.statusCode,
        'trace': data
      });
    }

    _isRetry = true;
    get(queryParameters, timeout);
  }

  Map<String, dynamic> data =
      jsonDecode(const Utf8Decoder().convert(response.bodyBytes));

  data.forEach((key, value) {
    fetchResult[key] = ExperimentFetchItem.fromMap(value);
  });

  _isRetry = false;
}