diff --git a/docs/generators/dart-dio.md b/docs/generators/dart-dio.md
index f93b09ffbf8d..7e62f92f0782 100644
--- a/docs/generators/dart-dio.md
+++ b/docs/generators/dart-dio.md
@@ -37,6 +37,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|pubRepository|Repository in generated pubspec| |null|
|pubVersion|Version in generated pubspec| |1.0.0|
|serializationLibrary|Specify serialization library|
- **built_value**
- [DEFAULT] built_value
- **json_serializable**
- [BETA] json_serializable
|built_value|
+|skipCopyWith|Skip CopyWith when using Json Serializable for serialization| |false|
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true|
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
|sourceFolder|source folder for generated code| |src|
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java
index cf8338e47e3d..d6ab80de2881 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java
@@ -69,7 +69,9 @@ public class DartDioClientCodegen extends AbstractDartCodegen {
private static final String DIO_IMPORT = "package:dio/dio.dart";
public static final String FINAL_PROPERTIES = "finalProperties";
+ public static final String SKIP_COPY_WITH = "skipCopyWith";
public static final String FINAL_PROPERTIES_DEFAULT_VALUE = "true";
+ public static final String SKIP_COPY_WITH_DEFAULT_VALUE = "false";
private static final String CLIENT_NAME = "clientName";
@@ -138,6 +140,11 @@ public DartDioClientCodegen() {
final CliOption finalProperties = CliOption.newBoolean(FINAL_PROPERTIES, "Whether properties are marked as final when using Json Serializable for serialization");
finalProperties.setDefault("true");
cliOptions.add(finalProperties);
+
+ // skip CopyWith option
+ final CliOption skipCopyWith = CliOption.newBoolean(SKIP_COPY_WITH, "Skip CopyWith when using Json Serializable for serialization");
+ skipCopyWith.setDefault("false");
+ cliOptions.add(skipCopyWith);
}
@Override
@@ -182,6 +189,13 @@ public void processOpts() {
additionalProperties.put(FINAL_PROPERTIES, Boolean.parseBoolean(additionalProperties.get(FINAL_PROPERTIES).toString()));
}
+ if (!additionalProperties.containsKey(SKIP_COPY_WITH)) {
+ additionalProperties.put(SKIP_COPY_WITH, Boolean.parseBoolean(SKIP_COPY_WITH_DEFAULT_VALUE));
+ LOGGER.debug("skipCopyWith not set, using default {}", SKIP_COPY_WITH_DEFAULT_VALUE);
+ } else {
+ additionalProperties.put(SKIP_COPY_WITH, Boolean.parseBoolean(additionalProperties.get(SKIP_COPY_WITH).toString()));
+ }
+
if (!additionalProperties.containsKey(CLIENT_NAME)) {
final String name = org.openapitools.codegen.utils.StringUtils.camelize(pubName);
additionalProperties.put(CLIENT_NAME, name);
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache
index 402a81fc610b..b0ac707ecee7 100644
--- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache
+++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache
@@ -25,7 +25,9 @@ dependencies:
equatable: '^2.0.7'
{{/useEquatable}}
{{#useJsonSerializable}}
+ {{^skipCopyWith}}
copy_with_extension: '^7.1.0'
+ {{/skipCopyWith}}
json_annotation: '^4.9.0'
{{/useJsonSerializable}}
{{#useDateLibTimeMachine}}
@@ -39,7 +41,9 @@ dev_dependencies:
{{/useBuiltValue}}
{{#useJsonSerializable}}
build_runner: any
+ {{^skipCopyWith}}
copy_with_extension_gen: ^7.1.0
+ {{/skipCopyWith}}
json_serializable: '^6.9.3'
{{/useJsonSerializable}}
test: '^1.16.0'
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache
index 55bf2bb73466..bee52d4d3bbd 100644
--- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache
+++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache
@@ -1,4 +1,6 @@
+{{^skipCopyWith}}
import 'package:copy_with_extension/copy_with_extension.dart';
+{{/skipCopyWith}}
import 'package:json_annotation/json_annotation.dart';
{{#useEquatable}}
import 'package:equatable/src/equatable_utils.dart';
@@ -18,7 +20,9 @@ part '{{classFilename}}.g.dart';
{{#isDeprecated}}
@Deprecated('{{{classname}}} has been deprecated')
{{/isDeprecated}}
+{{^skipCopyWith}}
@CopyWith()
+{{/skipCopyWith}}
@JsonSerializable(
checked: true,
createToJson: true,
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartDioClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartDioClientOptionsProvider.java
index bcda220f4328..648332073401 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartDioClientOptionsProvider.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartDioClientOptionsProvider.java
@@ -72,6 +72,7 @@ public Map createOptions() {
.put(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "true")
.put(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, "true")
.put(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, ENUM_UNKNOWN_DEFAULT_CASE_VALUE)
+ .put(DartDioClientCodegen.SKIP_COPY_WITH, DartDioClientCodegen.SKIP_COPY_WITH_DEFAULT_VALUE)
.build();
}