forked from loafle/openapi-generator-original
[dart-dio] Adds support for multipart form data post body (#4797)
* [dart-dio] Adds support for multipart form data post body * [dart-dio] Fixes issues around formData
This commit is contained in:
parent
d643b2706a
commit
39ba6bbfb1
@ -232,6 +232,8 @@ public class DartDioClientCodegen extends DartClientCodegen {
|
||||
supportingFiles.add(new SupportingFile("pubspec.mustache", "", "pubspec.yaml"));
|
||||
supportingFiles.add(new SupportingFile("analysis_options.mustache", "", "analysis_options.yaml"));
|
||||
supportingFiles.add(new SupportingFile("apilib.mustache", libFolder, "api.dart"));
|
||||
supportingFiles.add(new SupportingFile("api_util.mustache", libFolder, "api_util.dart"));
|
||||
|
||||
supportingFiles.add(new SupportingFile("serializers.mustache", libFolder, "serializers.dart"));
|
||||
|
||||
supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore"));
|
||||
@ -346,6 +348,10 @@ public class DartDioClientCodegen extends DartClientCodegen {
|
||||
op.vendorExtensions.put("isForm", isForm);
|
||||
op.vendorExtensions.put("isMultipart", isMultipart);
|
||||
|
||||
if (op.getHasFormParams()) {
|
||||
fullImports.add("package:" + pubName + "/api_util.dart");
|
||||
}
|
||||
|
||||
Set<String> imports = new HashSet<>();
|
||||
for (String item : op.imports) {
|
||||
if (!modelToIgnore.contains(item.toLowerCase(Locale.ROOT))) {
|
||||
@ -356,6 +362,7 @@ public class DartDioClientCodegen extends DartClientCodegen {
|
||||
}
|
||||
modelImports.addAll(imports);
|
||||
op.imports = imports;
|
||||
|
||||
}
|
||||
|
||||
objs.put("modelImports", modelImports);
|
||||
|
@ -25,10 +25,9 @@ class {{classname}} {
|
||||
|
||||
String path = "{{{path}}}"{{#pathParams}}.replaceAll("{" + "{{baseName}}" + "}", {{{paramName}}}.toString()){{/pathParams}};
|
||||
|
||||
// query params
|
||||
Map<String, dynamic> queryParams = {};
|
||||
Map<String, String> headerParams = Map.from(headers ?? {});
|
||||
Map<String, String> formParams = {};
|
||||
dynamic bodyData;
|
||||
|
||||
{{#headerParams}}
|
||||
headerParams["{{baseName}}"] = {{paramName}};
|
||||
@ -38,10 +37,27 @@ class {{classname}} {
|
||||
{{/queryParams}}
|
||||
queryParams.removeWhere((key, value) => value == null);
|
||||
headerParams.removeWhere((key, value) => value == null);
|
||||
formParams.removeWhere((key, value) => value == null);
|
||||
|
||||
List<String> contentTypes = [{{#consumes}}
|
||||
"{{{mediaType}}}"{{#hasMore}},{{/hasMore}}{{/consumes}}];
|
||||
List<String> contentTypes = [{{#consumes}}"{{{mediaType}}}"{{#hasMore}},{{/hasMore}}{{/consumes}}];
|
||||
|
||||
{{#hasFormParams}}
|
||||
Map<String, dynamic> formData = {};
|
||||
{{#formParams}}
|
||||
{{#isMultipart}}
|
||||
{{^isFile}}
|
||||
if ({{paramName}} != null) {
|
||||
formData['{{baseName}}'] = parameterToString({{paramName}});
|
||||
}
|
||||
{{/isFile}}
|
||||
{{#isFile}}
|
||||
if ({{paramName}} != null) {
|
||||
formData['{{baseName}}'] = MultipartFile.fromBytes({{paramName}}, filename: "{{baseName}}");
|
||||
}
|
||||
{{/isFile}}
|
||||
{{/isMultipart}}
|
||||
{{/formParams}}
|
||||
bodyData = FormData.fromMap(formData);
|
||||
{{/hasFormParams}}
|
||||
|
||||
{{#bodyParam}}
|
||||
{{#isListContainer}}
|
||||
@ -52,14 +68,13 @@ class {{classname}} {
|
||||
var serializedBody = _serializers.serialize({{paramName}});
|
||||
{{/isListContainer}}
|
||||
var json{{paramName}} = json.encode(serializedBody);
|
||||
bodyData = json{{paramName}};
|
||||
{{/bodyParam}}
|
||||
|
||||
return _dio.request(
|
||||
path,
|
||||
queryParameters: queryParams,
|
||||
{{#bodyParam}}
|
||||
data: json{{paramName}},
|
||||
{{/bodyParam}}
|
||||
data: bodyData,
|
||||
options: Options(
|
||||
method: '{{httpMethod}}'.toUpperCase(),
|
||||
headers: headerParams,
|
||||
|
18
modules/openapi-generator/src/main/resources/dart-dio/api_util.mustache
vendored
Normal file
18
modules/openapi-generator/src/main/resources/dart-dio/api_util.mustache
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
/// Format the given parameter object into string.
|
||||
String parameterToString(dynamic value) {
|
||||
if (value == null) {
|
||||
return '';
|
||||
} else if (value is DateTime) {
|
||||
return value.toUtc().toIso8601String();
|
||||
{{#models}}
|
||||
{{#model}}
|
||||
{{#isEnum}}
|
||||
} else if (value is {{classname}}) {
|
||||
return {{classname}}TypeTransformer().encode(value).toString();
|
||||
{{/isEnum}}
|
||||
{{/model}}
|
||||
{{/models}}
|
||||
} else {
|
||||
return value.toString();
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user