import 'dart:io'; import 'dart:convert'; import 'package:freezed_annotation/freezed_annotation.dart'; import '../utils/utils.dart' show rowsToFormDataMapList, rowsToMap, getEnabledRows; import '../consts.dart'; import 'models.dart'; part 'http_request_model.freezed.dart'; part 'http_request_model.g.dart'; @freezed class HttpRequestModel with _$HttpRequestModel { const HttpRequestModel._(); @JsonSerializable(explicitToJson: true) const factory HttpRequestModel({ @Default(HTTPVerb.get) HTTPVerb method, @Default("") String url, List? headers, List? params, List? isHeaderEnabledList, List? isParamEnabledList, @Default(ContentType.json) ContentType bodyContentType, String? body, List? formData, }) = _HttpRequestModel; factory HttpRequestModel.fromJson(Map json) => _$HttpRequestModelFromJson(json); Map get headersMap => rowsToMap(headers) ?? {}; Map get paramsMap => rowsToMap(params) ?? {}; List? get enabledHeaders => getEnabledRows(headers, isHeaderEnabledList); List? get enabledParams => getEnabledRows(params, isParamEnabledList); Map get enabledHeadersMap => rowsToMap(enabledHeaders) ?? {}; Map get enabledParamsMap => rowsToMap(enabledParams) ?? {}; bool get hasContentTypeHeader => enabledHeadersMap.keys .any((k) => k.toLowerCase() == HttpHeaders.contentTypeHeader); bool get hasFormDataContentType => bodyContentType == ContentType.formdata; bool get hasJsonContentType => bodyContentType == ContentType.json; bool get hasTextContentType => bodyContentType == ContentType.text; int get contentLength => utf8.encode(body ?? "").length; bool get hasBody => hasJsonData || hasTextData || hasFormData; bool get hasJsonData => kMethodsWithBody.contains(method) && hasJsonContentType && contentLength > 0; bool get hasTextData => kMethodsWithBody.contains(method) && hasTextContentType && contentLength > 0; bool get hasFormData => kMethodsWithBody.contains(method) && hasFormDataContentType && formDataMapList.isNotEmpty; List get formDataList => formData ?? []; List> get formDataMapList => rowsToFormDataMapList(formDataList) ?? []; bool get hasFileInFormData => formDataList .map((e) => e.type == FormDataType.file) .any((element) => element); }