Respon static method

Future<Map<String, dynamic>> Respon({
  1. required String urlHttp,
  2. required Map<String, dynamic> dataMap,
  3. bool isEncoded = false,
  4. bool isGet = false,
  5. Map<String, String> headers = const {'content-type' : 'application/json'},
})

Implementation

static Future<Map<String, dynamic>> Respon({
  required String urlHttp,
  required Map<String, dynamic> dataMap,
  bool isEncoded = false,
  bool isGet = false,
  Map<String, String> headers = const {'content-type': 'application/json'},
}) async {
  String body = "";
  Map<String, String> emptyStatus = {"status": ""};

  try {
    bool result = await InternetConnectionChecker().hasConnection;
    if (!result) return emptyStatus;

    YurLog(name: urlHttp, dataMap);
    final url = Uri.parse(urlHttp);
    const timeout = 30;
    onTimeout() => http.Response('', 500);

    if (isGet) {
      final response = await http
          .get(url, headers: headers)
          .timeout(timeout.seconds, onTimeout: onTimeout);

      body = response.body;
      var decoded = json.decode(utf8.decoder.convert(response.bodyBytes));
      return decoded;
    }

    if (isEncoded) {
      var responEncode = await http
          .post(url, headers: headers, body: jsonEncode(dataMap))
          .timeout(timeout.seconds, onTimeout: onTimeout);

      body = responEncode.body;
      var decoded = await json.decode(body);
      return decoded;
    }

    final serverRequest = http.MultipartRequest('POST', url);

    serverRequest.fields
      ..addAll(dataMap.cast<String, String>())
      ..addAll(headers);

    final response = await serverRequest
        .send()
        .timeout(timeout.seconds, onTimeout: serverRequest.send);

    body = await response.stream.bytesToString();

    bool empty = body.isEmpty || body == "[]" || body.contains("No data");
    if (empty) return emptyStatus;

    return await json.decode(body);
  } catch (e) {
    YurLog(name: urlHttp, "Error: $e | $body");
    return emptyStatus;
  }
}