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));

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

  _isRetry = false;
}