fetchData method

Future<ProjectConfig?> fetchData()

Implementation

Future<ProjectConfig?> fetchData() async {
  _logger.logMessage('Fetching skin configuration for the provided apiKey.');
  var client = http.Client();
  try {
    final apiKey = await _cacheService.getApiKey();
    var response = await client
        .post(
          Uri.https(FskinConstants.baseUrl, 'fskin/skin'),
          headers: {'Content-Type': 'application/json'},
          body: jsonEncode({'apiKey': apiKey}),
        )
        .timeout(const Duration(seconds: 5));

    _logger.logMessage(
      'Received response with status code: ${response.statusCode}',
    );
    if (response.statusCode != 200) {
      _logger.logError(
        'Error fetching skin configuration: ${response.statusCode}',
        errorObject: response,
      );
      return await getCachedConfig();
    }

    var decodedResponse =
        jsonDecode(utf8.decode(response.bodyBytes)) as Map<String, dynamic>;
    var projectConfig = ProjectConfig.fromMap(decodedResponse);
    _cacheService.saveProjectConfig(decodedResponse);
    return projectConfig;
  } catch (e) {
    _logger.logError('Error fetching skin configuration: $e', errorObject: e);
    return await getCachedConfig();
  } finally {
    client.close();
  }
}