networkRequestExec function

Future<ResponseModel> networkRequestExec({
  1. required String url,
  2. required HttpMethod method,
  3. required Map<String, dynamic> formData,
  4. required Map<String, String> headers,
})

Implementation

Future<ResponseModel> networkRequestExec({
  required String url,
  required HttpMethod method,
  required Map<String, dynamic> formData,
  required Map<String, String> headers,
}) async {
  try {
    Response response;
    switch (method) {
      case HttpMethod.get:
        response = await get(Uri.parse(url), headers: headers);
        break;
      case HttpMethod.post:
        response = await post(Uri.parse(url),
            body: jsonEncode(formData), headers: headers);
        break;
      case HttpMethod.put:
        response = await put(Uri.parse(url),
            body: jsonEncode(formData), headers: headers);
        break;
      case HttpMethod.delete:
        response = await delete(Uri.parse(url), headers: headers);
        break;
      case HttpMethod.patch:
        response = await patch(Uri.parse(url),
            body: jsonEncode(formData), headers: headers);
        break;
    }
    final responseHeaders = response.headers;
    final res = response.body.isNotEmpty
        ? jsonDecode(const Utf8Decoder().convert(response.bodyBytes))
        : {'message': 'Success'};
    final type = res.runtimeType.toString().toLowerCase().contains('list');
    if (response.statusCode < 400) {
      return ResponseModel(
        statusCode: response.statusCode,
        status: true,
        message: type
            ? 'Success'
            : (res as Map<String, dynamic>)['message'].toString(),
        data: res,
        bodyBytes: response.bodyBytes,
        headers: responseHeaders,
      );
    } else {
      return ResponseModel(
        statusCode: response.statusCode,
        status: false,
        message: type
            ? 'Success'
            : (res as Map<String, dynamic>)['message'].toString(),
        bodyBytes: response.bodyBytes,
        headers: responseHeaders,
        data: res,
      );
    }
  } on TimeoutException catch (e) {
    return ResponseModel(
        headers: {},
        message: e.message.toString(),
        status: false,
        statusCode: 408,
        bodyBytes: Uint8List(0));
  } on SocketException catch (e) {
    return ResponseModel(
        headers: {},
        message: e.message,
        status: false,
        statusCode: 408,
        bodyBytes: Uint8List(0));
  } on Exception {
    return ResponseModel(
        headers: {},
        message: 'Connection Problem! 😐',
        status: false,
        statusCode: 500,
        bodyBytes: Uint8List(0));
  }
}