Skip to content

Commit

Permalink
fix: Multipart @part body (map) doesn't breaks when multiple @path pa…
Browse files Browse the repository at this point in the history
…rameter is used.
  • Loading branch information
iamriajul committed Oct 25, 2023
1 parent c9f188c commit 3329c47
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 15 deletions.
8 changes: 8 additions & 0 deletions example/lib/example.dart
Expand Up @@ -249,6 +249,14 @@ abstract class RestClient {
Future<String> nestedGenericOther(
@Body() ValueWrapper<ValueWrapper<TaskQuery>> request,
);

@MultiPart()
@POST('post/{id}/comments/{commentId}')
Future<String> multipartBodyWithMultiplePathParameter(
@Path("id") String id,
@Path("commentId") String commentId,
@Part() Map<String, dynamic> body,
);
}

@JsonSerializable()
Expand Down
18 changes: 3 additions & 15 deletions generator/lib/src/generator.dart
Expand Up @@ -1747,32 +1747,20 @@ ${bodyName.displayName} == null

final parts = _getAnnotations(m, retrofit.Part);
if (parts.isNotEmpty) {
if (m.parameters.length == 1 && m.parameters.first.type.isDartCoreMap) {
if (parts.length == 1 && parts.keys.first.type.isDartCoreMap) {
blocks.add(
declareFinal(dataVar)
.assign(
refer('FormData').newInstanceNamed(
'fromMap',
[CodeExpression(Code(m.parameters.first.displayName))],
),
)
.statement,
);
return;
} else if (m.parameters.length == 2 &&
m.parameters[1].type.isDartCoreMap) {
blocks.add(
declareFinal(dataVar)
.assign(
refer('FormData').newInstanceNamed(
'fromMap',
[CodeExpression(Code(m.parameters[1].displayName))],
[CodeExpression(Code(parts.keys.first.displayName))],
),
)
.statement,
);
return;
}

blocks.add(
declareFinal(dataVar)
.assign(refer('FormData').newInstance([]))
Expand Down

0 comments on commit 3329c47

Please sign in to comment.