toRequest method

Future<BaseRequest?> toRequest()

Convert IsolateHttpRequest to BaseRequest (The base class for HTTP requests).

Implementation

Future<BaseRequest?> toRequest() async {
  final _uri = uri;
  if (_uri != null) {
    // Form data
    if (files?.isNotEmpty == true || headers?.isMultipart == true) {
      MultipartRequest _request = MultipartRequest(method, _uri);
      if (headers?.isNotEmpty == true) {
        _request.headers.addAll(headers!);
      }

      if (body != null) {
        Map<String, dynamic> _fields = {};

        if (body is Map<String, dynamic>) {
          _fields = body as Map<String, dynamic>;
        } else {
          try {
            final _jsonData = jsonDecode(body.toString());
            if (_jsonData is Map<String, dynamic>) {
              _fields = _jsonData;
            }
          } catch (e) {
            // err
          }
        }

        _fields.forEach((key, value) {
          _request.fields[key] = value.toString();
        });
      }

      if (files != null) {
        for (var file in files!) {
          final _file = await file.toMultipartFile();
          if (_file != null) {
            _request.files.add(_file);
          }
        }
      }
      return _request;
    } else {
      // Other
      Request _request = Request(method, _uri);
      if (headers?.isNotEmpty == true) {
        _request.headers.addAll(headers!);
      }
      if (body != null) {
        String? _contentType = _request.headers.contentType;
        if (_contentType?.isNotEmpty != true) {
          // set request default content-type as json.
          _request.headers[ContentType.contentTypeHeaderKey] =
              ContentType.json;
        }

        if (_contentType?.contains(ContentType.x_www_form_urlencoded) ==
            true) {
          Map<String, String> _bodyFields = {};
          if (body is Map<String, dynamic>) {
            (body as Map<String, dynamic>).forEach((key, value) {
              _bodyFields[key] = value.toString();
            });
          } else {
            final _jsonData = jsonDecode(body.toString());
            if (_jsonData is Map<String, dynamic>) {
              _jsonData.forEach((key, value) {
                _bodyFields[key] = value.toString();
              });
            }
          }
          _request.bodyFields = _bodyFields;
        } else {
          if (_request.headers.isJson == true) {
            _request.body = jsonEncode(body);
          } else {
            _request.body = body.toString();
          }
        }
      }
      return _request;
    }
  }
  return null;
}