import 'package:flutter/material.dart'; import 'package:apidash/consts.dart'; import 'package:apidash/utils/utils.dart' show mapToRows, rowsToMap; import 'kvrow_model.dart'; import 'response_model.dart'; @immutable class RequestModel { const RequestModel({ required this.id, this.method = kDefaultHttpMethod, this.url = "", this.name = "", this.description = "", this.requestTabIndex = 0, this.requestHeaders, this.requestParams, this.requestBodyContentType = kDefaultContentType, this.requestBody, this.responseStatus, this.message, this.responseModel, }); final String id; final HTTPVerb method; final String url; final String name; final String description; final int requestTabIndex; final List? requestHeaders; final List? requestParams; final ContentType requestBodyContentType; final String? requestBody; final int? responseStatus; final String? message; final ResponseModel? responseModel; RequestModel duplicate({ required String id, }) { return RequestModel( id: id, method: method, url: url, name: name, description: description, requestHeaders: requestHeaders, requestParams: requestParams, requestBodyContentType: requestBodyContentType, requestBody: requestBody, ); } RequestModel copyWith({ String? id, HTTPVerb? method, String? url, String? name, String? description, int? requestTabIndex, List? requestHeaders, List? requestParams, ContentType? requestBodyContentType, String? requestBody, int? responseStatus, String? message, ResponseModel? responseModel, }) { return RequestModel( id: id ?? this.id, method: method ?? this.method, url: url ?? this.url, name: name ?? this.name, description: description ?? this.description, requestTabIndex: requestTabIndex ?? this.requestTabIndex, requestHeaders: requestHeaders ?? this.requestHeaders, requestParams: requestParams ?? this.requestParams, requestBodyContentType: requestBodyContentType ?? this.requestBodyContentType, requestBody: requestBody ?? this.requestBody, responseStatus: responseStatus ?? this.responseStatus, message: message ?? this.message, responseModel: responseModel ?? this.responseModel, ); } factory RequestModel.fromJson(Map data) { HTTPVerb method; ContentType requestBodyContentType; ResponseModel? responseModel; final id = data["id"] as String; try { method = HTTPVerb.values.byName(data["method"] as String); } catch (e) { method = kDefaultHttpMethod; } final url = data["url"] as String; final name = data["name"] as String?; final description = data["description"] as String?; final requestHeaders = data["requestHeaders"]; final requestParams = data["requestParams"]; try { requestBodyContentType = ContentType.values.byName(data["requestBodyContentType"] as String); } catch (e) { requestBodyContentType = kDefaultContentType; } final requestBody = data["requestBody"] as String?; final responseStatus = data["responseStatus"] as int?; final message = data["message"] as String?; final responseModelJson = data["responseModel"]; if (responseModelJson != null) { responseModel = ResponseModel.fromJson(Map.from(responseModelJson)); } else { responseModel = null; } return RequestModel( id: id, method: method, url: url, name: name ?? "", description: description ?? "", requestTabIndex: 0, requestHeaders: requestHeaders != null ? mapToRows(Map.from(requestHeaders)) : null, requestParams: requestParams != null ? mapToRows(Map.from(requestParams)) : null, requestBodyContentType: requestBodyContentType, requestBody: requestBody, responseStatus: responseStatus, message: message, responseModel: responseModel, ); } Map toJson() { return { "id": id, "method": method.name, "url": url, "name": name, "description": description, "requestHeaders": rowsToMap(requestHeaders), "requestParams": rowsToMap(requestParams), "requestBodyContentType": requestBodyContentType.name, "requestBody": requestBody, "responseStatus": responseStatus, "message": message, "responseModel": responseModel?.toJson(), }; } @override String toString() { return [ "Request Id: $id", "Request Method: ${method.name}", "Request URL: $url", "Request Name: $name", "Request Description: $description", "Request Tab Index: ${requestTabIndex.toString()}", "Request Headers: ${requestHeaders.toString()}", "Request Params: ${requestParams.toString()}", "Request Body Content Type: ${requestBodyContentType.toString()}", "Request Body: ${requestBody.toString()}", "Response Status: $responseStatus", "Response Message: $message", "Response: ${responseModel.toString()}" ].join("\n"); } }