Skip to content

Commit 90ed129

Browse files
authored
[dart][dart-dio] Improve form param handling, respect required flag (#8369)
* [dart-dio] Improve form param handling, respect required flag * simplify template * respect required flag (only null check when not rquired) * minor formatting * Add additional nullable check
1 parent 2331432 commit 90ed129

5 files changed

Lines changed: 61 additions & 78 deletions

File tree

modules/openapi-generator/src/main/resources/dart-dio/api.mustache

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,26 +52,15 @@ class {{classname}} {
5252
];{{/hasConsumes}}
5353
{{#hasFormParams}}
5454

55-
final formData = <String, dynamic>{};
55+
final formData = <String, dynamic>{
56+
{{#formParams}}
57+
{{^required}}{{^nullable}}if ({{paramName}} != null) {{/nullable}}{{/required}}r'{{baseName}}': {{#isFile}}MultipartFile.fromBytes({{paramName}}, filename: r'{{baseName}}'){{/isFile}}{{^isFile}}parameterToString(_serializers, {{paramName}}){{/isFile}},
58+
{{/formParams}}
59+
};
5660
{{#isMultipart}}
57-
{{#formParams}}
58-
{{^isFile}}
59-
if ({{paramName}} != null) {
60-
formData[r'{{baseName}}'] = parameterToString(_serializers, {{paramName}});
61-
}
62-
{{/isFile}}
63-
{{#isFile}}
64-
if ({{paramName}} != null) {
65-
formData[r'{{baseName}}'] = MultipartFile.fromBytes({{paramName}}, filename: r'{{baseName}}');
66-
}
67-
{{/isFile}}
68-
{{/formParams}}
6961
bodyData = FormData.fromMap(formData);
7062
{{/isMultipart}}
7163
{{^isMultipart}}
72-
{{#formParams}}
73-
formData['{{baseName}}'] = parameterToString(_serializers, {{paramName}});
74-
{{/formParams}}
7564
bodyData = formData;
7665
{{/isMultipart}}
7766
{{/hasFormParams}}
@@ -89,7 +78,7 @@ class {{classname}} {
8978
{{/isContainer}}
9079
{{^isContainer}}
9180
{{#isPrimitiveType}}
92-
var serializedBody = {{paramName}};
81+
final serializedBody = {{paramName}};
9382
{{/isPrimitiveType}}
9483
{{^isPrimitiveType}}
9584
final bodySerializer = _serializers.serializerForType({{{baseType}}}) as Serializer<{{{baseType}}}>;

samples/client/petstore/dart-dio/petstore_client_lib/lib/api/pet_api.dart

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,10 @@ class PetApi {
427427
'application/x-www-form-urlencoded',
428428
];
429429

430-
final formData = <String, dynamic>{};
431-
formData['name'] = parameterToString(_serializers, name);
432-
formData['status'] = parameterToString(_serializers, status);
430+
final formData = <String, dynamic>{
431+
if (name != null) r'name': parameterToString(_serializers, name),
432+
if (status != null) r'status': parameterToString(_serializers, status),
433+
};
433434
bodyData = formData;
434435

435436
return _dio.request<dynamic>(
@@ -486,13 +487,10 @@ class PetApi {
486487
'multipart/form-data',
487488
];
488489

489-
final formData = <String, dynamic>{};
490-
if (additionalMetadata != null) {
491-
formData[r'additionalMetadata'] = parameterToString(_serializers, additionalMetadata);
492-
}
493-
if (file != null) {
494-
formData[r'file'] = MultipartFile.fromBytes(file, filename: r'file');
495-
}
490+
final formData = <String, dynamic>{
491+
if (additionalMetadata != null) r'additionalMetadata': parameterToString(_serializers, additionalMetadata),
492+
if (file != null) r'file': MultipartFile.fromBytes(file, filename: r'file'),
493+
};
496494
bodyData = FormData.fromMap(formData);
497495

498496
return _dio.request<dynamic>(

samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/pet_api.dart

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -459,9 +459,10 @@ class PetApi {
459459
'application/x-www-form-urlencoded',
460460
];
461461

462-
final formData = <String, dynamic>{};
463-
formData['name'] = parameterToString(_serializers, name);
464-
formData['status'] = parameterToString(_serializers, status);
462+
final formData = <String, dynamic>{
463+
if (name != null) r'name': parameterToString(_serializers, name),
464+
if (status != null) r'status': parameterToString(_serializers, status),
465+
};
465466
bodyData = formData;
466467

467468
return _dio.request<dynamic>(
@@ -518,13 +519,10 @@ class PetApi {
518519
'multipart/form-data',
519520
];
520521

521-
final formData = <String, dynamic>{};
522-
if (additionalMetadata != null) {
523-
formData[r'additionalMetadata'] = parameterToString(_serializers, additionalMetadata);
524-
}
525-
if (file != null) {
526-
formData[r'file'] = MultipartFile.fromBytes(file, filename: r'file');
527-
}
522+
final formData = <String, dynamic>{
523+
if (additionalMetadata != null) r'additionalMetadata': parameterToString(_serializers, additionalMetadata),
524+
if (file != null) r'file': MultipartFile.fromBytes(file, filename: r'file'),
525+
};
528526
bodyData = FormData.fromMap(formData);
529527

530528
return _dio.request<dynamic>(

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class FakeApi {
175175
'application/json',
176176
];
177177

178-
var serializedBody = body;
178+
final serializedBody = body;
179179
final jsonbody = json.encode(serializedBody);
180180
bodyData = jsonbody;
181181

@@ -306,7 +306,7 @@ class FakeApi {
306306
'application/json',
307307
];
308308

309-
var serializedBody = body;
309+
final serializedBody = body;
310310
final jsonbody = json.encode(serializedBody);
311311
bodyData = jsonbody;
312312

@@ -369,7 +369,7 @@ class FakeApi {
369369
'application/json',
370370
];
371371

372-
var serializedBody = body;
372+
final serializedBody = body;
373373
final jsonbody = json.encode(serializedBody);
374374
bodyData = jsonbody;
375375

@@ -619,21 +619,22 @@ class FakeApi {
619619
'application/x-www-form-urlencoded',
620620
];
621621

622-
final formData = <String, dynamic>{};
623-
formData['integer'] = parameterToString(_serializers, integer);
624-
formData['int32'] = parameterToString(_serializers, int32);
625-
formData['int64'] = parameterToString(_serializers, int64);
626-
formData['number'] = parameterToString(_serializers, number);
627-
formData['float'] = parameterToString(_serializers, float);
628-
formData['double'] = parameterToString(_serializers, double_);
629-
formData['string'] = parameterToString(_serializers, string);
630-
formData['pattern_without_delimiter'] = parameterToString(_serializers, patternWithoutDelimiter);
631-
formData['byte'] = parameterToString(_serializers, byte);
632-
formData['binary'] = parameterToString(_serializers, binary);
633-
formData['date'] = parameterToString(_serializers, date);
634-
formData['dateTime'] = parameterToString(_serializers, dateTime);
635-
formData['password'] = parameterToString(_serializers, password);
636-
formData['callback'] = parameterToString(_serializers, callback);
622+
final formData = <String, dynamic>{
623+
if (integer != null) r'integer': parameterToString(_serializers, integer),
624+
if (int32 != null) r'int32': parameterToString(_serializers, int32),
625+
if (int64 != null) r'int64': parameterToString(_serializers, int64),
626+
r'number': parameterToString(_serializers, number),
627+
if (float != null) r'float': parameterToString(_serializers, float),
628+
r'double': parameterToString(_serializers, double_),
629+
if (string != null) r'string': parameterToString(_serializers, string),
630+
r'pattern_without_delimiter': parameterToString(_serializers, patternWithoutDelimiter),
631+
r'byte': parameterToString(_serializers, byte),
632+
if (binary != null) r'binary': MultipartFile.fromBytes(binary, filename: r'binary'),
633+
if (date != null) r'date': parameterToString(_serializers, date),
634+
if (dateTime != null) r'dateTime': parameterToString(_serializers, dateTime),
635+
if (password != null) r'password': parameterToString(_serializers, password),
636+
if (callback != null) r'callback': parameterToString(_serializers, callback),
637+
};
637638
bodyData = formData;
638639

639640
return _dio.request<dynamic>(
@@ -701,9 +702,10 @@ class FakeApi {
701702
'application/x-www-form-urlencoded',
702703
];
703704

704-
final formData = <String, dynamic>{};
705-
formData['enum_form_string_array'] = parameterToString(_serializers, enumFormStringArray);
706-
formData['enum_form_string'] = parameterToString(_serializers, enumFormString);
705+
final formData = <String, dynamic>{
706+
if (enumFormStringArray != null) r'enum_form_string_array': parameterToString(_serializers, enumFormStringArray),
707+
if (enumFormString != null) r'enum_form_string': parameterToString(_serializers, enumFormString),
708+
};
707709
bodyData = formData;
708710

709711
return _dio.request<dynamic>(
@@ -867,9 +869,10 @@ class FakeApi {
867869
'application/x-www-form-urlencoded',
868870
];
869871

870-
final formData = <String, dynamic>{};
871-
formData['param'] = parameterToString(_serializers, param);
872-
formData['param2'] = parameterToString(_serializers, param2);
872+
final formData = <String, dynamic>{
873+
r'param': parameterToString(_serializers, param),
874+
r'param2': parameterToString(_serializers, param2),
875+
};
873876
bodyData = formData;
874877

875878
return _dio.request<dynamic>(

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/pet_api.dart

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,10 @@ class PetApi {
427427
'application/x-www-form-urlencoded',
428428
];
429429

430-
final formData = <String, dynamic>{};
431-
formData['name'] = parameterToString(_serializers, name);
432-
formData['status'] = parameterToString(_serializers, status);
430+
final formData = <String, dynamic>{
431+
if (name != null) r'name': parameterToString(_serializers, name),
432+
if (status != null) r'status': parameterToString(_serializers, status),
433+
};
433434
bodyData = formData;
434435

435436
return _dio.request<dynamic>(
@@ -486,13 +487,10 @@ class PetApi {
486487
'multipart/form-data',
487488
];
488489

489-
final formData = <String, dynamic>{};
490-
if (additionalMetadata != null) {
491-
formData[r'additionalMetadata'] = parameterToString(_serializers, additionalMetadata);
492-
}
493-
if (file != null) {
494-
formData[r'file'] = MultipartFile.fromBytes(file, filename: r'file');
495-
}
490+
final formData = <String, dynamic>{
491+
if (additionalMetadata != null) r'additionalMetadata': parameterToString(_serializers, additionalMetadata),
492+
if (file != null) r'file': MultipartFile.fromBytes(file, filename: r'file'),
493+
};
496494
bodyData = FormData.fromMap(formData);
497495

498496
return _dio.request<dynamic>(
@@ -565,13 +563,10 @@ class PetApi {
565563
'multipart/form-data',
566564
];
567565

568-
final formData = <String, dynamic>{};
569-
if (additionalMetadata != null) {
570-
formData[r'additionalMetadata'] = parameterToString(_serializers, additionalMetadata);
571-
}
572-
if (requiredFile != null) {
573-
formData[r'requiredFile'] = MultipartFile.fromBytes(requiredFile, filename: r'requiredFile');
574-
}
566+
final formData = <String, dynamic>{
567+
if (additionalMetadata != null) r'additionalMetadata': parameterToString(_serializers, additionalMetadata),
568+
r'requiredFile': MultipartFile.fromBytes(requiredFile, filename: r'requiredFile'),
569+
};
575570
bodyData = FormData.fromMap(formData);
576571

577572
return _dio.request<dynamic>(

0 commit comments

Comments
 (0)