apiRequest function

Future apiRequest(
  1. String method,
  2. String apiUrl,
  3. dynamic body, [
  4. bool isFormData = false,
])

Implementation

Future apiRequest(
  String method,
  String apiUrl,
  dynamic body, [
  bool isFormData = false,
]) async {
  final Uri url = Uri.parse('$apiUrl');

  final Map<String, String> defaultHeaders = {
    "Authorization": "$claimsToken",
    if (isFormData) "Content-Type": "application/json",
  };
  final Map<String, String> combinedHeaders = {
    ...defaultHeaders,
  };

  try {
    http.Response response;

    switch (method.toUpperCase()) {
      case 'GET':
        response = await http.get(url, headers: combinedHeaders);
        break;
      case 'POST':
        if (isFormData == true) {
          response = await http.post(url,
              headers: combinedHeaders, body: jsonEncode(body));
        } else {
          response = await http.post(url, headers: combinedHeaders, body: body);
        }
        break;
      default:
        throw Exception('Unsupported HTTP method: $method');
    }

    final int statusCode = response.statusCode;
    var decodedResponse = json.decode(response.body);

    if (statusCode == 200) {
      if (response.headers.containsKey('Authorization')) {
        String? newToken = response.headers['Authorization'];
        SharedPreferences _prefs = await SharedPreferences.getInstance();
        _prefs.setString('claimsToken', newToken.toString());
        claimsToken = newToken.toString();
        claimsToken = await _prefs.getString('claimsToken');
      }

      return decodedResponse;
    } else if (statusCode == 401) {
    } else {
      throw Exception(
          'Error: ${response.statusCode} - ${decodedResponse['message'] ?? 'Unknown error'}');
    }
  } catch (err, stackTrace) {
    print("Error occurred: $stackTrace");
  }
}