From e5e2f0e252b2ce6b1edad9b3d9db75977594dd12 Mon Sep 17 00:00:00 2001
From: Peter Leibiger <kuhnroyal@gmail.com>
Date: Thu, 17 Dec 2020 10:35:48 +0100
Subject: [PATCH 1/5] [dart][dart-dio] Improve prefixing of inner enums with
 classname

* prevent further name conflicts by correctly naming the enum, until now there could potentially occur conflicts e.g. 2x `MapTestInnerEnum` by renaming the `items` child property
* correctly set `enumName` to match `datatypeWithEnum`
---
 .../codegen/languages/DartClientCodegen.java  | 12 +++--
 .../resources/dart-dio/enum_inline.mustache   | 12 ++---
 .../src/main/resources/dart2/class.mustache   |  6 +--
 .../main/resources/dart2/enum_inline.mustache | 44 ++++++++--------
 .../lib/model/map_test.dart                   | 16 +++---
 .../lib/model/map_test.dart                   | 50 +++++++++----------
 6 files changed, 73 insertions(+), 67 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java
index ce6c6234c38..5adb88fc23b 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java
@@ -535,12 +535,18 @@ public class DartClientCodegen extends DefaultCodegen {
             // are prefix with the classname of the containing class in the template.
             // Here the datatypeWithEnum template variable gets updated to match that scheme.
             // Also taking into account potential collection types e.g. List<JustSymbolEnum> -> List<EnumArraysJustSymbolEnum>
+            final String enumName = model.classname + property.enumName;
             if (property.items != null) {
-                // basically inner items e.g. map of maps etc.
-                property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.items.datatypeWithEnum, model.classname + property.items.datatypeWithEnum));
+                // inner items e.g. enums in collections, only works for one level
+                // but same is the case for DefaultCodegen
+                property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.items.datatypeWithEnum, enumName));
+                property.items.setDatatypeWithEnum(enumName);
+                property.items.setEnumName(enumName);
             } else {
-                property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.enumName, model.classname + property.enumName));
+                // plain enum property
+                property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.enumName, enumName));
             }
+            property.setEnumName(enumName);
         }
     }
 
diff --git a/modules/openapi-generator/src/main/resources/dart-dio/enum_inline.mustache b/modules/openapi-generator/src/main/resources/dart-dio/enum_inline.mustache
index d55b6d25b39..f18008d92bf 100644
--- a/modules/openapi-generator/src/main/resources/dart-dio/enum_inline.mustache
+++ b/modules/openapi-generator/src/main/resources/dart-dio/enum_inline.mustache
@@ -1,4 +1,4 @@
-class {{{classname}}}{{{enumName}}} extends EnumClass {
+class {{{enumName}}} extends EnumClass {
 
   {{#allowableValues}}
     {{#enumVars}}
@@ -6,14 +6,14 @@ class {{{classname}}}{{{enumName}}} extends EnumClass {
   /// {{{description}}}
       {{/description}}
   @BuiltValueEnumConst({{#isInteger}}wireNumber: {{{value}}}{{/isInteger}}{{^isInteger}}wireName: r{{#lambda.escapeBuiltValueEnum}}{{{value}}}{{/lambda.escapeBuiltValueEnum}}{{/isInteger}})
-  static const {{{classname}}}{{{enumName}}} {{name}} = _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}_{{name}};
+  static const {{{enumName}}} {{name}} = _${{#lambda.camelcase}}{{{enumName}}}{{/lambda.camelcase}}_{{name}};
     {{/enumVars}}
   {{/allowableValues}}
 
-  static Serializer<{{{classname}}}{{{enumName}}}> get serializer => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}Serializer;
+  static Serializer<{{{enumName}}}> get serializer => _${{#lambda.camelcase}}{{{enumName}}}{{/lambda.camelcase}}Serializer;
 
-  const {{{classname}}}{{{enumName}}}._(String name): super(name);
+  const {{{enumName}}}._(String name): super(name);
 
-  static BuiltSet<{{{classname}}}{{{enumName}}}> get values => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}Values;
-  static {{{classname}}}{{{enumName}}} valueOf(String name) => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}ValueOf(name);
+  static BuiltSet<{{{enumName}}}> get values => _${{#lambda.camelcase}}{{{enumName}}}{{/lambda.camelcase}}Values;
+  static {{{enumName}}} valueOf(String name) => _${{#lambda.camelcase}}{{{enumName}}}{{/lambda.camelcase}}ValueOf(name);
 }
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/dart2/class.mustache b/modules/openapi-generator/src/main/resources/dart2/class.mustache
index 5376a17691b..834802f5b30 100644
--- a/modules/openapi-generator/src/main/resources/dart2/class.mustache
+++ b/modules/openapi-generator/src/main/resources/dart2/class.mustache
@@ -2,7 +2,7 @@ class {{{classname}}} {
   /// Returns a new [{{{classname}}}] instance.
   {{{classname}}}({
   {{#vars}}
-    {{#required}}{{^defaultValue}}@required {{/defaultValue}}{{/required}}this.{{{name}}}{{^isNullable}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{classname}}}{{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/isNullable}},
+    {{#required}}{{^defaultValue}}@required {{/defaultValue}}{{/required}}this.{{{name}}}{{^isNullable}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/isNullable}},
   {{/vars}}
   });
 
@@ -151,7 +151,7 @@ class {{{classname}}} {
     {{^complexType}}
       {{#isArray}}
         {{#isEnum}}
-        {{{name}}}: {{{classname}}}{{{items.datatypeWithEnum}}}.listFromJson(json[r'{{{baseName}}}']),
+        {{{name}}}: {{{items.datatypeWithEnum}}}.listFromJson(json[r'{{{baseName}}}']),
         {{/isEnum}}
         {{^isEnum}}
         {{{name}}}: json[r'{{{baseName}}}'] == null
@@ -176,7 +176,7 @@ class {{{classname}}} {
         {{{name}}}: json[r'{{{baseName}}}'],
     {{/isEnum}}
     {{#isEnum}}
-        {{{name}}}: {{{classname}}}{{{enumName}}}.fromJson(json[r'{{{baseName}}}']),
+        {{{name}}}: {{{enumName}}}.fromJson(json[r'{{{baseName}}}']),
     {{/isEnum}}
           {{/isNumber}}
         {{/isMap}}
diff --git a/modules/openapi-generator/src/main/resources/dart2/enum_inline.mustache b/modules/openapi-generator/src/main/resources/dart2/enum_inline.mustache
index 7daf6dea1f7..da56a801b7a 100644
--- a/modules/openapi-generator/src/main/resources/dart2/enum_inline.mustache
+++ b/modules/openapi-generator/src/main/resources/dart2/enum_inline.mustache
@@ -1,14 +1,14 @@
 {{#description}}/// {{{description}}}{{/description}}
-class {{{classname}}}{{{enumName}}} {
+class {{{enumName}}} {
   /// Instantiate a new enum with the provided [value].
-  const {{{classname}}}{{{enumName}}}._(this.value);
+  const {{{enumName}}}._(this.value);
 
   /// The underlying value of this enum member.
   final {{{dataType}}} value;
 
   @override
   bool operator ==(Object other) => identical(this, other) ||
-      other is {{{classname}}}{{{enumName}}} && other.value == value;
+      other is {{{enumName}}} && other.value == value;
 
   @override
   int get hashCode => toString().hashCode;
@@ -20,12 +20,12 @@ class {{{classname}}}{{{enumName}}} {
 
   {{#allowableValues}}
     {{#enumVars}}
-  static const {{{name}}} = {{{classname}}}{{{enumName}}}._({{#isString}}r{{/isString}}{{{value}}});
+  static const {{{name}}} = {{{enumName}}}._({{#isString}}r{{/isString}}{{{value}}});
     {{/enumVars}}
   {{/allowableValues}}
 
-  /// List of all possible values in this [enum][{{{classname}}}{{{enumName}}}].
-  static const values = <{{{classname}}}{{{enumName}}}>[
+  /// List of all possible values in this [enum][{{{enumName}}}].
+  static const values = <{{{enumName}}}>[
   {{#allowableValues}}
     {{#enumVars}}
     {{{name}}},
@@ -33,27 +33,27 @@ class {{{classname}}}{{{enumName}}} {
   {{/allowableValues}}
   ];
 
-  static {{{classname}}}{{{enumName}}} fromJson(dynamic value) =>
-    {{{classname}}}{{{enumName}}}TypeTransformer().decode(value);
+  static {{{enumName}}} fromJson(dynamic value) =>
+    {{{enumName}}}TypeTransformer().decode(value);
 
-  static List<{{{classname}}}{{{enumName}}}> listFromJson(List<dynamic> json, {bool emptyIsNull, bool growable,}) =>
+  static List<{{{enumName}}}> listFromJson(List<dynamic> json, {bool emptyIsNull, bool growable,}) =>
     json == null || json.isEmpty
-      ? true == emptyIsNull ? null : <{{{classname}}}{{{enumName}}}>[]
+      ? true == emptyIsNull ? null : <{{{enumName}}}>[]
       : json
-          .map((value) => {{{classname}}}{{{enumName}}}.fromJson(value))
+          .map((value) => {{{enumName}}}.fromJson(value))
           .toList(growable: true == growable);
 }
 
-/// Transformation class that can [encode] an instance of [{{{classname}}}{{{enumName}}}] to {{{dataType}}},
-/// and [decode] dynamic data back to [{{{classname}}}{{{enumName}}}].
-class {{{classname}}}{{{enumName}}}TypeTransformer {
-  const {{{classname}}}{{{enumName}}}TypeTransformer._();
+/// Transformation class that can [encode] an instance of [{{{enumName}}}] to {{{dataType}}},
+/// and [decode] dynamic data back to [{{{enumName}}}].
+class {{{enumName}}}TypeTransformer {
+  const {{{enumName}}}TypeTransformer._();
 
-  factory {{{classname}}}{{{enumName}}}TypeTransformer() => _instance ??= {{{classname}}}{{{enumName}}}TypeTransformer._();
+  factory {{{enumName}}}TypeTransformer() => _instance ??= {{{enumName}}}TypeTransformer._();
 
-  {{{dataType}}} encode({{{classname}}}{{{enumName}}} data) => data.value;
+  {{{dataType}}} encode({{{enumName}}} data) => data.value;
 
-  /// Decodes a [dynamic value][data] to a {{{classname}}}{{{enumName}}}.
+  /// Decodes a [dynamic value][data] to a {{{enumName}}}.
   ///
   /// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully,
   /// then null is returned. However, if [allowNull] is false and the [dynamic value][data]
@@ -61,11 +61,11 @@ class {{{classname}}}{{{enumName}}}TypeTransformer {
   ///
   /// The [allowNull] is very handy when an API changes and a new enum value is added or removed,
   /// and users are still using an old app with the old code.
-  {{{classname}}}{{{enumName}}} decode(dynamic data, {bool allowNull}) {
+  {{{enumName}}} decode(dynamic data, {bool allowNull}) {
     switch (data) {
       {{#allowableValues}}
         {{#enumVars}}
-      case {{#isString}}r{{/isString}}{{{value}}}: return {{{classname}}}{{{enumName}}}.{{{name}}};
+      case {{#isString}}r{{/isString}}{{{value}}}: return {{{enumName}}}.{{{name}}};
         {{/enumVars}}
       {{/allowableValues}}
       default:
@@ -76,6 +76,6 @@ class {{{classname}}}{{{enumName}}}TypeTransformer {
     return null;
   }
 
-  /// Singleton [{{{classname}}}{{{enumName}}}TypeTransformer] instance.
-  static {{{classname}}}{{{enumName}}}TypeTransformer _instance;
+  /// Singleton [{{{enumName}}}TypeTransformer] instance.
+  static {{{enumName}}}TypeTransformer _instance;
 }
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
index c8f311d81d6..7397482d8e6 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
@@ -19,7 +19,7 @@ abstract class MapTest implements Built<MapTest, MapTestBuilder> {
 
     @nullable
     @BuiltValueField(wireName: r'map_of_enum_string')
-    BuiltMap<String, MapTestInnerEnum> get mapOfEnumString;
+    BuiltMap<String, MapTestMapOfEnumStringEnum> get mapOfEnumString;
     // enum mapOfEnumStringEnum {  UPPER,  lower,  };
 
     @nullable
@@ -39,18 +39,18 @@ abstract class MapTest implements Built<MapTest, MapTestBuilder> {
     static Serializer<MapTest> get serializer => _$mapTestSerializer;
 }
 
-class MapTestInnerEnum extends EnumClass {
+class MapTestMapOfEnumStringEnum extends EnumClass {
 
   @BuiltValueEnumConst(wireName: r'UPPER')
-  static const MapTestInnerEnum UPPER = _$mapTestInnerEnum_UPPER;
+  static const MapTestMapOfEnumStringEnum UPPER = _$mapTestMapOfEnumStringEnum_UPPER;
   @BuiltValueEnumConst(wireName: r'lower')
-  static const MapTestInnerEnum lower = _$mapTestInnerEnum_lower;
+  static const MapTestMapOfEnumStringEnum lower = _$mapTestMapOfEnumStringEnum_lower;
 
-  static Serializer<MapTestInnerEnum> get serializer => _$mapTestInnerEnumSerializer;
+  static Serializer<MapTestMapOfEnumStringEnum> get serializer => _$mapTestMapOfEnumStringEnumSerializer;
 
-  const MapTestInnerEnum._(String name): super(name);
+  const MapTestMapOfEnumStringEnum._(String name): super(name);
 
-  static BuiltSet<MapTestInnerEnum> get values => _$mapTestInnerEnumValues;
-  static MapTestInnerEnum valueOf(String name) => _$mapTestInnerEnumValueOf(name);
+  static BuiltSet<MapTestMapOfEnumStringEnum> get values => _$mapTestMapOfEnumStringEnumValues;
+  static MapTestMapOfEnumStringEnum valueOf(String name) => _$mapTestMapOfEnumStringEnumValueOf(name);
 }
 
diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/model/map_test.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/model/map_test.dart
index 2834ab2acf4..8e3c4001ac3 100644
--- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/model/map_test.dart
+++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/model/map_test.dart
@@ -20,7 +20,7 @@ class MapTest {
 
   Map<String, Map<String, String>> mapMapOfString;
 
-  Map<String, MapTestInnerEnum> mapOfEnumString;
+  Map<String, MapTestMapOfEnumStringEnum> mapOfEnumString;
 
   Map<String, bool> directMap;
 
@@ -105,16 +105,16 @@ class MapTest {
 }
 
 
-class MapTestInnerEnum {
+class MapTestMapOfEnumStringEnum {
   /// Instantiate a new enum with the provided [value].
-  const MapTestInnerEnum._(this.value);
+  const MapTestMapOfEnumStringEnum._(this.value);
 
   /// The underlying value of this enum member.
   final String value;
 
   @override
   bool operator ==(Object other) => identical(this, other) ||
-      other is MapTestInnerEnum && other.value == value;
+      other is MapTestMapOfEnumStringEnum && other.value == value;
 
   @override
   int get hashCode => toString().hashCode;
@@ -124,36 +124,36 @@ class MapTestInnerEnum {
 
   String toJson() => value;
 
-  static const UPPER = MapTestInnerEnum._(r'UPPER');
-  static const lower = MapTestInnerEnum._(r'lower');
+  static const UPPER = MapTestMapOfEnumStringEnum._(r'UPPER');
+  static const lower = MapTestMapOfEnumStringEnum._(r'lower');
 
-  /// List of all possible values in this [enum][MapTestInnerEnum].
-  static const values = <MapTestInnerEnum>[
+  /// List of all possible values in this [enum][MapTestMapOfEnumStringEnum].
+  static const values = <MapTestMapOfEnumStringEnum>[
     UPPER,
     lower,
   ];
 
-  static MapTestInnerEnum fromJson(dynamic value) =>
-    MapTestInnerEnumTypeTransformer().decode(value);
+  static MapTestMapOfEnumStringEnum fromJson(dynamic value) =>
+    MapTestMapOfEnumStringEnumTypeTransformer().decode(value);
 
-  static List<MapTestInnerEnum> listFromJson(List<dynamic> json, {bool emptyIsNull, bool growable,}) =>
+  static List<MapTestMapOfEnumStringEnum> listFromJson(List<dynamic> json, {bool emptyIsNull, bool growable,}) =>
     json == null || json.isEmpty
-      ? true == emptyIsNull ? null : <MapTestInnerEnum>[]
+      ? true == emptyIsNull ? null : <MapTestMapOfEnumStringEnum>[]
       : json
-          .map((value) => MapTestInnerEnum.fromJson(value))
+          .map((value) => MapTestMapOfEnumStringEnum.fromJson(value))
           .toList(growable: true == growable);
 }
 
-/// Transformation class that can [encode] an instance of [MapTestInnerEnum] to String,
-/// and [decode] dynamic data back to [MapTestInnerEnum].
-class MapTestInnerEnumTypeTransformer {
-  const MapTestInnerEnumTypeTransformer._();
+/// Transformation class that can [encode] an instance of [MapTestMapOfEnumStringEnum] to String,
+/// and [decode] dynamic data back to [MapTestMapOfEnumStringEnum].
+class MapTestMapOfEnumStringEnumTypeTransformer {
+  const MapTestMapOfEnumStringEnumTypeTransformer._();
 
-  factory MapTestInnerEnumTypeTransformer() => _instance ??= MapTestInnerEnumTypeTransformer._();
+  factory MapTestMapOfEnumStringEnumTypeTransformer() => _instance ??= MapTestMapOfEnumStringEnumTypeTransformer._();
 
-  String encode(MapTestInnerEnum data) => data.value;
+  String encode(MapTestMapOfEnumStringEnum data) => data.value;
 
-  /// Decodes a [dynamic value][data] to a MapTestInnerEnum.
+  /// Decodes a [dynamic value][data] to a MapTestMapOfEnumStringEnum.
   ///
   /// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully,
   /// then null is returned. However, if [allowNull] is false and the [dynamic value][data]
@@ -161,10 +161,10 @@ class MapTestInnerEnumTypeTransformer {
   ///
   /// The [allowNull] is very handy when an API changes and a new enum value is added or removed,
   /// and users are still using an old app with the old code.
-  MapTestInnerEnum decode(dynamic data, {bool allowNull}) {
+  MapTestMapOfEnumStringEnum decode(dynamic data, {bool allowNull}) {
     switch (data) {
-      case r'UPPER': return MapTestInnerEnum.UPPER;
-      case r'lower': return MapTestInnerEnum.lower;
+      case r'UPPER': return MapTestMapOfEnumStringEnum.UPPER;
+      case r'lower': return MapTestMapOfEnumStringEnum.lower;
       default:
         if (allowNull == false) {
           throw ArgumentError('Unknown enum value to decode: $data');
@@ -173,7 +173,7 @@ class MapTestInnerEnumTypeTransformer {
     return null;
   }
 
-  /// Singleton [MapTestInnerEnumTypeTransformer] instance.
-  static MapTestInnerEnumTypeTransformer _instance;
+  /// Singleton [MapTestMapOfEnumStringEnumTypeTransformer] instance.
+  static MapTestMapOfEnumStringEnumTypeTransformer _instance;
 }
 
-- 
GitLab


From fa2fa77ee89cbc33308ecbdbee36f57f27c9662f Mon Sep 17 00:00:00 2001
From: Peter Leibiger <kuhnroyal@gmail.com>
Date: Thu, 17 Dec 2020 16:18:27 +0100
Subject: [PATCH 2/5] Fix new initializeBuilder after rebase

---
 .../src/main/resources/dart-dio/class.mustache                  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/openapi-generator/src/main/resources/dart-dio/class.mustache b/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
index aef4915cc0b..02ac659904a 100644
--- a/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
+++ b/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
@@ -23,7 +23,7 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
     {{classname}}._();
 
     static void _initializeBuilder({{{classname}}}Builder b) => b{{#vars}}{{#defaultValue}}
-        ..{{{name}}} = {{#isEnum}}{{^isContainer}}const {{{classname}}}{{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/vars}};
+        ..{{{name}}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/vars}};
 
     factory {{classname}}([void updates({{classname}}Builder b)]) = _${{classname}};
     static Serializer<{{classname}}> get serializer => _${{#lambda.camelcase}}{{{classname}}}{{/lambda.camelcase}}Serializer;
-- 
GitLab


From aa30fafa064c9abe686c269ed0f3222a93682ea7 Mon Sep 17 00:00:00 2001
From: Peter Leibiger <kuhnroyal@gmail.com>
Date: Wed, 16 Dec 2020 11:52:36 +0100
Subject: [PATCH 3/5] [dart-dio] Disable nullable fields by default

This is not in line with the OAS and will prevent future Dart nullabilty features (NNBD) from being useful as all types would be optional.
Users can still opt-in for this.
---
 .../codegen/languages/DartDioClientCodegen.java  |  4 ++--
 .../lib/model/api_response.dart                  |  3 ---
 .../petstore_client_lib/lib/model/category.dart  |  2 --
 .../petstore_client_lib/lib/model/order.dart     |  6 ------
 .../petstore_client_lib/lib/model/pet.dart       |  6 ------
 .../petstore_client_lib/lib/model/tag.dart       |  2 --
 .../petstore_client_lib/lib/model/user.dart      |  8 --------
 .../lib/model/api_response.dart                  |  3 ---
 .../petstore_client_lib/lib/model/category.dart  |  2 --
 .../petstore_client_lib/lib/model/order.dart     |  6 ------
 .../petstore_client_lib/lib/model/pet.dart       |  6 ------
 .../petstore_client_lib/lib/model/tag.dart       |  2 --
 .../petstore_client_lib/lib/model/user.dart      |  8 --------
 .../lib/model/additional_properties_class.dart   |  2 --
 .../lib/model/animal.dart                        |  2 --
 .../lib/model/api_response.dart                  |  3 ---
 .../lib/model/array_of_array_of_number_only.dart |  1 -
 .../lib/model/array_of_number_only.dart          |  1 -
 .../lib/model/array_test.dart                    |  3 ---
 .../lib/model/capitalization.dart                |  6 ------
 .../petstore_client_lib_fake/lib/model/cat.dart  |  3 ---
 .../lib/model/cat_all_of.dart                    |  1 -
 .../lib/model/category.dart                      |  2 --
 .../lib/model/class_model.dart                   |  1 -
 .../petstore_client_lib_fake/lib/model/dog.dart  |  3 ---
 .../lib/model/dog_all_of.dart                    |  1 -
 .../lib/model/enum_arrays.dart                   |  2 --
 .../lib/model/enum_test.dart                     |  7 -------
 .../lib/model/file_schema_test_class.dart        |  2 --
 .../petstore_client_lib_fake/lib/model/foo.dart  |  1 -
 .../lib/model/format_test.dart                   | 16 ----------------
 .../lib/model/has_only_read_only.dart            |  2 --
 .../lib/model/inline_response_default.dart       |  1 -
 .../lib/model/map_test.dart                      |  4 ----
 ...operties_and_additional_properties_class.dart |  3 ---
 .../lib/model/model200_response.dart             |  2 --
 .../lib/model/model_client.dart                  |  1 -
 .../lib/model/model_file.dart                    |  1 -
 .../lib/model/model_list.dart                    |  1 -
 .../lib/model/model_return.dart                  |  1 -
 .../petstore_client_lib_fake/lib/model/name.dart |  4 ----
 .../lib/model/nullable_class.dart                |  2 --
 .../lib/model/number_only.dart                   |  1 -
 .../lib/model/order.dart                         |  6 ------
 .../lib/model/outer_composite.dart               |  3 ---
 .../petstore_client_lib_fake/lib/model/pet.dart  |  6 ------
 .../lib/model/read_only_first.dart               |  2 --
 .../lib/model/special_model_name.dart            |  1 -
 .../petstore_client_lib_fake/lib/model/tag.dart  |  2 --
 .../petstore_client_lib_fake/lib/model/user.dart |  8 --------
 50 files changed, 2 insertions(+), 164 deletions(-)

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 582402c2251..b52516de7e6 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
@@ -40,7 +40,7 @@ public class DartDioClientCodegen extends DartClientCodegen {
 
     private static final String CLIENT_NAME = "clientName";
 
-    private boolean nullableFields = true;
+    private boolean nullableFields = false;
     private String dateLibrary = "core";
 
     public DartDioClientCodegen() {
@@ -49,7 +49,7 @@ public class DartDioClientCodegen extends DartClientCodegen {
         embeddedTemplateDir = "dart-dio";
         this.setTemplateDir(embeddedTemplateDir);
 
-        cliOptions.add(new CliOption(NULLABLE_FIELDS, "Is the null fields should be in the JSON payload"));
+        cliOptions.add(new CliOption(NULLABLE_FIELDS, "Make all fields nullable in the JSON payload"));
         CliOption dateLibrary = new CliOption(DATE_LIBRARY, "Option. Date library to use").defaultValue(this.getDateLibrary());
         Map<String, String> dateOptions = new HashMap<>();
         dateOptions.put("core", "Dart core library (DateTime)");
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
index c5bc1e59646..c28ceff9050 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
@@ -12,15 +12,12 @@ part 'api_response.g.dart';
 
 abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'code')
     int get code;
 
-    @nullable
     @BuiltValueField(wireName: r'type')
     String get type;
 
-    @nullable
     @BuiltValueField(wireName: r'message')
     String get message;
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
index ddd15d54a53..4a049fa1804 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
@@ -12,11 +12,9 @@ part 'category.g.dart';
 
 abstract class Category implements Built<Category, CategoryBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
index f26c6213820..0e91a35ef94 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
@@ -13,29 +13,23 @@ part 'order.g.dart';
 
 abstract class Order implements Built<Order, OrderBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'petId')
     int get petId;
 
-    @nullable
     @BuiltValueField(wireName: r'quantity')
     int get quantity;
 
-    @nullable
     @BuiltValueField(wireName: r'shipDate')
     DateTime get shipDate;
 
     /// Order Status
-    @nullable
     @BuiltValueField(wireName: r'status')
     OrderStatusEnum get status;
     // enum statusEnum {  placed,  approved,  delivered,  };
 
-    @nullable
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
index 98757f5e7ce..36945941fd4 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
@@ -15,28 +15,22 @@ part 'pet.g.dart';
 
 abstract class Pet implements Built<Pet, PetBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'category')
     Category get category;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    @nullable
     @BuiltValueField(wireName: r'photoUrls')
     BuiltList<String> get photoUrls;
 
-    @nullable
     @BuiltValueField(wireName: r'tags')
     BuiltList<Tag> get tags;
 
     /// pet status in the store
-    @nullable
     @BuiltValueField(wireName: r'status')
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
index 528acd843e7..61a52895eeb 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
@@ -12,11 +12,9 @@ part 'tag.g.dart';
 
 abstract class Tag implements Built<Tag, TagBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
index 93259a43019..5282fdd50e4 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
@@ -12,36 +12,28 @@ part 'user.g.dart';
 
 abstract class User implements Built<User, UserBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'username')
     String get username;
 
-    @nullable
     @BuiltValueField(wireName: r'firstName')
     String get firstName;
 
-    @nullable
     @BuiltValueField(wireName: r'lastName')
     String get lastName;
 
-    @nullable
     @BuiltValueField(wireName: r'email')
     String get email;
 
-    @nullable
     @BuiltValueField(wireName: r'password')
     String get password;
 
-    @nullable
     @BuiltValueField(wireName: r'phone')
     String get phone;
 
     /// User Status
-    @nullable
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
index c5bc1e59646..c28ceff9050 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
@@ -12,15 +12,12 @@ part 'api_response.g.dart';
 
 abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'code')
     int get code;
 
-    @nullable
     @BuiltValueField(wireName: r'type')
     String get type;
 
-    @nullable
     @BuiltValueField(wireName: r'message')
     String get message;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
index ddd15d54a53..4a049fa1804 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
@@ -12,11 +12,9 @@ part 'category.g.dart';
 
 abstract class Category implements Built<Category, CategoryBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
index f26c6213820..0e91a35ef94 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
@@ -13,29 +13,23 @@ part 'order.g.dart';
 
 abstract class Order implements Built<Order, OrderBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'petId')
     int get petId;
 
-    @nullable
     @BuiltValueField(wireName: r'quantity')
     int get quantity;
 
-    @nullable
     @BuiltValueField(wireName: r'shipDate')
     DateTime get shipDate;
 
     /// Order Status
-    @nullable
     @BuiltValueField(wireName: r'status')
     OrderStatusEnum get status;
     // enum statusEnum {  placed,  approved,  delivered,  };
 
-    @nullable
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
index 98757f5e7ce..36945941fd4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
@@ -15,28 +15,22 @@ part 'pet.g.dart';
 
 abstract class Pet implements Built<Pet, PetBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'category')
     Category get category;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    @nullable
     @BuiltValueField(wireName: r'photoUrls')
     BuiltList<String> get photoUrls;
 
-    @nullable
     @BuiltValueField(wireName: r'tags')
     BuiltList<Tag> get tags;
 
     /// pet status in the store
-    @nullable
     @BuiltValueField(wireName: r'status')
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
index 528acd843e7..61a52895eeb 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
@@ -12,11 +12,9 @@ part 'tag.g.dart';
 
 abstract class Tag implements Built<Tag, TagBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
index 93259a43019..5282fdd50e4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
@@ -12,36 +12,28 @@ part 'user.g.dart';
 
 abstract class User implements Built<User, UserBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'username')
     String get username;
 
-    @nullable
     @BuiltValueField(wireName: r'firstName')
     String get firstName;
 
-    @nullable
     @BuiltValueField(wireName: r'lastName')
     String get lastName;
 
-    @nullable
     @BuiltValueField(wireName: r'email')
     String get email;
 
-    @nullable
     @BuiltValueField(wireName: r'password')
     String get password;
 
-    @nullable
     @BuiltValueField(wireName: r'phone')
     String get phone;
 
     /// User Status
-    @nullable
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
index c45491b84ba..816b29f7d25 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
@@ -13,11 +13,9 @@ part 'additional_properties_class.g.dart';
 
 abstract class AdditionalPropertiesClass implements Built<AdditionalPropertiesClass, AdditionalPropertiesClassBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'map_property')
     BuiltMap<String, String> get mapProperty;
 
-    @nullable
     @BuiltValueField(wireName: r'map_of_map_property')
     BuiltMap<String, BuiltMap<String, String>> get mapOfMapProperty;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
index ffbfe2ab5d6..74bfa9bfe87 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
@@ -12,11 +12,9 @@ part 'animal.g.dart';
 
 abstract class Animal implements Built<Animal, AnimalBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'className')
     String get className;
 
-    @nullable
     @BuiltValueField(wireName: r'color')
     String get color;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
index c5bc1e59646..c28ceff9050 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
@@ -12,15 +12,12 @@ part 'api_response.g.dart';
 
 abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'code')
     int get code;
 
-    @nullable
     @BuiltValueField(wireName: r'type')
     String get type;
 
-    @nullable
     @BuiltValueField(wireName: r'message')
     String get message;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
index 4345860869a..d1d5ad442cd 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
@@ -13,7 +13,6 @@ part 'array_of_array_of_number_only.g.dart';
 
 abstract class ArrayOfArrayOfNumberOnly implements Built<ArrayOfArrayOfNumberOnly, ArrayOfArrayOfNumberOnlyBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'ArrayArrayNumber')
     BuiltList<BuiltList<num>> get arrayArrayNumber;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
index 6198926fae6..ee6c7530f31 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
@@ -13,7 +13,6 @@ part 'array_of_number_only.g.dart';
 
 abstract class ArrayOfNumberOnly implements Built<ArrayOfNumberOnly, ArrayOfNumberOnlyBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'ArrayNumber')
     BuiltList<num> get arrayNumber;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
index 9aa9ea6d18c..6ca903cc681 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
@@ -14,15 +14,12 @@ part 'array_test.g.dart';
 
 abstract class ArrayTest implements Built<ArrayTest, ArrayTestBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'array_of_string')
     BuiltList<String> get arrayOfString;
 
-    @nullable
     @BuiltValueField(wireName: r'array_array_of_integer')
     BuiltList<BuiltList<int>> get arrayArrayOfInteger;
 
-    @nullable
     @BuiltValueField(wireName: r'array_array_of_model')
     BuiltList<BuiltList<ReadOnlyFirst>> get arrayArrayOfModel;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
index ba0c23da73a..6bd383b94f1 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
@@ -12,28 +12,22 @@ part 'capitalization.g.dart';
 
 abstract class Capitalization implements Built<Capitalization, CapitalizationBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'smallCamel')
     String get smallCamel;
 
-    @nullable
     @BuiltValueField(wireName: r'CapitalCamel')
     String get capitalCamel;
 
-    @nullable
     @BuiltValueField(wireName: r'small_Snake')
     String get smallSnake;
 
-    @nullable
     @BuiltValueField(wireName: r'Capital_Snake')
     String get capitalSnake;
 
-    @nullable
     @BuiltValueField(wireName: r'SCA_ETH_Flow_Points')
     String get sCAETHFlowPoints;
 
     /// Name of the pet 
-    @nullable
     @BuiltValueField(wireName: r'ATT_NAME')
     String get ATT_NAME;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
index 2fe5aa122ff..42f94faac9e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
@@ -14,15 +14,12 @@ part 'cat.g.dart';
 
 abstract class Cat implements Built<Cat, CatBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'className')
     String get className;
 
-    @nullable
     @BuiltValueField(wireName: r'color')
     String get color;
 
-    @nullable
     @BuiltValueField(wireName: r'declawed')
     bool get declawed;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
index b839a19cf09..d2f11ab178b 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
@@ -12,7 +12,6 @@ part 'cat_all_of.g.dart';
 
 abstract class CatAllOf implements Built<CatAllOf, CatAllOfBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'declawed')
     bool get declawed;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
index 559aaea651a..b22f5556e0d 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
@@ -12,11 +12,9 @@ part 'category.g.dart';
 
 abstract class Category implements Built<Category, CategoryBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
index 2c32de103b9..e8d55c7acda 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
@@ -12,7 +12,6 @@ part 'class_model.g.dart';
 
 abstract class ClassModel implements Built<ClassModel, ClassModelBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'_class')
     String get class_;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
index 443ce5d74a5..ab426aedd8f 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
@@ -14,15 +14,12 @@ part 'dog.g.dart';
 
 abstract class Dog implements Built<Dog, DogBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'className')
     String get className;
 
-    @nullable
     @BuiltValueField(wireName: r'color')
     String get color;
 
-    @nullable
     @BuiltValueField(wireName: r'breed')
     String get breed;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
index 7a0fba00849..8d643ba081b 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
@@ -12,7 +12,6 @@ part 'dog_all_of.g.dart';
 
 abstract class DogAllOf implements Built<DogAllOf, DogAllOfBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'breed')
     String get breed;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
index 7823f0163dc..ea29c1612e3 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
@@ -13,12 +13,10 @@ part 'enum_arrays.g.dart';
 
 abstract class EnumArrays implements Built<EnumArrays, EnumArraysBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'just_symbol')
     EnumArraysJustSymbolEnum get justSymbol;
     // enum justSymbolEnum {  >=,  $,  };
 
-    @nullable
     @BuiltValueField(wireName: r'array_enum')
     BuiltList<EnumArraysArrayEnumEnum> get arrayEnum;
     // enum arrayEnumEnum {  fish,  crab,  };
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
index e2fee623427..6c2f235973f 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
@@ -17,22 +17,18 @@ part 'enum_test.g.dart';
 
 abstract class EnumTest implements Built<EnumTest, EnumTestBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'enum_string')
     EnumTestEnumStringEnum get enumString;
     // enum enumStringEnum {  UPPER,  lower,  ,  };
 
-    @nullable
     @BuiltValueField(wireName: r'enum_string_required')
     EnumTestEnumStringRequiredEnum get enumStringRequired;
     // enum enumStringRequiredEnum {  UPPER,  lower,  ,  };
 
-    @nullable
     @BuiltValueField(wireName: r'enum_integer')
     EnumTestEnumIntegerEnum get enumInteger;
     // enum enumIntegerEnum {  1,  -1,  };
 
-    @nullable
     @BuiltValueField(wireName: r'enum_number')
     EnumTestEnumNumberEnum get enumNumber;
     // enum enumNumberEnum {  1.1,  -1.2,  };
@@ -42,17 +38,14 @@ abstract class EnumTest implements Built<EnumTest, EnumTestBuilder> {
     OuterEnum get outerEnum;
     // enum outerEnumEnum {  placed,  approved,  delivered,  };
 
-    @nullable
     @BuiltValueField(wireName: r'outerEnumInteger')
     OuterEnumInteger get outerEnumInteger;
     // enum outerEnumIntegerEnum {  0,  1,  2,  };
 
-    @nullable
     @BuiltValueField(wireName: r'outerEnumDefaultValue')
     OuterEnumDefaultValue get outerEnumDefaultValue;
     // enum outerEnumDefaultValueEnum {  placed,  approved,  delivered,  };
 
-    @nullable
     @BuiltValueField(wireName: r'outerEnumIntegerDefaultValue')
     OuterEnumIntegerDefaultValue get outerEnumIntegerDefaultValue;
     // enum outerEnumIntegerDefaultValueEnum {  0,  1,  2,  };
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
index 1bcfce7e9cf..00e29daa6d1 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
@@ -14,11 +14,9 @@ part 'file_schema_test_class.g.dart';
 
 abstract class FileSchemaTestClass implements Built<FileSchemaTestClass, FileSchemaTestClassBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'file')
     ModelFile get file;
 
-    @nullable
     @BuiltValueField(wireName: r'files')
     BuiltList<ModelFile> get files;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
index 9984cc16f58..e64b8dfb231 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
@@ -12,7 +12,6 @@ part 'foo.g.dart';
 
 abstract class Foo implements Built<Foo, FooBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'bar')
     String get bar;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
index 8a2898740a5..1b334d6e029 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
@@ -13,69 +13,53 @@ part 'format_test.g.dart';
 
 abstract class FormatTest implements Built<FormatTest, FormatTestBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'integer')
     int get integer;
 
-    @nullable
     @BuiltValueField(wireName: r'int32')
     int get int32;
 
-    @nullable
     @BuiltValueField(wireName: r'int64')
     int get int64;
 
-    @nullable
     @BuiltValueField(wireName: r'number')
     num get number;
 
-    @nullable
     @BuiltValueField(wireName: r'float')
     double get float;
 
-    @nullable
     @BuiltValueField(wireName: r'double')
     double get double_;
 
-    @nullable
     @BuiltValueField(wireName: r'decimal')
     double get decimal;
 
-    @nullable
     @BuiltValueField(wireName: r'string')
     String get string;
 
-    @nullable
     @BuiltValueField(wireName: r'byte')
     String get byte;
 
-    @nullable
     @BuiltValueField(wireName: r'binary')
     Uint8List get binary;
 
-    @nullable
     @BuiltValueField(wireName: r'date')
     DateTime get date;
 
-    @nullable
     @BuiltValueField(wireName: r'dateTime')
     DateTime get dateTime;
 
-    @nullable
     @BuiltValueField(wireName: r'uuid')
     String get uuid;
 
-    @nullable
     @BuiltValueField(wireName: r'password')
     String get password;
 
     /// A string that is a 10 digit number. Can have leading zeros.
-    @nullable
     @BuiltValueField(wireName: r'pattern_with_digits')
     String get patternWithDigits;
 
     /// A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.
-    @nullable
     @BuiltValueField(wireName: r'pattern_with_digits_and_delimiter')
     String get patternWithDigitsAndDelimiter;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
index 9c5eb2686cb..99a5ad5bdf4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
@@ -12,11 +12,9 @@ part 'has_only_read_only.g.dart';
 
 abstract class HasOnlyReadOnly implements Built<HasOnlyReadOnly, HasOnlyReadOnlyBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'bar')
     String get bar;
 
-    @nullable
     @BuiltValueField(wireName: r'foo')
     String get foo;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
index b82e139b7c1..20f340f2998 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
@@ -13,7 +13,6 @@ part 'inline_response_default.g.dart';
 
 abstract class InlineResponseDefault implements Built<InlineResponseDefault, InlineResponseDefaultBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'string')
     Foo get string;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
index 7397482d8e6..82f385a0493 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
@@ -13,20 +13,16 @@ part 'map_test.g.dart';
 
 abstract class MapTest implements Built<MapTest, MapTestBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'map_map_of_string')
     BuiltMap<String, BuiltMap<String, String>> get mapMapOfString;
 
-    @nullable
     @BuiltValueField(wireName: r'map_of_enum_string')
     BuiltMap<String, MapTestMapOfEnumStringEnum> get mapOfEnumString;
     // enum mapOfEnumStringEnum {  UPPER,  lower,  };
 
-    @nullable
     @BuiltValueField(wireName: r'direct_map')
     BuiltMap<String, bool> get directMap;
 
-    @nullable
     @BuiltValueField(wireName: r'indirect_map')
     BuiltMap<String, bool> get indirectMap;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
index 31be421309c..260410a3656 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
@@ -14,15 +14,12 @@ part 'mixed_properties_and_additional_properties_class.g.dart';
 
 abstract class MixedPropertiesAndAdditionalPropertiesClass implements Built<MixedPropertiesAndAdditionalPropertiesClass, MixedPropertiesAndAdditionalPropertiesClassBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'uuid')
     String get uuid;
 
-    @nullable
     @BuiltValueField(wireName: r'dateTime')
     DateTime get dateTime;
 
-    @nullable
     @BuiltValueField(wireName: r'map')
     BuiltMap<String, Animal> get map;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
index 5dafab90e8a..ebad4a1d0de 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
@@ -12,11 +12,9 @@ part 'model200_response.g.dart';
 
 abstract class Model200Response implements Built<Model200Response, Model200ResponseBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     int get name;
 
-    @nullable
     @BuiltValueField(wireName: r'class')
     String get class_;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
index 5a99a70d9af..6b39a0b6264 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
@@ -12,7 +12,6 @@ part 'model_client.g.dart';
 
 abstract class ModelClient implements Built<ModelClient, ModelClientBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'client')
     String get client;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
index 07474a9cc61..4756f08b715 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
@@ -13,7 +13,6 @@ part 'model_file.g.dart';
 abstract class ModelFile implements Built<ModelFile, ModelFileBuilder> {
 
     /// Test capitalization
-    @nullable
     @BuiltValueField(wireName: r'sourceURI')
     String get sourceURI;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
index 464a9e6baec..7034f15a33b 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
@@ -12,7 +12,6 @@ part 'model_list.g.dart';
 
 abstract class ModelList implements Built<ModelList, ModelListBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'123-list')
     String get n123list;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
index 31259ba2086..2ecc9d4cf8b 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
@@ -12,7 +12,6 @@ part 'model_return.g.dart';
 
 abstract class ModelReturn implements Built<ModelReturn, ModelReturnBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'return')
     int get return_;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
index e84fe0359d9..ae9a3efe1f4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
@@ -12,19 +12,15 @@ part 'name.g.dart';
 
 abstract class Name implements Built<Name, NameBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     int get name;
 
-    @nullable
     @BuiltValueField(wireName: r'snake_case')
     int get snakeCase;
 
-    @nullable
     @BuiltValueField(wireName: r'property')
     String get property;
 
-    @nullable
     @BuiltValueField(wireName: r'123Number')
     int get n123number;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
index 8306d9546bb..ee9e11bd290 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
@@ -46,7 +46,6 @@ abstract class NullableClass implements Built<NullableClass, NullableClassBuilde
     @BuiltValueField(wireName: r'array_and_items_nullable_prop')
     BuiltList<JsonObject> get arrayAndItemsNullableProp;
 
-    @nullable
     @BuiltValueField(wireName: r'array_items_nullable')
     BuiltList<JsonObject> get arrayItemsNullable;
 
@@ -58,7 +57,6 @@ abstract class NullableClass implements Built<NullableClass, NullableClassBuilde
     @BuiltValueField(wireName: r'object_and_items_nullable_prop')
     BuiltMap<String, JsonObject> get objectAndItemsNullableProp;
 
-    @nullable
     @BuiltValueField(wireName: r'object_items_nullable')
     BuiltMap<String, JsonObject> get objectItemsNullable;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
index 839165bb796..ff7f405d8de 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
@@ -12,7 +12,6 @@ part 'number_only.g.dart';
 
 abstract class NumberOnly implements Built<NumberOnly, NumberOnlyBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'JustNumber')
     num get justNumber;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
index f26c6213820..0e91a35ef94 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
@@ -13,29 +13,23 @@ part 'order.g.dart';
 
 abstract class Order implements Built<Order, OrderBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'petId')
     int get petId;
 
-    @nullable
     @BuiltValueField(wireName: r'quantity')
     int get quantity;
 
-    @nullable
     @BuiltValueField(wireName: r'shipDate')
     DateTime get shipDate;
 
     /// Order Status
-    @nullable
     @BuiltValueField(wireName: r'status')
     OrderStatusEnum get status;
     // enum statusEnum {  placed,  approved,  delivered,  };
 
-    @nullable
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
index bc748ef970f..05d3c2f2a15 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
@@ -12,15 +12,12 @@ part 'outer_composite.g.dart';
 
 abstract class OuterComposite implements Built<OuterComposite, OuterCompositeBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'my_number')
     num get myNumber;
 
-    @nullable
     @BuiltValueField(wireName: r'my_string')
     String get myString;
 
-    @nullable
     @BuiltValueField(wireName: r'my_boolean')
     bool get myBoolean;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
index 98757f5e7ce..36945941fd4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
@@ -15,28 +15,22 @@ part 'pet.g.dart';
 
 abstract class Pet implements Built<Pet, PetBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'category')
     Category get category;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    @nullable
     @BuiltValueField(wireName: r'photoUrls')
     BuiltList<String> get photoUrls;
 
-    @nullable
     @BuiltValueField(wireName: r'tags')
     BuiltList<Tag> get tags;
 
     /// pet status in the store
-    @nullable
     @BuiltValueField(wireName: r'status')
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
index 6ac8f07169c..571259c6805 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
@@ -12,11 +12,9 @@ part 'read_only_first.g.dart';
 
 abstract class ReadOnlyFirst implements Built<ReadOnlyFirst, ReadOnlyFirstBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'bar')
     String get bar;
 
-    @nullable
     @BuiltValueField(wireName: r'baz')
     String get baz;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
index dc072d5ddab..9c029c15695 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
@@ -12,7 +12,6 @@ part 'special_model_name.g.dart';
 
 abstract class SpecialModelName implements Built<SpecialModelName, SpecialModelNameBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'$special[property.name]')
     int get dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
index 528acd843e7..61a52895eeb 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
@@ -12,11 +12,9 @@ part 'tag.g.dart';
 
 abstract class Tag implements Built<Tag, TagBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
index 93259a43019..5282fdd50e4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
@@ -12,36 +12,28 @@ part 'user.g.dart';
 
 abstract class User implements Built<User, UserBuilder> {
 
-    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
-    @nullable
     @BuiltValueField(wireName: r'username')
     String get username;
 
-    @nullable
     @BuiltValueField(wireName: r'firstName')
     String get firstName;
 
-    @nullable
     @BuiltValueField(wireName: r'lastName')
     String get lastName;
 
-    @nullable
     @BuiltValueField(wireName: r'email')
     String get email;
 
-    @nullable
     @BuiltValueField(wireName: r'password')
     String get password;
 
-    @nullable
     @BuiltValueField(wireName: r'phone')
     String get phone;
 
     /// User Status
-    @nullable
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
-- 
GitLab


From 2359b35d855f1ea424304be26ef8a1f01242bd35 Mon Sep 17 00:00:00 2001
From: Peter Leibiger <kuhnroyal@gmail.com>
Date: Thu, 7 Jan 2021 17:30:20 +0100
Subject: [PATCH 4/5] [dart-dio] Properties are nullable when not required AND
 not nullable

---
 .../main/resources/dart-dio/class.mustache    |  5 ++++
 .../lib/model/api_response.dart               |  3 +++
 .../lib/model/category.dart                   |  2 ++
 .../petstore_client_lib/lib/model/order.dart  |  6 +++++
 .../petstore_client_lib/lib/model/pet.dart    |  4 +++
 .../petstore_client_lib/lib/model/tag.dart    |  2 ++
 .../petstore_client_lib/lib/model/user.dart   |  8 ++++++
 .../lib/model/api_response.dart               |  3 +++
 .../lib/model/category.dart                   |  2 ++
 .../lib/model/inline_object.dart              | 26 ++++++++++++++++++
 .../lib/model/inline_object1.dart             | 27 +++++++++++++++++++
 .../petstore_client_lib/lib/model/order.dart  |  6 +++++
 .../petstore_client_lib/lib/model/pet.dart    |  4 +++
 .../petstore_client_lib/lib/model/tag.dart    |  2 ++
 .../petstore_client_lib/lib/model/user.dart   |  8 ++++++
 .../model/additional_properties_class.dart    |  2 ++
 .../lib/model/animal.dart                     |  1 +
 .../lib/model/api_response.dart               |  3 +++
 .../model/array_of_array_of_number_only.dart  |  1 +
 .../lib/model/array_of_number_only.dart       |  1 +
 .../lib/model/array_test.dart                 |  3 +++
 .../lib/model/capitalization.dart             |  6 +++++
 .../lib/model/cat.dart                        |  2 ++
 .../lib/model/cat_all_of.dart                 |  1 +
 .../lib/model/category.dart                   |  1 +
 .../lib/model/class_model.dart                |  1 +
 .../lib/model/dog.dart                        |  2 ++
 .../lib/model/dog_all_of.dart                 |  1 +
 .../lib/model/enum_arrays.dart                |  2 ++
 .../lib/model/enum_test.dart                  |  6 +++++
 .../lib/model/file_schema_test_class.dart     |  2 ++
 .../lib/model/foo.dart                        |  1 +
 .../lib/model/format_test.dart                | 12 +++++++++
 .../lib/model/has_only_read_only.dart         |  2 ++
 .../lib/model/inline_response_default.dart    |  1 +
 .../lib/model/map_test.dart                   |  4 +++
 ...rties_and_additional_properties_class.dart |  3 +++
 .../lib/model/model200_response.dart          |  2 ++
 .../lib/model/model_client.dart               |  1 +
 .../lib/model/model_file.dart                 |  1 +
 .../lib/model/model_list.dart                 |  1 +
 .../lib/model/model_return.dart               |  1 +
 .../lib/model/name.dart                       |  3 +++
 .../lib/model/nullable_class.dart             |  2 ++
 .../lib/model/number_only.dart                |  1 +
 .../lib/model/order.dart                      |  6 +++++
 .../lib/model/outer_composite.dart            |  3 +++
 .../lib/model/pet.dart                        |  4 +++
 .../lib/model/read_only_first.dart            |  2 ++
 .../lib/model/special_model_name.dart         |  1 +
 .../lib/model/tag.dart                        |  2 ++
 .../lib/model/user.dart                       |  8 ++++++
 52 files changed, 204 insertions(+)
 create mode 100644 samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object.dart
 create mode 100644 samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object1.dart

diff --git a/modules/openapi-generator/src/main/resources/dart-dio/class.mustache b/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
index 02ac659904a..43799b8f256 100644
--- a/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
+++ b/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
@@ -12,6 +12,11 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
     {{#isNullable}}
     @nullable
     {{/isNullable}}
+    {{^isNullable}}
+    {{^required}}
+    @nullable
+    {{/required}}
+    {{/isNullable}}
     @BuiltValueField(wireName: r'{{baseName}}')
     {{{datatypeWithEnum}}} get {{name}};
     {{#allowableValues}}
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
index c28ceff9050..c5bc1e59646 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
@@ -12,12 +12,15 @@ part 'api_response.g.dart';
 
 abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'code')
     int get code;
 
+    @nullable
     @BuiltValueField(wireName: r'type')
     String get type;
 
+    @nullable
     @BuiltValueField(wireName: r'message')
     String get message;
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
index 4a049fa1804..ddd15d54a53 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
@@ -12,9 +12,11 @@ part 'category.g.dart';
 
 abstract class Category implements Built<Category, CategoryBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
index 0e91a35ef94..f26c6213820 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
@@ -13,23 +13,29 @@ part 'order.g.dart';
 
 abstract class Order implements Built<Order, OrderBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'petId')
     int get petId;
 
+    @nullable
     @BuiltValueField(wireName: r'quantity')
     int get quantity;
 
+    @nullable
     @BuiltValueField(wireName: r'shipDate')
     DateTime get shipDate;
 
     /// Order Status
+    @nullable
     @BuiltValueField(wireName: r'status')
     OrderStatusEnum get status;
     // enum statusEnum {  placed,  approved,  delivered,  };
 
+    @nullable
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
index 36945941fd4..3c05528613a 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
@@ -15,9 +15,11 @@ part 'pet.g.dart';
 
 abstract class Pet implements Built<Pet, PetBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'category')
     Category get category;
 
@@ -27,10 +29,12 @@ abstract class Pet implements Built<Pet, PetBuilder> {
     @BuiltValueField(wireName: r'photoUrls')
     BuiltList<String> get photoUrls;
 
+    @nullable
     @BuiltValueField(wireName: r'tags')
     BuiltList<Tag> get tags;
 
     /// pet status in the store
+    @nullable
     @BuiltValueField(wireName: r'status')
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
index 61a52895eeb..528acd843e7 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
@@ -12,9 +12,11 @@ part 'tag.g.dart';
 
 abstract class Tag implements Built<Tag, TagBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
index 5282fdd50e4..93259a43019 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
@@ -12,28 +12,36 @@ part 'user.g.dart';
 
 abstract class User implements Built<User, UserBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'username')
     String get username;
 
+    @nullable
     @BuiltValueField(wireName: r'firstName')
     String get firstName;
 
+    @nullable
     @BuiltValueField(wireName: r'lastName')
     String get lastName;
 
+    @nullable
     @BuiltValueField(wireName: r'email')
     String get email;
 
+    @nullable
     @BuiltValueField(wireName: r'password')
     String get password;
 
+    @nullable
     @BuiltValueField(wireName: r'phone')
     String get phone;
 
     /// User Status
+    @nullable
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
index c28ceff9050..c5bc1e59646 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
@@ -12,12 +12,15 @@ part 'api_response.g.dart';
 
 abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'code')
     int get code;
 
+    @nullable
     @BuiltValueField(wireName: r'type')
     String get type;
 
+    @nullable
     @BuiltValueField(wireName: r'message')
     String get message;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
index 4a049fa1804..ddd15d54a53 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
@@ -12,9 +12,11 @@ part 'category.g.dart';
 
 abstract class Category implements Built<Category, CategoryBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object.dart
new file mode 100644
index 00000000000..fb32b70cfa0
--- /dev/null
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object.dart
@@ -0,0 +1,26 @@
+import 'package:built_value/built_value.dart';
+import 'package:built_value/serializer.dart';
+
+part 'inline_object.g.dart';
+
+abstract class InlineObject implements Built<InlineObject, InlineObjectBuilder> {
+
+    /// Updated name of the pet
+    @nullable
+    @BuiltValueField(wireName: r'name')
+    String get name;
+
+    /// Updated status of the pet
+    @nullable
+    @BuiltValueField(wireName: r'status')
+    String get status;
+
+    // Boilerplate code needed to wire-up generated code
+    InlineObject._();
+
+    static void _initializeBuilder(InlineObjectBuilder b) => b;
+
+    factory InlineObject([void updates(InlineObjectBuilder b)]) = _$InlineObject;
+    static Serializer<InlineObject> get serializer => _$inlineObjectSerializer;
+}
+
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object1.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object1.dart
new file mode 100644
index 00000000000..73064295609
--- /dev/null
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object1.dart
@@ -0,0 +1,27 @@
+import 'dart:typed_data';
+import 'package:built_value/built_value.dart';
+import 'package:built_value/serializer.dart';
+
+part 'inline_object1.g.dart';
+
+abstract class InlineObject1 implements Built<InlineObject1, InlineObject1Builder> {
+
+    /// Additional data to pass to server
+    @nullable
+    @BuiltValueField(wireName: r'additionalMetadata')
+    String get additionalMetadata;
+
+    /// file to upload
+    @nullable
+    @BuiltValueField(wireName: r'file')
+    Uint8List get file;
+
+    // Boilerplate code needed to wire-up generated code
+    InlineObject1._();
+
+    static void _initializeBuilder(InlineObject1Builder b) => b;
+
+    factory InlineObject1([void updates(InlineObject1Builder b)]) = _$InlineObject1;
+    static Serializer<InlineObject1> get serializer => _$inlineObject1Serializer;
+}
+
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
index 0e91a35ef94..f26c6213820 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
@@ -13,23 +13,29 @@ part 'order.g.dart';
 
 abstract class Order implements Built<Order, OrderBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'petId')
     int get petId;
 
+    @nullable
     @BuiltValueField(wireName: r'quantity')
     int get quantity;
 
+    @nullable
     @BuiltValueField(wireName: r'shipDate')
     DateTime get shipDate;
 
     /// Order Status
+    @nullable
     @BuiltValueField(wireName: r'status')
     OrderStatusEnum get status;
     // enum statusEnum {  placed,  approved,  delivered,  };
 
+    @nullable
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
index 36945941fd4..3c05528613a 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
@@ -15,9 +15,11 @@ part 'pet.g.dart';
 
 abstract class Pet implements Built<Pet, PetBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'category')
     Category get category;
 
@@ -27,10 +29,12 @@ abstract class Pet implements Built<Pet, PetBuilder> {
     @BuiltValueField(wireName: r'photoUrls')
     BuiltList<String> get photoUrls;
 
+    @nullable
     @BuiltValueField(wireName: r'tags')
     BuiltList<Tag> get tags;
 
     /// pet status in the store
+    @nullable
     @BuiltValueField(wireName: r'status')
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
index 61a52895eeb..528acd843e7 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
@@ -12,9 +12,11 @@ part 'tag.g.dart';
 
 abstract class Tag implements Built<Tag, TagBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
index 5282fdd50e4..93259a43019 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
@@ -12,28 +12,36 @@ part 'user.g.dart';
 
 abstract class User implements Built<User, UserBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'username')
     String get username;
 
+    @nullable
     @BuiltValueField(wireName: r'firstName')
     String get firstName;
 
+    @nullable
     @BuiltValueField(wireName: r'lastName')
     String get lastName;
 
+    @nullable
     @BuiltValueField(wireName: r'email')
     String get email;
 
+    @nullable
     @BuiltValueField(wireName: r'password')
     String get password;
 
+    @nullable
     @BuiltValueField(wireName: r'phone')
     String get phone;
 
     /// User Status
+    @nullable
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
index 816b29f7d25..c45491b84ba 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
@@ -13,9 +13,11 @@ part 'additional_properties_class.g.dart';
 
 abstract class AdditionalPropertiesClass implements Built<AdditionalPropertiesClass, AdditionalPropertiesClassBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'map_property')
     BuiltMap<String, String> get mapProperty;
 
+    @nullable
     @BuiltValueField(wireName: r'map_of_map_property')
     BuiltMap<String, BuiltMap<String, String>> get mapOfMapProperty;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
index 74bfa9bfe87..187bee638f2 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
@@ -15,6 +15,7 @@ abstract class Animal implements Built<Animal, AnimalBuilder> {
     @BuiltValueField(wireName: r'className')
     String get className;
 
+    @nullable
     @BuiltValueField(wireName: r'color')
     String get color;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
index c28ceff9050..c5bc1e59646 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
@@ -12,12 +12,15 @@ part 'api_response.g.dart';
 
 abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'code')
     int get code;
 
+    @nullable
     @BuiltValueField(wireName: r'type')
     String get type;
 
+    @nullable
     @BuiltValueField(wireName: r'message')
     String get message;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
index d1d5ad442cd..4345860869a 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
@@ -13,6 +13,7 @@ part 'array_of_array_of_number_only.g.dart';
 
 abstract class ArrayOfArrayOfNumberOnly implements Built<ArrayOfArrayOfNumberOnly, ArrayOfArrayOfNumberOnlyBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'ArrayArrayNumber')
     BuiltList<BuiltList<num>> get arrayArrayNumber;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
index ee6c7530f31..6198926fae6 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
@@ -13,6 +13,7 @@ part 'array_of_number_only.g.dart';
 
 abstract class ArrayOfNumberOnly implements Built<ArrayOfNumberOnly, ArrayOfNumberOnlyBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'ArrayNumber')
     BuiltList<num> get arrayNumber;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
index 6ca903cc681..9aa9ea6d18c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
@@ -14,12 +14,15 @@ part 'array_test.g.dart';
 
 abstract class ArrayTest implements Built<ArrayTest, ArrayTestBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'array_of_string')
     BuiltList<String> get arrayOfString;
 
+    @nullable
     @BuiltValueField(wireName: r'array_array_of_integer')
     BuiltList<BuiltList<int>> get arrayArrayOfInteger;
 
+    @nullable
     @BuiltValueField(wireName: r'array_array_of_model')
     BuiltList<BuiltList<ReadOnlyFirst>> get arrayArrayOfModel;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
index 6bd383b94f1..ba0c23da73a 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
@@ -12,22 +12,28 @@ part 'capitalization.g.dart';
 
 abstract class Capitalization implements Built<Capitalization, CapitalizationBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'smallCamel')
     String get smallCamel;
 
+    @nullable
     @BuiltValueField(wireName: r'CapitalCamel')
     String get capitalCamel;
 
+    @nullable
     @BuiltValueField(wireName: r'small_Snake')
     String get smallSnake;
 
+    @nullable
     @BuiltValueField(wireName: r'Capital_Snake')
     String get capitalSnake;
 
+    @nullable
     @BuiltValueField(wireName: r'SCA_ETH_Flow_Points')
     String get sCAETHFlowPoints;
 
     /// Name of the pet 
+    @nullable
     @BuiltValueField(wireName: r'ATT_NAME')
     String get ATT_NAME;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
index 42f94faac9e..5c2ed2ed2f3 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
@@ -17,9 +17,11 @@ abstract class Cat implements Built<Cat, CatBuilder> {
     @BuiltValueField(wireName: r'className')
     String get className;
 
+    @nullable
     @BuiltValueField(wireName: r'color')
     String get color;
 
+    @nullable
     @BuiltValueField(wireName: r'declawed')
     bool get declawed;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
index d2f11ab178b..b839a19cf09 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
@@ -12,6 +12,7 @@ part 'cat_all_of.g.dart';
 
 abstract class CatAllOf implements Built<CatAllOf, CatAllOfBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'declawed')
     bool get declawed;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
index b22f5556e0d..d4b724c5090 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
@@ -12,6 +12,7 @@ part 'category.g.dart';
 
 abstract class Category implements Built<Category, CategoryBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
index e8d55c7acda..2c32de103b9 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
@@ -12,6 +12,7 @@ part 'class_model.g.dart';
 
 abstract class ClassModel implements Built<ClassModel, ClassModelBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'_class')
     String get class_;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
index ab426aedd8f..fab9bc6b08e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
@@ -17,9 +17,11 @@ abstract class Dog implements Built<Dog, DogBuilder> {
     @BuiltValueField(wireName: r'className')
     String get className;
 
+    @nullable
     @BuiltValueField(wireName: r'color')
     String get color;
 
+    @nullable
     @BuiltValueField(wireName: r'breed')
     String get breed;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
index 8d643ba081b..7a0fba00849 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
@@ -12,6 +12,7 @@ part 'dog_all_of.g.dart';
 
 abstract class DogAllOf implements Built<DogAllOf, DogAllOfBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'breed')
     String get breed;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
index ea29c1612e3..7823f0163dc 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
@@ -13,10 +13,12 @@ part 'enum_arrays.g.dart';
 
 abstract class EnumArrays implements Built<EnumArrays, EnumArraysBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'just_symbol')
     EnumArraysJustSymbolEnum get justSymbol;
     // enum justSymbolEnum {  >=,  $,  };
 
+    @nullable
     @BuiltValueField(wireName: r'array_enum')
     BuiltList<EnumArraysArrayEnumEnum> get arrayEnum;
     // enum arrayEnumEnum {  fish,  crab,  };
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
index 6c2f235973f..e061e086e9a 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
@@ -17,6 +17,7 @@ part 'enum_test.g.dart';
 
 abstract class EnumTest implements Built<EnumTest, EnumTestBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'enum_string')
     EnumTestEnumStringEnum get enumString;
     // enum enumStringEnum {  UPPER,  lower,  ,  };
@@ -25,10 +26,12 @@ abstract class EnumTest implements Built<EnumTest, EnumTestBuilder> {
     EnumTestEnumStringRequiredEnum get enumStringRequired;
     // enum enumStringRequiredEnum {  UPPER,  lower,  ,  };
 
+    @nullable
     @BuiltValueField(wireName: r'enum_integer')
     EnumTestEnumIntegerEnum get enumInteger;
     // enum enumIntegerEnum {  1,  -1,  };
 
+    @nullable
     @BuiltValueField(wireName: r'enum_number')
     EnumTestEnumNumberEnum get enumNumber;
     // enum enumNumberEnum {  1.1,  -1.2,  };
@@ -38,14 +41,17 @@ abstract class EnumTest implements Built<EnumTest, EnumTestBuilder> {
     OuterEnum get outerEnum;
     // enum outerEnumEnum {  placed,  approved,  delivered,  };
 
+    @nullable
     @BuiltValueField(wireName: r'outerEnumInteger')
     OuterEnumInteger get outerEnumInteger;
     // enum outerEnumIntegerEnum {  0,  1,  2,  };
 
+    @nullable
     @BuiltValueField(wireName: r'outerEnumDefaultValue')
     OuterEnumDefaultValue get outerEnumDefaultValue;
     // enum outerEnumDefaultValueEnum {  placed,  approved,  delivered,  };
 
+    @nullable
     @BuiltValueField(wireName: r'outerEnumIntegerDefaultValue')
     OuterEnumIntegerDefaultValue get outerEnumIntegerDefaultValue;
     // enum outerEnumIntegerDefaultValueEnum {  0,  1,  2,  };
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
index 00e29daa6d1..1bcfce7e9cf 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
@@ -14,9 +14,11 @@ part 'file_schema_test_class.g.dart';
 
 abstract class FileSchemaTestClass implements Built<FileSchemaTestClass, FileSchemaTestClassBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'file')
     ModelFile get file;
 
+    @nullable
     @BuiltValueField(wireName: r'files')
     BuiltList<ModelFile> get files;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
index e64b8dfb231..9984cc16f58 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
@@ -12,6 +12,7 @@ part 'foo.g.dart';
 
 abstract class Foo implements Built<Foo, FooBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'bar')
     String get bar;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
index 1b334d6e029..b6d7cacc4fb 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
@@ -13,42 +13,52 @@ part 'format_test.g.dart';
 
 abstract class FormatTest implements Built<FormatTest, FormatTestBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'integer')
     int get integer;
 
+    @nullable
     @BuiltValueField(wireName: r'int32')
     int get int32;
 
+    @nullable
     @BuiltValueField(wireName: r'int64')
     int get int64;
 
     @BuiltValueField(wireName: r'number')
     num get number;
 
+    @nullable
     @BuiltValueField(wireName: r'float')
     double get float;
 
+    @nullable
     @BuiltValueField(wireName: r'double')
     double get double_;
 
+    @nullable
     @BuiltValueField(wireName: r'decimal')
     double get decimal;
 
+    @nullable
     @BuiltValueField(wireName: r'string')
     String get string;
 
     @BuiltValueField(wireName: r'byte')
     String get byte;
 
+    @nullable
     @BuiltValueField(wireName: r'binary')
     Uint8List get binary;
 
     @BuiltValueField(wireName: r'date')
     DateTime get date;
 
+    @nullable
     @BuiltValueField(wireName: r'dateTime')
     DateTime get dateTime;
 
+    @nullable
     @BuiltValueField(wireName: r'uuid')
     String get uuid;
 
@@ -56,10 +66,12 @@ abstract class FormatTest implements Built<FormatTest, FormatTestBuilder> {
     String get password;
 
     /// A string that is a 10 digit number. Can have leading zeros.
+    @nullable
     @BuiltValueField(wireName: r'pattern_with_digits')
     String get patternWithDigits;
 
     /// A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.
+    @nullable
     @BuiltValueField(wireName: r'pattern_with_digits_and_delimiter')
     String get patternWithDigitsAndDelimiter;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
index 99a5ad5bdf4..9c5eb2686cb 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
@@ -12,9 +12,11 @@ part 'has_only_read_only.g.dart';
 
 abstract class HasOnlyReadOnly implements Built<HasOnlyReadOnly, HasOnlyReadOnlyBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'bar')
     String get bar;
 
+    @nullable
     @BuiltValueField(wireName: r'foo')
     String get foo;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
index 20f340f2998..b82e139b7c1 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
@@ -13,6 +13,7 @@ part 'inline_response_default.g.dart';
 
 abstract class InlineResponseDefault implements Built<InlineResponseDefault, InlineResponseDefaultBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'string')
     Foo get string;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
index 82f385a0493..7397482d8e6 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
@@ -13,16 +13,20 @@ part 'map_test.g.dart';
 
 abstract class MapTest implements Built<MapTest, MapTestBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'map_map_of_string')
     BuiltMap<String, BuiltMap<String, String>> get mapMapOfString;
 
+    @nullable
     @BuiltValueField(wireName: r'map_of_enum_string')
     BuiltMap<String, MapTestMapOfEnumStringEnum> get mapOfEnumString;
     // enum mapOfEnumStringEnum {  UPPER,  lower,  };
 
+    @nullable
     @BuiltValueField(wireName: r'direct_map')
     BuiltMap<String, bool> get directMap;
 
+    @nullable
     @BuiltValueField(wireName: r'indirect_map')
     BuiltMap<String, bool> get indirectMap;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
index 260410a3656..31be421309c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
@@ -14,12 +14,15 @@ part 'mixed_properties_and_additional_properties_class.g.dart';
 
 abstract class MixedPropertiesAndAdditionalPropertiesClass implements Built<MixedPropertiesAndAdditionalPropertiesClass, MixedPropertiesAndAdditionalPropertiesClassBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'uuid')
     String get uuid;
 
+    @nullable
     @BuiltValueField(wireName: r'dateTime')
     DateTime get dateTime;
 
+    @nullable
     @BuiltValueField(wireName: r'map')
     BuiltMap<String, Animal> get map;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
index ebad4a1d0de..5dafab90e8a 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
@@ -12,9 +12,11 @@ part 'model200_response.g.dart';
 
 abstract class Model200Response implements Built<Model200Response, Model200ResponseBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'name')
     int get name;
 
+    @nullable
     @BuiltValueField(wireName: r'class')
     String get class_;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
index 6b39a0b6264..5a99a70d9af 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
@@ -12,6 +12,7 @@ part 'model_client.g.dart';
 
 abstract class ModelClient implements Built<ModelClient, ModelClientBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'client')
     String get client;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
index 4756f08b715..07474a9cc61 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
@@ -13,6 +13,7 @@ part 'model_file.g.dart';
 abstract class ModelFile implements Built<ModelFile, ModelFileBuilder> {
 
     /// Test capitalization
+    @nullable
     @BuiltValueField(wireName: r'sourceURI')
     String get sourceURI;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
index 7034f15a33b..464a9e6baec 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
@@ -12,6 +12,7 @@ part 'model_list.g.dart';
 
 abstract class ModelList implements Built<ModelList, ModelListBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'123-list')
     String get n123list;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
index 2ecc9d4cf8b..31259ba2086 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
@@ -12,6 +12,7 @@ part 'model_return.g.dart';
 
 abstract class ModelReturn implements Built<ModelReturn, ModelReturnBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'return')
     int get return_;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
index ae9a3efe1f4..af454434b7c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
@@ -15,12 +15,15 @@ abstract class Name implements Built<Name, NameBuilder> {
     @BuiltValueField(wireName: r'name')
     int get name;
 
+    @nullable
     @BuiltValueField(wireName: r'snake_case')
     int get snakeCase;
 
+    @nullable
     @BuiltValueField(wireName: r'property')
     String get property;
 
+    @nullable
     @BuiltValueField(wireName: r'123Number')
     int get n123number;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
index ee9e11bd290..8306d9546bb 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
@@ -46,6 +46,7 @@ abstract class NullableClass implements Built<NullableClass, NullableClassBuilde
     @BuiltValueField(wireName: r'array_and_items_nullable_prop')
     BuiltList<JsonObject> get arrayAndItemsNullableProp;
 
+    @nullable
     @BuiltValueField(wireName: r'array_items_nullable')
     BuiltList<JsonObject> get arrayItemsNullable;
 
@@ -57,6 +58,7 @@ abstract class NullableClass implements Built<NullableClass, NullableClassBuilde
     @BuiltValueField(wireName: r'object_and_items_nullable_prop')
     BuiltMap<String, JsonObject> get objectAndItemsNullableProp;
 
+    @nullable
     @BuiltValueField(wireName: r'object_items_nullable')
     BuiltMap<String, JsonObject> get objectItemsNullable;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
index ff7f405d8de..839165bb796 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
@@ -12,6 +12,7 @@ part 'number_only.g.dart';
 
 abstract class NumberOnly implements Built<NumberOnly, NumberOnlyBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'JustNumber')
     num get justNumber;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
index 0e91a35ef94..f26c6213820 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
@@ -13,23 +13,29 @@ part 'order.g.dart';
 
 abstract class Order implements Built<Order, OrderBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'petId')
     int get petId;
 
+    @nullable
     @BuiltValueField(wireName: r'quantity')
     int get quantity;
 
+    @nullable
     @BuiltValueField(wireName: r'shipDate')
     DateTime get shipDate;
 
     /// Order Status
+    @nullable
     @BuiltValueField(wireName: r'status')
     OrderStatusEnum get status;
     // enum statusEnum {  placed,  approved,  delivered,  };
 
+    @nullable
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
index 05d3c2f2a15..bc748ef970f 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
@@ -12,12 +12,15 @@ part 'outer_composite.g.dart';
 
 abstract class OuterComposite implements Built<OuterComposite, OuterCompositeBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'my_number')
     num get myNumber;
 
+    @nullable
     @BuiltValueField(wireName: r'my_string')
     String get myString;
 
+    @nullable
     @BuiltValueField(wireName: r'my_boolean')
     bool get myBoolean;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
index 36945941fd4..3c05528613a 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
@@ -15,9 +15,11 @@ part 'pet.g.dart';
 
 abstract class Pet implements Built<Pet, PetBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'category')
     Category get category;
 
@@ -27,10 +29,12 @@ abstract class Pet implements Built<Pet, PetBuilder> {
     @BuiltValueField(wireName: r'photoUrls')
     BuiltList<String> get photoUrls;
 
+    @nullable
     @BuiltValueField(wireName: r'tags')
     BuiltList<Tag> get tags;
 
     /// pet status in the store
+    @nullable
     @BuiltValueField(wireName: r'status')
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
index 571259c6805..6ac8f07169c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
@@ -12,9 +12,11 @@ part 'read_only_first.g.dart';
 
 abstract class ReadOnlyFirst implements Built<ReadOnlyFirst, ReadOnlyFirstBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'bar')
     String get bar;
 
+    @nullable
     @BuiltValueField(wireName: r'baz')
     String get baz;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
index 9c029c15695..dc072d5ddab 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
@@ -12,6 +12,7 @@ part 'special_model_name.g.dart';
 
 abstract class SpecialModelName implements Built<SpecialModelName, SpecialModelNameBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'$special[property.name]')
     int get dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
index 61a52895eeb..528acd843e7 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
@@ -12,9 +12,11 @@ part 'tag.g.dart';
 
 abstract class Tag implements Built<Tag, TagBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'name')
     String get name;
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
index 5282fdd50e4..93259a43019 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
@@ -12,28 +12,36 @@ part 'user.g.dart';
 
 abstract class User implements Built<User, UserBuilder> {
 
+    @nullable
     @BuiltValueField(wireName: r'id')
     int get id;
 
+    @nullable
     @BuiltValueField(wireName: r'username')
     String get username;
 
+    @nullable
     @BuiltValueField(wireName: r'firstName')
     String get firstName;
 
+    @nullable
     @BuiltValueField(wireName: r'lastName')
     String get lastName;
 
+    @nullable
     @BuiltValueField(wireName: r'email')
     String get email;
 
+    @nullable
     @BuiltValueField(wireName: r'password')
     String get password;
 
+    @nullable
     @BuiltValueField(wireName: r'phone')
     String get phone;
 
     /// User Status
+    @nullable
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
-- 
GitLab


From f4768f44244fde122df31a71425ca61da9462ec4 Mon Sep 17 00:00:00 2001
From: Peter Leibiger <kuhnroyal@gmail.com>
Date: Fri, 8 Jan 2021 15:08:24 +0100
Subject: [PATCH 5/5] [dart][dart-dio] Support nullable/required fields

* properties in built_value need to be nullable when they are nullable in OAS or when they are not required in OAS
* built_value does not support serializing `null` values by default as it is based on a serialization format based on iterables/lists and not maps
* dart-dio uses the built_value json plugin to convert the built_value format to regular json
* by generating a custom serializer for each class we can add support for serializing `null` values if the property is required AND nullable in OAS
* this is a breaking change as not all properties in the models are nullable by default anymore
---
 .../languages/DartDioClientCodegen.java       |  28 +++
 .../main/resources/dart-dio/class.mustache    |  79 +++++++-
 .../resources/dart-dio/model_test.mustache    |   4 +-
 .../.openapi-generator/FILES                  |   9 +
 .../lib/model/api_response.dart               |  66 +++++-
 .../lib/model/category.dart                   |  56 +++++-
 .../petstore_client_lib/lib/model/order.dart  |  96 ++++++++-
 .../petstore_client_lib/lib/model/pet.dart    |  92 ++++++++-
 .../petstore_client_lib/lib/model/tag.dart    |  56 +++++-
 .../petstore_client_lib/lib/model/user.dart   | 116 ++++++++++-
 .../test/api_response_test.dart               |   9 +-
 .../test/category_test.dart                   |   7 +-
 .../petstore_client_lib/test/order_test.dart  |  13 +-
 .../petstore_client_lib/test/pet_test.dart    |  15 +-
 .../petstore_client_lib/test/tag_test.dart    |   7 +-
 .../petstore_client_lib/test/user_test.dart   |  19 +-
 .../.openapi-generator/FILES                  |   9 +
 .../lib/model/api_response.dart               |  66 +++++-
 .../lib/model/category.dart                   |  56 +++++-
 .../lib/model/inline_object.dart              |  26 ---
 .../lib/model/inline_object1.dart             |  27 ---
 .../petstore_client_lib/lib/model/order.dart  |  96 ++++++++-
 .../petstore_client_lib/lib/model/pet.dart    |  92 ++++++++-
 .../petstore_client_lib/lib/model/tag.dart    |  56 +++++-
 .../petstore_client_lib/lib/model/user.dart   | 116 ++++++++++-
 .../test/api_response_test.dart               |   3 +-
 .../test/category_test.dart                   |   3 +-
 .../petstore_client_lib/test/order_test.dart  |   3 +-
 .../petstore_client_lib/test/pet_test.dart    |   3 +-
 .../petstore_client_lib/test/tag_test.dart    |   3 +-
 .../petstore_client_lib/test/user_test.dart   |   3 +-
 .../.openapi-generator/FILES                  |  50 +++++
 .../model/additional_properties_class.dart    |  56 +++++-
 .../lib/model/animal.dart                     |  54 ++++-
 .../lib/model/api_response.dart               |  66 +++++-
 .../model/array_of_array_of_number_only.dart  |  46 ++++-
 .../lib/model/array_of_number_only.dart       |  46 ++++-
 .../lib/model/array_test.dart                 |  66 +++++-
 .../lib/model/capitalization.dart             |  96 ++++++++-
 .../lib/model/cat.dart                        |  64 +++++-
 .../lib/model/cat_all_of.dart                 |  46 ++++-
 .../lib/model/category.dart                   |  54 ++++-
 .../lib/model/class_model.dart                |  46 ++++-
 .../lib/model/dog.dart                        |  64 +++++-
 .../lib/model/dog_all_of.dart                 |  46 ++++-
 .../lib/model/enum_arrays.dart                |  56 +++++-
 .../lib/model/enum_test.dart                  | 114 ++++++++++-
 .../lib/model/file_schema_test_class.dart     |  56 +++++-
 .../lib/model/foo.dart                        |  46 ++++-
 .../lib/model/format_test.dart                | 188 +++++++++++++++++-
 .../lib/model/has_only_read_only.dart         |  56 +++++-
 .../lib/model/health_check_result.dart        |  46 ++++-
 .../lib/model/inline_response_default.dart    |  46 ++++-
 .../lib/model/map_test.dart                   |  76 ++++++-
 ...rties_and_additional_properties_class.dart |  66 +++++-
 .../lib/model/model200_response.dart          |  56 +++++-
 .../lib/model/model_client.dart               |  46 ++++-
 .../lib/model/model_file.dart                 |  46 ++++-
 .../lib/model/model_list.dart                 |  46 ++++-
 .../lib/model/model_return.dart               |  46 ++++-
 .../lib/model/name.dart                       |  74 ++++++-
 .../lib/model/nullable_class.dart             | 156 ++++++++++++++-
 .../lib/model/number_only.dart                |  46 ++++-
 .../lib/model/order.dart                      |  96 ++++++++-
 .../lib/model/outer_composite.dart            |  66 +++++-
 .../lib/model/pet.dart                        |  92 ++++++++-
 .../lib/model/read_only_first.dart            |  56 +++++-
 .../lib/model/special_model_name.dart         |  46 ++++-
 .../lib/model/tag.dart                        |  56 +++++-
 .../lib/model/user.dart                       | 116 ++++++++++-
 .../additional_properties_class_test.dart     |   3 +-
 .../test/animal_test.dart                     |   3 +-
 .../test/api_response_test.dart               |   3 +-
 .../array_of_array_of_number_only_test.dart   |   3 +-
 .../test/array_of_number_only_test.dart       |   3 +-
 .../test/array_test_test.dart                 |   3 +-
 .../test/capitalization_test.dart             |   3 +-
 .../test/cat_all_of_test.dart                 |   3 +-
 .../test/cat_test.dart                        |   3 +-
 .../test/category_test.dart                   |   3 +-
 .../test/class_model_test.dart                |   3 +-
 .../test/dog_all_of_test.dart                 |   3 +-
 .../test/dog_test.dart                        |   3 +-
 .../test/enum_arrays_test.dart                |   3 +-
 .../test/enum_test_test.dart                  |   3 +-
 .../test/file_schema_test_class_test.dart     |   3 +-
 .../test/foo_test.dart                        |   3 +-
 .../test/format_test_test.dart                |   3 +-
 .../test/has_only_read_only_test.dart         |   3 +-
 .../test/health_check_result_test.dart        |   3 +-
 .../test/inline_response_default_test.dart    |   3 +-
 .../test/map_test_test.dart                   |   3 +-
 ..._and_additional_properties_class_test.dart |   3 +-
 .../test/model200_response_test.dart          |   3 +-
 .../test/model_client_test.dart               |   3 +-
 .../test/model_file_test.dart                 |   3 +-
 .../test/model_list_test.dart                 |   3 +-
 .../test/model_return_test.dart               |   3 +-
 .../test/name_test.dart                       |   3 +-
 .../test/nullable_class_test.dart             |   3 +-
 .../test/number_only_test.dart                |   3 +-
 .../test/order_test.dart                      |   3 +-
 .../test/outer_composite_test.dart            |   3 +-
 .../test/pet_test.dart                        |   3 +-
 .../test/read_only_first_test.dart            |   3 +-
 .../test/special_model_name_test.dart         |   3 +-
 .../test/tag_test.dart                        |   3 +-
 .../test/user_test.dart                       |   3 +-
 108 files changed, 3710 insertions(+), 232 deletions(-)
 delete mode 100644 samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object.dart
 delete mode 100644 samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object1.dart

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 b52516de7e6..9af34265af9 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
@@ -281,6 +281,34 @@ public class DartDioClientCodegen extends DartClientCodegen {
             // enums are generated with built_value and make use of BuiltSet
             model.imports.add("BuiltSet");
         }
+
+        property.getVendorExtensions().put("x-built-value-serializer-type", createBuiltValueSerializerType(property));
+    }
+
+    private String createBuiltValueSerializerType(CodegenProperty property) {
+        final StringBuilder sb = new StringBuilder("const FullType(");
+        if (property.isContainer) {
+            appendCollection(sb, property);
+        } else {
+            sb.append(property.datatypeWithEnum);
+        }
+        sb.append(")");
+        return sb.toString();
+    }
+
+    private void appendCollection(StringBuilder sb, CodegenProperty property) {
+        sb.append(property.baseType);
+        sb.append(", [FullType(");
+        if (property.isMap) {
+            // a map always has string keys
+            sb.append("String), FullType(");
+        }
+        if (property.items.isContainer) {
+            appendCollection(sb, property.items);
+        } else {
+            sb.append(property.items.datatypeWithEnum);
+        }
+        sb.append(")]");
     }
 
     @Override
diff --git a/modules/openapi-generator/src/main/resources/dart-dio/class.mustache b/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
index 43799b8f256..f3788e54d8b 100644
--- a/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
+++ b/modules/openapi-generator/src/main/resources/dart-dio/class.mustache
@@ -24,14 +24,89 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
     {{/allowableValues}}
 
 {{/vars}}
-    // Boilerplate code needed to wire-up generated code
     {{classname}}._();
 
     static void _initializeBuilder({{{classname}}}Builder b) => b{{#vars}}{{#defaultValue}}
         ..{{{name}}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/vars}};
 
     factory {{classname}}([void updates({{classname}}Builder b)]) = _${{classname}};
-    static Serializer<{{classname}}> get serializer => _${{#lambda.camelcase}}{{{classname}}}{{/lambda.camelcase}}Serializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<{{classname}}> get serializer => _${{classname}}Serializer();
+}
+
+{{!
+    Generate a custom serializer in order to support combinations of reuqired and nullable.
+    By default built_value does not serialize null fields.
+}}
+class _${{classname}}Serializer implements StructuredSerializer<{{classname}}> {
+
+    @override
+    final Iterable<Type> types = const [{{classname}}, _${{classname}}];
+    @override
+    final String wireName = r'{{classname}}';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, {{{classname}}} object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        {{#vars}}
+        {{#required}}
+        {{!
+            A required property need to always be part of the serialized output.
+            When it is nullable, null is serialized, otherwise it is an error if it is null.
+        }}
+        result
+            ..add(r'{{baseName}}')
+            ..add({{#isNullable}}object.{{{name}}} == null ? null : {{/isNullable}}serializers.serialize(object.{{{name}}},
+                specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}));
+        {{/required}}
+        {{^required}}
+        if (object.{{{name}}} != null) {
+            {{! Non-required properties are only serialized if not null. }}
+            result
+                ..add(r'{{baseName}}')
+                ..add(serializers.serialize(object.{{{name}}},
+                    specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}));
+        }
+        {{/required}}
+        {{/vars}}
+        return result;
+    }
+
+    @override
+    {{classname}} deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = {{classname}}Builder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                {{#vars}}
+                case r'{{baseName}}':
+                    {{#isContainer}}
+                    result.{{{name}}}.replace(serializers.deserialize(value,
+                        specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}) as {{{datatypeWithEnum}}});
+                    {{/isContainer}}
+                    {{#isModel}}
+                    result.{{{name}}}.replace(serializers.deserialize(value,
+                        specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}) as {{{datatypeWithEnum}}});
+                    {{/isModel}}
+                    {{^isContainer}}
+                    {{^isModel}}
+                    result.{{{name}}} = serializers.deserialize(value,
+                        specifiedType: {{{vendorExtensions.x-built-value-serializer-type}}}) as {{{datatypeWithEnum}}};
+                    {{/isModel}}
+                    {{/isContainer}}
+                    break;
+                {{/vars}}
+            }
+        }
+        return result.build();
+    }
 }
 {{!
     Generate an enum for any variables that are declared as inline enums
diff --git a/modules/openapi-generator/src/main/resources/dart-dio/model_test.mustache b/modules/openapi-generator/src/main/resources/dart-dio/model_test.mustache
index 0afdb340155..73a2ef0b7a6 100644
--- a/modules/openapi-generator/src/main/resources/dart-dio/model_test.mustache
+++ b/modules/openapi-generator/src/main/resources/dart-dio/model_test.mustache
@@ -6,7 +6,9 @@ import 'package:test/test.dart';
 // tests for {{{classname}}}
 void main() {
   {{^isEnum}}
-  final instance = {{{classname}}}();
+  {{! Due to required vars without default value we can not create a full instance here }}
+  final instance = {{{classname}}}Builder();
+  // TODO add properties to the builder and call build()
   {{/isEnum}}
 
   group({{{classname}}}, () {
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/FILES b/samples/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/FILES
index b14eb44e2a0..52be39a9cca 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/FILES
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/FILES
@@ -27,3 +27,12 @@ lib/model/tag.dart
 lib/model/user.dart
 lib/serializers.dart
 pubspec.yaml
+test/api_response_test.dart
+test/category_test.dart
+test/order_test.dart
+test/pet_api_test.dart
+test/pet_test.dart
+test/store_api_test.dart
+test/tag_test.dart
+test/user_api_test.dart
+test/user_test.dart
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
index c5bc1e59646..4305a565df0 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
@@ -24,12 +24,74 @@ abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
     @BuiltValueField(wireName: r'message')
     String get message;
 
-    // Boilerplate code needed to wire-up generated code
     ApiResponse._();
 
     static void _initializeBuilder(ApiResponseBuilder b) => b;
 
     factory ApiResponse([void updates(ApiResponseBuilder b)]) = _$ApiResponse;
-    static Serializer<ApiResponse> get serializer => _$apiResponseSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ApiResponse> get serializer => _$ApiResponseSerializer();
+}
+
+class _$ApiResponseSerializer implements StructuredSerializer<ApiResponse> {
+
+    @override
+    final Iterable<Type> types = const [ApiResponse, _$ApiResponse];
+    @override
+    final String wireName = r'ApiResponse';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ApiResponse object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.code != null) {
+            result
+                ..add(r'code')
+                ..add(serializers.serialize(object.code,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.type != null) {
+            result
+                ..add(r'type')
+                ..add(serializers.serialize(object.type,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.message != null) {
+            result
+                ..add(r'message')
+                ..add(serializers.serialize(object.message,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    ApiResponse deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ApiResponseBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'code':
+                    result.code = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'type':
+                    result.type = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'message':
+                    result.message = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
index ddd15d54a53..a9a78e8424c 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
@@ -20,12 +20,64 @@ abstract class Category implements Built<Category, CategoryBuilder> {
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    // Boilerplate code needed to wire-up generated code
     Category._();
 
     static void _initializeBuilder(CategoryBuilder b) => b;
 
     factory Category([void updates(CategoryBuilder b)]) = _$Category;
-    static Serializer<Category> get serializer => _$categorySerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Category> get serializer => _$CategorySerializer();
+}
+
+class _$CategorySerializer implements StructuredSerializer<Category> {
+
+    @override
+    final Iterable<Type> types = const [Category, _$Category];
+    @override
+    final String wireName = r'Category';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Category object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.name != null) {
+            result
+                ..add(r'name')
+                ..add(serializers.serialize(object.name,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Category deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = CategoryBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
index f26c6213820..318572b7326 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
@@ -39,14 +39,106 @@ abstract class Order implements Built<Order, OrderBuilder> {
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
-    // Boilerplate code needed to wire-up generated code
     Order._();
 
     static void _initializeBuilder(OrderBuilder b) => b
         ..complete = false;
 
     factory Order([void updates(OrderBuilder b)]) = _$Order;
-    static Serializer<Order> get serializer => _$orderSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Order> get serializer => _$OrderSerializer();
+}
+
+class _$OrderSerializer implements StructuredSerializer<Order> {
+
+    @override
+    final Iterable<Type> types = const [Order, _$Order];
+    @override
+    final String wireName = r'Order';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Order object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.petId != null) {
+            result
+                ..add(r'petId')
+                ..add(serializers.serialize(object.petId,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.quantity != null) {
+            result
+                ..add(r'quantity')
+                ..add(serializers.serialize(object.quantity,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.shipDate != null) {
+            result
+                ..add(r'shipDate')
+                ..add(serializers.serialize(object.shipDate,
+                    specifiedType: const FullType(DateTime)));
+        }
+        if (object.status != null) {
+            result
+                ..add(r'status')
+                ..add(serializers.serialize(object.status,
+                    specifiedType: const FullType(OrderStatusEnum)));
+        }
+        if (object.complete != null) {
+            result
+                ..add(r'complete')
+                ..add(serializers.serialize(object.complete,
+                    specifiedType: const FullType(bool)));
+        }
+        return result;
+    }
+
+    @override
+    Order deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = OrderBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'petId':
+                    result.petId = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'quantity':
+                    result.quantity = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'shipDate':
+                    result.shipDate = serializers.deserialize(value,
+                        specifiedType: const FullType(DateTime)) as DateTime;
+                    break;
+                case r'status':
+                    result.status = serializers.deserialize(value,
+                        specifiedType: const FullType(OrderStatusEnum)) as OrderStatusEnum;
+                    break;
+                case r'complete':
+                    result.complete = serializers.deserialize(value,
+                        specifiedType: const FullType(bool)) as bool;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class OrderStatusEnum extends EnumClass {
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
index 3c05528613a..2de9741aa40 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
@@ -39,13 +39,101 @@ abstract class Pet implements Built<Pet, PetBuilder> {
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
 
-    // Boilerplate code needed to wire-up generated code
     Pet._();
 
     static void _initializeBuilder(PetBuilder b) => b;
 
     factory Pet([void updates(PetBuilder b)]) = _$Pet;
-    static Serializer<Pet> get serializer => _$petSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Pet> get serializer => _$PetSerializer();
+}
+
+class _$PetSerializer implements StructuredSerializer<Pet> {
+
+    @override
+    final Iterable<Type> types = const [Pet, _$Pet];
+    @override
+    final String wireName = r'Pet';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Pet object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.category != null) {
+            result
+                ..add(r'category')
+                ..add(serializers.serialize(object.category,
+                    specifiedType: const FullType(Category)));
+        }
+        result
+            ..add(r'name')
+            ..add(serializers.serialize(object.name,
+                specifiedType: const FullType(String)));
+        result
+            ..add(r'photoUrls')
+            ..add(serializers.serialize(object.photoUrls,
+                specifiedType: const FullType(BuiltList, [FullType(String)])));
+        if (object.tags != null) {
+            result
+                ..add(r'tags')
+                ..add(serializers.serialize(object.tags,
+                    specifiedType: const FullType(BuiltList, [FullType(Tag)])));
+        }
+        if (object.status != null) {
+            result
+                ..add(r'status')
+                ..add(serializers.serialize(object.status,
+                    specifiedType: const FullType(PetStatusEnum)));
+        }
+        return result;
+    }
+
+    @override
+    Pet deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = PetBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'category':
+                    result.category.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(Category)) as Category);
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'photoUrls':
+                    result.photoUrls.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(String)])) as BuiltList<String>);
+                    break;
+                case r'tags':
+                    result.tags.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(Tag)])) as BuiltList<Tag>);
+                    break;
+                case r'status':
+                    result.status = serializers.deserialize(value,
+                        specifiedType: const FullType(PetStatusEnum)) as PetStatusEnum;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class PetStatusEnum extends EnumClass {
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
index 528acd843e7..e1a3fcf392c 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
@@ -20,12 +20,64 @@ abstract class Tag implements Built<Tag, TagBuilder> {
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    // Boilerplate code needed to wire-up generated code
     Tag._();
 
     static void _initializeBuilder(TagBuilder b) => b;
 
     factory Tag([void updates(TagBuilder b)]) = _$Tag;
-    static Serializer<Tag> get serializer => _$tagSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Tag> get serializer => _$TagSerializer();
+}
+
+class _$TagSerializer implements StructuredSerializer<Tag> {
+
+    @override
+    final Iterable<Type> types = const [Tag, _$Tag];
+    @override
+    final String wireName = r'Tag';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Tag object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.name != null) {
+            result
+                ..add(r'name')
+                ..add(serializers.serialize(object.name,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Tag deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = TagBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
index 93259a43019..c58dbae1dfc 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
@@ -45,12 +45,124 @@ abstract class User implements Built<User, UserBuilder> {
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
-    // Boilerplate code needed to wire-up generated code
     User._();
 
     static void _initializeBuilder(UserBuilder b) => b;
 
     factory User([void updates(UserBuilder b)]) = _$User;
-    static Serializer<User> get serializer => _$userSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<User> get serializer => _$UserSerializer();
+}
+
+class _$UserSerializer implements StructuredSerializer<User> {
+
+    @override
+    final Iterable<Type> types = const [User, _$User];
+    @override
+    final String wireName = r'User';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, User object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.username != null) {
+            result
+                ..add(r'username')
+                ..add(serializers.serialize(object.username,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.firstName != null) {
+            result
+                ..add(r'firstName')
+                ..add(serializers.serialize(object.firstName,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.lastName != null) {
+            result
+                ..add(r'lastName')
+                ..add(serializers.serialize(object.lastName,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.email != null) {
+            result
+                ..add(r'email')
+                ..add(serializers.serialize(object.email,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.password != null) {
+            result
+                ..add(r'password')
+                ..add(serializers.serialize(object.password,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.phone != null) {
+            result
+                ..add(r'phone')
+                ..add(serializers.serialize(object.phone,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.userStatus != null) {
+            result
+                ..add(r'userStatus')
+                ..add(serializers.serialize(object.userStatus,
+                    specifiedType: const FullType(int)));
+        }
+        return result;
+    }
+
+    @override
+    User deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = UserBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'username':
+                    result.username = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'firstName':
+                    result.firstName = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'lastName':
+                    result.lastName = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'email':
+                    result.email = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'password':
+                    result.password = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'phone':
+                    result.phone = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'userStatus':
+                    result.userStatus = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart b/samples/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart
index d80b2976160..cb3253820b5 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart
@@ -3,20 +3,21 @@ import 'package:test/test.dart';
 
 // tests for ApiResponse
 void main() {
-  final instance = ApiResponse();
+  final instance = ApiResponseBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ApiResponse, () {
-    // int code (default value: null)
+    // int code
     test('to test the property `code`', () async {
       // TODO
     });
 
-    // String type (default value: null)
+    // String type
     test('to test the property `type`', () async {
       // TODO
     });
 
-    // String message (default value: null)
+    // String message
     test('to test the property `message`', () async {
       // TODO
     });
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart b/samples/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart
index 571e020bf63..efe01d9b3cb 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart
@@ -3,15 +3,16 @@ import 'package:test/test.dart';
 
 // tests for Category
 void main() {
-  final instance = Category();
+  final instance = CategoryBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Category, () {
-    // int id (default value: null)
+    // int id
     test('to test the property `id`', () async {
       // TODO
     });
 
-    // String name (default value: null)
+    // String name
     test('to test the property `name`', () async {
       // TODO
     });
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart b/samples/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart
index ea9ac6e14eb..0b063de2de5 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart
@@ -3,31 +3,32 @@ import 'package:test/test.dart';
 
 // tests for Order
 void main() {
-  final instance = Order();
+  final instance = OrderBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Order, () {
-    // int id (default value: null)
+    // int id
     test('to test the property `id`', () async {
       // TODO
     });
 
-    // int petId (default value: null)
+    // int petId
     test('to test the property `petId`', () async {
       // TODO
     });
 
-    // int quantity (default value: null)
+    // int quantity
     test('to test the property `quantity`', () async {
       // TODO
     });
 
-    // DateTime shipDate (default value: null)
+    // DateTime shipDate
     test('to test the property `shipDate`', () async {
       // TODO
     });
 
     // Order Status
-    // String status (default value: null)
+    // String status
     test('to test the property `status`', () async {
       // TODO
     });
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart b/samples/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart
index 63cfc070e93..bce1534977e 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart
@@ -3,36 +3,37 @@ import 'package:test/test.dart';
 
 // tests for Pet
 void main() {
-  final instance = Pet();
+  final instance = PetBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Pet, () {
-    // int id (default value: null)
+    // int id
     test('to test the property `id`', () async {
       // TODO
     });
 
-    // Category category (default value: null)
+    // Category category
     test('to test the property `category`', () async {
       // TODO
     });
 
-    // String name (default value: null)
+    // String name
     test('to test the property `name`', () async {
       // TODO
     });
 
-    // BuiltList<String> photoUrls (default value: const [])
+    // BuiltList<String> photoUrls
     test('to test the property `photoUrls`', () async {
       // TODO
     });
 
-    // BuiltList<Tag> tags (default value: const [])
+    // BuiltList<Tag> tags
     test('to test the property `tags`', () async {
       // TODO
     });
 
     // pet status in the store
-    // String status (default value: null)
+    // String status
     test('to test the property `status`', () async {
       // TODO
     });
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart b/samples/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart
index c2757a71863..867b246921c 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart
@@ -3,15 +3,16 @@ import 'package:test/test.dart';
 
 // tests for Tag
 void main() {
-  final instance = Tag();
+  final instance = TagBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Tag, () {
-    // int id (default value: null)
+    // int id
     test('to test the property `id`', () async {
       // TODO
     });
 
-    // String name (default value: null)
+    // String name
     test('to test the property `name`', () async {
       // TODO
     });
diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/test/user_test.dart b/samples/client/petstore/dart-dio/petstore_client_lib/test/user_test.dart
index b598e7f7fef..01a3b6f07de 100644
--- a/samples/client/petstore/dart-dio/petstore_client_lib/test/user_test.dart
+++ b/samples/client/petstore/dart-dio/petstore_client_lib/test/user_test.dart
@@ -3,46 +3,47 @@ import 'package:test/test.dart';
 
 // tests for User
 void main() {
-  final instance = User();
+  final instance = UserBuilder();
+  // TODO add properties to the builder and call build()
 
   group(User, () {
-    // int id (default value: null)
+    // int id
     test('to test the property `id`', () async {
       // TODO
     });
 
-    // String username (default value: null)
+    // String username
     test('to test the property `username`', () async {
       // TODO
     });
 
-    // String firstName (default value: null)
+    // String firstName
     test('to test the property `firstName`', () async {
       // TODO
     });
 
-    // String lastName (default value: null)
+    // String lastName
     test('to test the property `lastName`', () async {
       // TODO
     });
 
-    // String email (default value: null)
+    // String email
     test('to test the property `email`', () async {
       // TODO
     });
 
-    // String password (default value: null)
+    // String password
     test('to test the property `password`', () async {
       // TODO
     });
 
-    // String phone (default value: null)
+    // String phone
     test('to test the property `phone`', () async {
       // TODO
     });
 
     // User Status
-    // int userStatus (default value: null)
+    // int userStatus
     test('to test the property `userStatus`', () async {
       // TODO
     });
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/FILES b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/FILES
index b14eb44e2a0..52be39a9cca 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/FILES
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/FILES
@@ -27,3 +27,12 @@ lib/model/tag.dart
 lib/model/user.dart
 lib/serializers.dart
 pubspec.yaml
+test/api_response_test.dart
+test/category_test.dart
+test/order_test.dart
+test/pet_api_test.dart
+test/pet_test.dart
+test/store_api_test.dart
+test/tag_test.dart
+test/user_api_test.dart
+test/user_test.dart
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
index c5bc1e59646..4305a565df0 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/api_response.dart
@@ -24,12 +24,74 @@ abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
     @BuiltValueField(wireName: r'message')
     String get message;
 
-    // Boilerplate code needed to wire-up generated code
     ApiResponse._();
 
     static void _initializeBuilder(ApiResponseBuilder b) => b;
 
     factory ApiResponse([void updates(ApiResponseBuilder b)]) = _$ApiResponse;
-    static Serializer<ApiResponse> get serializer => _$apiResponseSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ApiResponse> get serializer => _$ApiResponseSerializer();
+}
+
+class _$ApiResponseSerializer implements StructuredSerializer<ApiResponse> {
+
+    @override
+    final Iterable<Type> types = const [ApiResponse, _$ApiResponse];
+    @override
+    final String wireName = r'ApiResponse';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ApiResponse object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.code != null) {
+            result
+                ..add(r'code')
+                ..add(serializers.serialize(object.code,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.type != null) {
+            result
+                ..add(r'type')
+                ..add(serializers.serialize(object.type,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.message != null) {
+            result
+                ..add(r'message')
+                ..add(serializers.serialize(object.message,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    ApiResponse deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ApiResponseBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'code':
+                    result.code = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'type':
+                    result.type = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'message':
+                    result.message = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
index ddd15d54a53..a9a78e8424c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/category.dart
@@ -20,12 +20,64 @@ abstract class Category implements Built<Category, CategoryBuilder> {
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    // Boilerplate code needed to wire-up generated code
     Category._();
 
     static void _initializeBuilder(CategoryBuilder b) => b;
 
     factory Category([void updates(CategoryBuilder b)]) = _$Category;
-    static Serializer<Category> get serializer => _$categorySerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Category> get serializer => _$CategorySerializer();
+}
+
+class _$CategorySerializer implements StructuredSerializer<Category> {
+
+    @override
+    final Iterable<Type> types = const [Category, _$Category];
+    @override
+    final String wireName = r'Category';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Category object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.name != null) {
+            result
+                ..add(r'name')
+                ..add(serializers.serialize(object.name,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Category deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = CategoryBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object.dart
deleted file mode 100644
index fb32b70cfa0..00000000000
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-import 'package:built_value/built_value.dart';
-import 'package:built_value/serializer.dart';
-
-part 'inline_object.g.dart';
-
-abstract class InlineObject implements Built<InlineObject, InlineObjectBuilder> {
-
-    /// Updated name of the pet
-    @nullable
-    @BuiltValueField(wireName: r'name')
-    String get name;
-
-    /// Updated status of the pet
-    @nullable
-    @BuiltValueField(wireName: r'status')
-    String get status;
-
-    // Boilerplate code needed to wire-up generated code
-    InlineObject._();
-
-    static void _initializeBuilder(InlineObjectBuilder b) => b;
-
-    factory InlineObject([void updates(InlineObjectBuilder b)]) = _$InlineObject;
-    static Serializer<InlineObject> get serializer => _$inlineObjectSerializer;
-}
-
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object1.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object1.dart
deleted file mode 100644
index 73064295609..00000000000
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/inline_object1.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-import 'dart:typed_data';
-import 'package:built_value/built_value.dart';
-import 'package:built_value/serializer.dart';
-
-part 'inline_object1.g.dart';
-
-abstract class InlineObject1 implements Built<InlineObject1, InlineObject1Builder> {
-
-    /// Additional data to pass to server
-    @nullable
-    @BuiltValueField(wireName: r'additionalMetadata')
-    String get additionalMetadata;
-
-    /// file to upload
-    @nullable
-    @BuiltValueField(wireName: r'file')
-    Uint8List get file;
-
-    // Boilerplate code needed to wire-up generated code
-    InlineObject1._();
-
-    static void _initializeBuilder(InlineObject1Builder b) => b;
-
-    factory InlineObject1([void updates(InlineObject1Builder b)]) = _$InlineObject1;
-    static Serializer<InlineObject1> get serializer => _$inlineObject1Serializer;
-}
-
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
index f26c6213820..318572b7326 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/order.dart
@@ -39,14 +39,106 @@ abstract class Order implements Built<Order, OrderBuilder> {
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
-    // Boilerplate code needed to wire-up generated code
     Order._();
 
     static void _initializeBuilder(OrderBuilder b) => b
         ..complete = false;
 
     factory Order([void updates(OrderBuilder b)]) = _$Order;
-    static Serializer<Order> get serializer => _$orderSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Order> get serializer => _$OrderSerializer();
+}
+
+class _$OrderSerializer implements StructuredSerializer<Order> {
+
+    @override
+    final Iterable<Type> types = const [Order, _$Order];
+    @override
+    final String wireName = r'Order';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Order object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.petId != null) {
+            result
+                ..add(r'petId')
+                ..add(serializers.serialize(object.petId,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.quantity != null) {
+            result
+                ..add(r'quantity')
+                ..add(serializers.serialize(object.quantity,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.shipDate != null) {
+            result
+                ..add(r'shipDate')
+                ..add(serializers.serialize(object.shipDate,
+                    specifiedType: const FullType(DateTime)));
+        }
+        if (object.status != null) {
+            result
+                ..add(r'status')
+                ..add(serializers.serialize(object.status,
+                    specifiedType: const FullType(OrderStatusEnum)));
+        }
+        if (object.complete != null) {
+            result
+                ..add(r'complete')
+                ..add(serializers.serialize(object.complete,
+                    specifiedType: const FullType(bool)));
+        }
+        return result;
+    }
+
+    @override
+    Order deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = OrderBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'petId':
+                    result.petId = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'quantity':
+                    result.quantity = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'shipDate':
+                    result.shipDate = serializers.deserialize(value,
+                        specifiedType: const FullType(DateTime)) as DateTime;
+                    break;
+                case r'status':
+                    result.status = serializers.deserialize(value,
+                        specifiedType: const FullType(OrderStatusEnum)) as OrderStatusEnum;
+                    break;
+                case r'complete':
+                    result.complete = serializers.deserialize(value,
+                        specifiedType: const FullType(bool)) as bool;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class OrderStatusEnum extends EnumClass {
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
index 3c05528613a..2de9741aa40 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/pet.dart
@@ -39,13 +39,101 @@ abstract class Pet implements Built<Pet, PetBuilder> {
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
 
-    // Boilerplate code needed to wire-up generated code
     Pet._();
 
     static void _initializeBuilder(PetBuilder b) => b;
 
     factory Pet([void updates(PetBuilder b)]) = _$Pet;
-    static Serializer<Pet> get serializer => _$petSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Pet> get serializer => _$PetSerializer();
+}
+
+class _$PetSerializer implements StructuredSerializer<Pet> {
+
+    @override
+    final Iterable<Type> types = const [Pet, _$Pet];
+    @override
+    final String wireName = r'Pet';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Pet object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.category != null) {
+            result
+                ..add(r'category')
+                ..add(serializers.serialize(object.category,
+                    specifiedType: const FullType(Category)));
+        }
+        result
+            ..add(r'name')
+            ..add(serializers.serialize(object.name,
+                specifiedType: const FullType(String)));
+        result
+            ..add(r'photoUrls')
+            ..add(serializers.serialize(object.photoUrls,
+                specifiedType: const FullType(BuiltList, [FullType(String)])));
+        if (object.tags != null) {
+            result
+                ..add(r'tags')
+                ..add(serializers.serialize(object.tags,
+                    specifiedType: const FullType(BuiltList, [FullType(Tag)])));
+        }
+        if (object.status != null) {
+            result
+                ..add(r'status')
+                ..add(serializers.serialize(object.status,
+                    specifiedType: const FullType(PetStatusEnum)));
+        }
+        return result;
+    }
+
+    @override
+    Pet deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = PetBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'category':
+                    result.category.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(Category)) as Category);
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'photoUrls':
+                    result.photoUrls.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(String)])) as BuiltList<String>);
+                    break;
+                case r'tags':
+                    result.tags.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(Tag)])) as BuiltList<Tag>);
+                    break;
+                case r'status':
+                    result.status = serializers.deserialize(value,
+                        specifiedType: const FullType(PetStatusEnum)) as PetStatusEnum;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class PetStatusEnum extends EnumClass {
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
index 528acd843e7..e1a3fcf392c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/tag.dart
@@ -20,12 +20,64 @@ abstract class Tag implements Built<Tag, TagBuilder> {
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    // Boilerplate code needed to wire-up generated code
     Tag._();
 
     static void _initializeBuilder(TagBuilder b) => b;
 
     factory Tag([void updates(TagBuilder b)]) = _$Tag;
-    static Serializer<Tag> get serializer => _$tagSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Tag> get serializer => _$TagSerializer();
+}
+
+class _$TagSerializer implements StructuredSerializer<Tag> {
+
+    @override
+    final Iterable<Type> types = const [Tag, _$Tag];
+    @override
+    final String wireName = r'Tag';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Tag object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.name != null) {
+            result
+                ..add(r'name')
+                ..add(serializers.serialize(object.name,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Tag deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = TagBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
index 93259a43019..c58dbae1dfc 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/model/user.dart
@@ -45,12 +45,124 @@ abstract class User implements Built<User, UserBuilder> {
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
-    // Boilerplate code needed to wire-up generated code
     User._();
 
     static void _initializeBuilder(UserBuilder b) => b;
 
     factory User([void updates(UserBuilder b)]) = _$User;
-    static Serializer<User> get serializer => _$userSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<User> get serializer => _$UserSerializer();
+}
+
+class _$UserSerializer implements StructuredSerializer<User> {
+
+    @override
+    final Iterable<Type> types = const [User, _$User];
+    @override
+    final String wireName = r'User';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, User object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.username != null) {
+            result
+                ..add(r'username')
+                ..add(serializers.serialize(object.username,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.firstName != null) {
+            result
+                ..add(r'firstName')
+                ..add(serializers.serialize(object.firstName,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.lastName != null) {
+            result
+                ..add(r'lastName')
+                ..add(serializers.serialize(object.lastName,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.email != null) {
+            result
+                ..add(r'email')
+                ..add(serializers.serialize(object.email,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.password != null) {
+            result
+                ..add(r'password')
+                ..add(serializers.serialize(object.password,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.phone != null) {
+            result
+                ..add(r'phone')
+                ..add(serializers.serialize(object.phone,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.userStatus != null) {
+            result
+                ..add(r'userStatus')
+                ..add(serializers.serialize(object.userStatus,
+                    specifiedType: const FullType(int)));
+        }
+        return result;
+    }
+
+    @override
+    User deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = UserBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'username':
+                    result.username = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'firstName':
+                    result.firstName = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'lastName':
+                    result.lastName = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'email':
+                    result.email = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'password':
+                    result.password = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'phone':
+                    result.phone = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'userStatus':
+                    result.userStatus = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart
index 39d3ffc2941..cb3253820b5 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ApiResponse
 void main() {
-  final instance = ApiResponse();
+  final instance = ApiResponseBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ApiResponse, () {
     // int code
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart
index cf8f893d513..efe01d9b3cb 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Category
 void main() {
-  final instance = Category();
+  final instance = CategoryBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Category, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart
index 25b2cc396f3..0b063de2de5 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Order
 void main() {
-  final instance = Order();
+  final instance = OrderBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Order, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart
index 9d5b6e4dd4a..bce1534977e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Pet
 void main() {
-  final instance = Pet();
+  final instance = PetBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Pet, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart
index 0dbda6e4986..867b246921c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Tag
 void main() {
-  final instance = Tag();
+  final instance = TagBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Tag, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/user_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/user_test.dart
index 09e720b625c..01a3b6f07de 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/user_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/test/user_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for User
 void main() {
-  final instance = User();
+  final instance = UserBuilder();
+  // TODO add properties to the builder and call build()
 
   group(User, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/FILES b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/FILES
index a4900515e29..36b9055f967 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/FILES
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/FILES
@@ -109,3 +109,53 @@ lib/model/tag.dart
 lib/model/user.dart
 lib/serializers.dart
 pubspec.yaml
+test/additional_properties_class_test.dart
+test/animal_test.dart
+test/another_fake_api_test.dart
+test/api_response_test.dart
+test/array_of_array_of_number_only_test.dart
+test/array_of_number_only_test.dart
+test/array_test_test.dart
+test/capitalization_test.dart
+test/cat_all_of_test.dart
+test/cat_test.dart
+test/category_test.dart
+test/class_model_test.dart
+test/default_api_test.dart
+test/dog_all_of_test.dart
+test/dog_test.dart
+test/enum_arrays_test.dart
+test/enum_test_test.dart
+test/fake_api_test.dart
+test/fake_classname_tags123_api_test.dart
+test/file_schema_test_class_test.dart
+test/foo_test.dart
+test/format_test_test.dart
+test/has_only_read_only_test.dart
+test/health_check_result_test.dart
+test/inline_response_default_test.dart
+test/map_test_test.dart
+test/mixed_properties_and_additional_properties_class_test.dart
+test/model200_response_test.dart
+test/model_client_test.dart
+test/model_enum_class_test.dart
+test/model_file_test.dart
+test/model_list_test.dart
+test/model_return_test.dart
+test/name_test.dart
+test/nullable_class_test.dart
+test/number_only_test.dart
+test/order_test.dart
+test/outer_composite_test.dart
+test/outer_enum_default_value_test.dart
+test/outer_enum_integer_default_value_test.dart
+test/outer_enum_integer_test.dart
+test/outer_enum_test.dart
+test/pet_api_test.dart
+test/pet_test.dart
+test/read_only_first_test.dart
+test/special_model_name_test.dart
+test/store_api_test.dart
+test/tag_test.dart
+test/user_api_test.dart
+test/user_test.dart
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
index c45491b84ba..8501143b9ce 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/additional_properties_class.dart
@@ -21,12 +21,64 @@ abstract class AdditionalPropertiesClass implements Built<AdditionalPropertiesCl
     @BuiltValueField(wireName: r'map_of_map_property')
     BuiltMap<String, BuiltMap<String, String>> get mapOfMapProperty;
 
-    // Boilerplate code needed to wire-up generated code
     AdditionalPropertiesClass._();
 
     static void _initializeBuilder(AdditionalPropertiesClassBuilder b) => b;
 
     factory AdditionalPropertiesClass([void updates(AdditionalPropertiesClassBuilder b)]) = _$AdditionalPropertiesClass;
-    static Serializer<AdditionalPropertiesClass> get serializer => _$additionalPropertiesClassSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<AdditionalPropertiesClass> get serializer => _$AdditionalPropertiesClassSerializer();
+}
+
+class _$AdditionalPropertiesClassSerializer implements StructuredSerializer<AdditionalPropertiesClass> {
+
+    @override
+    final Iterable<Type> types = const [AdditionalPropertiesClass, _$AdditionalPropertiesClass];
+    @override
+    final String wireName = r'AdditionalPropertiesClass';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, AdditionalPropertiesClass object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.mapProperty != null) {
+            result
+                ..add(r'map_property')
+                ..add(serializers.serialize(object.mapProperty,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(String)])));
+        }
+        if (object.mapOfMapProperty != null) {
+            result
+                ..add(r'map_of_map_property')
+                ..add(serializers.serialize(object.mapOfMapProperty,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(BuiltMap, [FullType(String), FullType(String)])])));
+        }
+        return result;
+    }
+
+    @override
+    AdditionalPropertiesClass deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = AdditionalPropertiesClassBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'map_property':
+                    result.mapProperty.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(String)])) as BuiltMap<String, String>);
+                    break;
+                case r'map_of_map_property':
+                    result.mapOfMapProperty.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(BuiltMap, [FullType(String), FullType(String)])])) as BuiltMap<String, BuiltMap<String, String>>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
index 187bee638f2..f109f21f56e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/animal.dart
@@ -19,13 +19,63 @@ abstract class Animal implements Built<Animal, AnimalBuilder> {
     @BuiltValueField(wireName: r'color')
     String get color;
 
-    // Boilerplate code needed to wire-up generated code
     Animal._();
 
     static void _initializeBuilder(AnimalBuilder b) => b
         ..color = 'red';
 
     factory Animal([void updates(AnimalBuilder b)]) = _$Animal;
-    static Serializer<Animal> get serializer => _$animalSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Animal> get serializer => _$AnimalSerializer();
+}
+
+class _$AnimalSerializer implements StructuredSerializer<Animal> {
+
+    @override
+    final Iterable<Type> types = const [Animal, _$Animal];
+    @override
+    final String wireName = r'Animal';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Animal object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        result
+            ..add(r'className')
+            ..add(serializers.serialize(object.className,
+                specifiedType: const FullType(String)));
+        if (object.color != null) {
+            result
+                ..add(r'color')
+                ..add(serializers.serialize(object.color,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Animal deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = AnimalBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'className':
+                    result.className = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'color':
+                    result.color = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
index c5bc1e59646..4305a565df0 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/api_response.dart
@@ -24,12 +24,74 @@ abstract class ApiResponse implements Built<ApiResponse, ApiResponseBuilder> {
     @BuiltValueField(wireName: r'message')
     String get message;
 
-    // Boilerplate code needed to wire-up generated code
     ApiResponse._();
 
     static void _initializeBuilder(ApiResponseBuilder b) => b;
 
     factory ApiResponse([void updates(ApiResponseBuilder b)]) = _$ApiResponse;
-    static Serializer<ApiResponse> get serializer => _$apiResponseSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ApiResponse> get serializer => _$ApiResponseSerializer();
+}
+
+class _$ApiResponseSerializer implements StructuredSerializer<ApiResponse> {
+
+    @override
+    final Iterable<Type> types = const [ApiResponse, _$ApiResponse];
+    @override
+    final String wireName = r'ApiResponse';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ApiResponse object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.code != null) {
+            result
+                ..add(r'code')
+                ..add(serializers.serialize(object.code,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.type != null) {
+            result
+                ..add(r'type')
+                ..add(serializers.serialize(object.type,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.message != null) {
+            result
+                ..add(r'message')
+                ..add(serializers.serialize(object.message,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    ApiResponse deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ApiResponseBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'code':
+                    result.code = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'type':
+                    result.type = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'message':
+                    result.message = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
index 4345860869a..5b382c31752 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_array_of_number_only.dart
@@ -17,12 +17,54 @@ abstract class ArrayOfArrayOfNumberOnly implements Built<ArrayOfArrayOfNumberOnl
     @BuiltValueField(wireName: r'ArrayArrayNumber')
     BuiltList<BuiltList<num>> get arrayArrayNumber;
 
-    // Boilerplate code needed to wire-up generated code
     ArrayOfArrayOfNumberOnly._();
 
     static void _initializeBuilder(ArrayOfArrayOfNumberOnlyBuilder b) => b;
 
     factory ArrayOfArrayOfNumberOnly([void updates(ArrayOfArrayOfNumberOnlyBuilder b)]) = _$ArrayOfArrayOfNumberOnly;
-    static Serializer<ArrayOfArrayOfNumberOnly> get serializer => _$arrayOfArrayOfNumberOnlySerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ArrayOfArrayOfNumberOnly> get serializer => _$ArrayOfArrayOfNumberOnlySerializer();
+}
+
+class _$ArrayOfArrayOfNumberOnlySerializer implements StructuredSerializer<ArrayOfArrayOfNumberOnly> {
+
+    @override
+    final Iterable<Type> types = const [ArrayOfArrayOfNumberOnly, _$ArrayOfArrayOfNumberOnly];
+    @override
+    final String wireName = r'ArrayOfArrayOfNumberOnly';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ArrayOfArrayOfNumberOnly object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.arrayArrayNumber != null) {
+            result
+                ..add(r'ArrayArrayNumber')
+                ..add(serializers.serialize(object.arrayArrayNumber,
+                    specifiedType: const FullType(BuiltList, [FullType(BuiltList, [FullType(num)])])));
+        }
+        return result;
+    }
+
+    @override
+    ArrayOfArrayOfNumberOnly deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ArrayOfArrayOfNumberOnlyBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'ArrayArrayNumber':
+                    result.arrayArrayNumber.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(BuiltList, [FullType(num)])])) as BuiltList<BuiltList<num>>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
index 6198926fae6..1b45893d912 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_of_number_only.dart
@@ -17,12 +17,54 @@ abstract class ArrayOfNumberOnly implements Built<ArrayOfNumberOnly, ArrayOfNumb
     @BuiltValueField(wireName: r'ArrayNumber')
     BuiltList<num> get arrayNumber;
 
-    // Boilerplate code needed to wire-up generated code
     ArrayOfNumberOnly._();
 
     static void _initializeBuilder(ArrayOfNumberOnlyBuilder b) => b;
 
     factory ArrayOfNumberOnly([void updates(ArrayOfNumberOnlyBuilder b)]) = _$ArrayOfNumberOnly;
-    static Serializer<ArrayOfNumberOnly> get serializer => _$arrayOfNumberOnlySerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ArrayOfNumberOnly> get serializer => _$ArrayOfNumberOnlySerializer();
+}
+
+class _$ArrayOfNumberOnlySerializer implements StructuredSerializer<ArrayOfNumberOnly> {
+
+    @override
+    final Iterable<Type> types = const [ArrayOfNumberOnly, _$ArrayOfNumberOnly];
+    @override
+    final String wireName = r'ArrayOfNumberOnly';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ArrayOfNumberOnly object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.arrayNumber != null) {
+            result
+                ..add(r'ArrayNumber')
+                ..add(serializers.serialize(object.arrayNumber,
+                    specifiedType: const FullType(BuiltList, [FullType(num)])));
+        }
+        return result;
+    }
+
+    @override
+    ArrayOfNumberOnly deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ArrayOfNumberOnlyBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'ArrayNumber':
+                    result.arrayNumber.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(num)])) as BuiltList<num>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
index 9aa9ea6d18c..ad929468283 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/array_test.dart
@@ -26,12 +26,74 @@ abstract class ArrayTest implements Built<ArrayTest, ArrayTestBuilder> {
     @BuiltValueField(wireName: r'array_array_of_model')
     BuiltList<BuiltList<ReadOnlyFirst>> get arrayArrayOfModel;
 
-    // Boilerplate code needed to wire-up generated code
     ArrayTest._();
 
     static void _initializeBuilder(ArrayTestBuilder b) => b;
 
     factory ArrayTest([void updates(ArrayTestBuilder b)]) = _$ArrayTest;
-    static Serializer<ArrayTest> get serializer => _$arrayTestSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ArrayTest> get serializer => _$ArrayTestSerializer();
+}
+
+class _$ArrayTestSerializer implements StructuredSerializer<ArrayTest> {
+
+    @override
+    final Iterable<Type> types = const [ArrayTest, _$ArrayTest];
+    @override
+    final String wireName = r'ArrayTest';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ArrayTest object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.arrayOfString != null) {
+            result
+                ..add(r'array_of_string')
+                ..add(serializers.serialize(object.arrayOfString,
+                    specifiedType: const FullType(BuiltList, [FullType(String)])));
+        }
+        if (object.arrayArrayOfInteger != null) {
+            result
+                ..add(r'array_array_of_integer')
+                ..add(serializers.serialize(object.arrayArrayOfInteger,
+                    specifiedType: const FullType(BuiltList, [FullType(BuiltList, [FullType(int)])])));
+        }
+        if (object.arrayArrayOfModel != null) {
+            result
+                ..add(r'array_array_of_model')
+                ..add(serializers.serialize(object.arrayArrayOfModel,
+                    specifiedType: const FullType(BuiltList, [FullType(BuiltList, [FullType(ReadOnlyFirst)])])));
+        }
+        return result;
+    }
+
+    @override
+    ArrayTest deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ArrayTestBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'array_of_string':
+                    result.arrayOfString.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(String)])) as BuiltList<String>);
+                    break;
+                case r'array_array_of_integer':
+                    result.arrayArrayOfInteger.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(BuiltList, [FullType(int)])])) as BuiltList<BuiltList<int>>);
+                    break;
+                case r'array_array_of_model':
+                    result.arrayArrayOfModel.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(BuiltList, [FullType(ReadOnlyFirst)])])) as BuiltList<BuiltList<ReadOnlyFirst>>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
index ba0c23da73a..701b42d1f75 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/capitalization.dart
@@ -37,12 +37,104 @@ abstract class Capitalization implements Built<Capitalization, CapitalizationBui
     @BuiltValueField(wireName: r'ATT_NAME')
     String get ATT_NAME;
 
-    // Boilerplate code needed to wire-up generated code
     Capitalization._();
 
     static void _initializeBuilder(CapitalizationBuilder b) => b;
 
     factory Capitalization([void updates(CapitalizationBuilder b)]) = _$Capitalization;
-    static Serializer<Capitalization> get serializer => _$capitalizationSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Capitalization> get serializer => _$CapitalizationSerializer();
+}
+
+class _$CapitalizationSerializer implements StructuredSerializer<Capitalization> {
+
+    @override
+    final Iterable<Type> types = const [Capitalization, _$Capitalization];
+    @override
+    final String wireName = r'Capitalization';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Capitalization object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.smallCamel != null) {
+            result
+                ..add(r'smallCamel')
+                ..add(serializers.serialize(object.smallCamel,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.capitalCamel != null) {
+            result
+                ..add(r'CapitalCamel')
+                ..add(serializers.serialize(object.capitalCamel,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.smallSnake != null) {
+            result
+                ..add(r'small_Snake')
+                ..add(serializers.serialize(object.smallSnake,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.capitalSnake != null) {
+            result
+                ..add(r'Capital_Snake')
+                ..add(serializers.serialize(object.capitalSnake,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.sCAETHFlowPoints != null) {
+            result
+                ..add(r'SCA_ETH_Flow_Points')
+                ..add(serializers.serialize(object.sCAETHFlowPoints,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.ATT_NAME != null) {
+            result
+                ..add(r'ATT_NAME')
+                ..add(serializers.serialize(object.ATT_NAME,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Capitalization deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = CapitalizationBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'smallCamel':
+                    result.smallCamel = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'CapitalCamel':
+                    result.capitalCamel = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'small_Snake':
+                    result.smallSnake = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'Capital_Snake':
+                    result.capitalSnake = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'SCA_ETH_Flow_Points':
+                    result.sCAETHFlowPoints = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'ATT_NAME':
+                    result.ATT_NAME = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
index 5c2ed2ed2f3..3ef967e3e24 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat.dart
@@ -25,13 +25,73 @@ abstract class Cat implements Built<Cat, CatBuilder> {
     @BuiltValueField(wireName: r'declawed')
     bool get declawed;
 
-    // Boilerplate code needed to wire-up generated code
     Cat._();
 
     static void _initializeBuilder(CatBuilder b) => b
         ..color = 'red';
 
     factory Cat([void updates(CatBuilder b)]) = _$Cat;
-    static Serializer<Cat> get serializer => _$catSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Cat> get serializer => _$CatSerializer();
+}
+
+class _$CatSerializer implements StructuredSerializer<Cat> {
+
+    @override
+    final Iterable<Type> types = const [Cat, _$Cat];
+    @override
+    final String wireName = r'Cat';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Cat object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        result
+            ..add(r'className')
+            ..add(serializers.serialize(object.className,
+                specifiedType: const FullType(String)));
+        if (object.color != null) {
+            result
+                ..add(r'color')
+                ..add(serializers.serialize(object.color,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.declawed != null) {
+            result
+                ..add(r'declawed')
+                ..add(serializers.serialize(object.declawed,
+                    specifiedType: const FullType(bool)));
+        }
+        return result;
+    }
+
+    @override
+    Cat deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = CatBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'className':
+                    result.className = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'color':
+                    result.color = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'declawed':
+                    result.declawed = serializers.deserialize(value,
+                        specifiedType: const FullType(bool)) as bool;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
index b839a19cf09..1a436750e1e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/cat_all_of.dart
@@ -16,12 +16,54 @@ abstract class CatAllOf implements Built<CatAllOf, CatAllOfBuilder> {
     @BuiltValueField(wireName: r'declawed')
     bool get declawed;
 
-    // Boilerplate code needed to wire-up generated code
     CatAllOf._();
 
     static void _initializeBuilder(CatAllOfBuilder b) => b;
 
     factory CatAllOf([void updates(CatAllOfBuilder b)]) = _$CatAllOf;
-    static Serializer<CatAllOf> get serializer => _$catAllOfSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<CatAllOf> get serializer => _$CatAllOfSerializer();
+}
+
+class _$CatAllOfSerializer implements StructuredSerializer<CatAllOf> {
+
+    @override
+    final Iterable<Type> types = const [CatAllOf, _$CatAllOf];
+    @override
+    final String wireName = r'CatAllOf';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, CatAllOf object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.declawed != null) {
+            result
+                ..add(r'declawed')
+                ..add(serializers.serialize(object.declawed,
+                    specifiedType: const FullType(bool)));
+        }
+        return result;
+    }
+
+    @override
+    CatAllOf deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = CatAllOfBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'declawed':
+                    result.declawed = serializers.deserialize(value,
+                        specifiedType: const FullType(bool)) as bool;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
index d4b724c5090..6b22c591644 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/category.dart
@@ -19,13 +19,63 @@ abstract class Category implements Built<Category, CategoryBuilder> {
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    // Boilerplate code needed to wire-up generated code
     Category._();
 
     static void _initializeBuilder(CategoryBuilder b) => b
         ..name = 'default-name';
 
     factory Category([void updates(CategoryBuilder b)]) = _$Category;
-    static Serializer<Category> get serializer => _$categorySerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Category> get serializer => _$CategorySerializer();
+}
+
+class _$CategorySerializer implements StructuredSerializer<Category> {
+
+    @override
+    final Iterable<Type> types = const [Category, _$Category];
+    @override
+    final String wireName = r'Category';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Category object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        result
+            ..add(r'name')
+            ..add(serializers.serialize(object.name,
+                specifiedType: const FullType(String)));
+        return result;
+    }
+
+    @override
+    Category deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = CategoryBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
index 2c32de103b9..9044d61963b 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/class_model.dart
@@ -16,12 +16,54 @@ abstract class ClassModel implements Built<ClassModel, ClassModelBuilder> {
     @BuiltValueField(wireName: r'_class')
     String get class_;
 
-    // Boilerplate code needed to wire-up generated code
     ClassModel._();
 
     static void _initializeBuilder(ClassModelBuilder b) => b;
 
     factory ClassModel([void updates(ClassModelBuilder b)]) = _$ClassModel;
-    static Serializer<ClassModel> get serializer => _$classModelSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ClassModel> get serializer => _$ClassModelSerializer();
+}
+
+class _$ClassModelSerializer implements StructuredSerializer<ClassModel> {
+
+    @override
+    final Iterable<Type> types = const [ClassModel, _$ClassModel];
+    @override
+    final String wireName = r'ClassModel';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ClassModel object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.class_ != null) {
+            result
+                ..add(r'_class')
+                ..add(serializers.serialize(object.class_,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    ClassModel deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ClassModelBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'_class':
+                    result.class_ = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
index fab9bc6b08e..28f512c1bf4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog.dart
@@ -25,13 +25,73 @@ abstract class Dog implements Built<Dog, DogBuilder> {
     @BuiltValueField(wireName: r'breed')
     String get breed;
 
-    // Boilerplate code needed to wire-up generated code
     Dog._();
 
     static void _initializeBuilder(DogBuilder b) => b
         ..color = 'red';
 
     factory Dog([void updates(DogBuilder b)]) = _$Dog;
-    static Serializer<Dog> get serializer => _$dogSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Dog> get serializer => _$DogSerializer();
+}
+
+class _$DogSerializer implements StructuredSerializer<Dog> {
+
+    @override
+    final Iterable<Type> types = const [Dog, _$Dog];
+    @override
+    final String wireName = r'Dog';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Dog object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        result
+            ..add(r'className')
+            ..add(serializers.serialize(object.className,
+                specifiedType: const FullType(String)));
+        if (object.color != null) {
+            result
+                ..add(r'color')
+                ..add(serializers.serialize(object.color,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.breed != null) {
+            result
+                ..add(r'breed')
+                ..add(serializers.serialize(object.breed,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Dog deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = DogBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'className':
+                    result.className = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'color':
+                    result.color = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'breed':
+                    result.breed = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
index 7a0fba00849..6b9aea49d8f 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/dog_all_of.dart
@@ -16,12 +16,54 @@ abstract class DogAllOf implements Built<DogAllOf, DogAllOfBuilder> {
     @BuiltValueField(wireName: r'breed')
     String get breed;
 
-    // Boilerplate code needed to wire-up generated code
     DogAllOf._();
 
     static void _initializeBuilder(DogAllOfBuilder b) => b;
 
     factory DogAllOf([void updates(DogAllOfBuilder b)]) = _$DogAllOf;
-    static Serializer<DogAllOf> get serializer => _$dogAllOfSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<DogAllOf> get serializer => _$DogAllOfSerializer();
+}
+
+class _$DogAllOfSerializer implements StructuredSerializer<DogAllOf> {
+
+    @override
+    final Iterable<Type> types = const [DogAllOf, _$DogAllOf];
+    @override
+    final String wireName = r'DogAllOf';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, DogAllOf object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.breed != null) {
+            result
+                ..add(r'breed')
+                ..add(serializers.serialize(object.breed,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    DogAllOf deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = DogAllOfBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'breed':
+                    result.breed = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
index 7823f0163dc..5870f7ab783 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_arrays.dart
@@ -23,13 +23,65 @@ abstract class EnumArrays implements Built<EnumArrays, EnumArraysBuilder> {
     BuiltList<EnumArraysArrayEnumEnum> get arrayEnum;
     // enum arrayEnumEnum {  fish,  crab,  };
 
-    // Boilerplate code needed to wire-up generated code
     EnumArrays._();
 
     static void _initializeBuilder(EnumArraysBuilder b) => b;
 
     factory EnumArrays([void updates(EnumArraysBuilder b)]) = _$EnumArrays;
-    static Serializer<EnumArrays> get serializer => _$enumArraysSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<EnumArrays> get serializer => _$EnumArraysSerializer();
+}
+
+class _$EnumArraysSerializer implements StructuredSerializer<EnumArrays> {
+
+    @override
+    final Iterable<Type> types = const [EnumArrays, _$EnumArrays];
+    @override
+    final String wireName = r'EnumArrays';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, EnumArrays object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.justSymbol != null) {
+            result
+                ..add(r'just_symbol')
+                ..add(serializers.serialize(object.justSymbol,
+                    specifiedType: const FullType(EnumArraysJustSymbolEnum)));
+        }
+        if (object.arrayEnum != null) {
+            result
+                ..add(r'array_enum')
+                ..add(serializers.serialize(object.arrayEnum,
+                    specifiedType: const FullType(BuiltList, [FullType(EnumArraysArrayEnumEnum)])));
+        }
+        return result;
+    }
+
+    @override
+    EnumArrays deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = EnumArraysBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'just_symbol':
+                    result.justSymbol = serializers.deserialize(value,
+                        specifiedType: const FullType(EnumArraysJustSymbolEnum)) as EnumArraysJustSymbolEnum;
+                    break;
+                case r'array_enum':
+                    result.arrayEnum.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(EnumArraysArrayEnumEnum)])) as BuiltList<EnumArraysArrayEnumEnum>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class EnumArraysJustSymbolEnum extends EnumClass {
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
index e061e086e9a..ecfb16e3e28 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/enum_test.dart
@@ -56,13 +56,123 @@ abstract class EnumTest implements Built<EnumTest, EnumTestBuilder> {
     OuterEnumIntegerDefaultValue get outerEnumIntegerDefaultValue;
     // enum outerEnumIntegerDefaultValueEnum {  0,  1,  2,  };
 
-    // Boilerplate code needed to wire-up generated code
     EnumTest._();
 
     static void _initializeBuilder(EnumTestBuilder b) => b;
 
     factory EnumTest([void updates(EnumTestBuilder b)]) = _$EnumTest;
-    static Serializer<EnumTest> get serializer => _$enumTestSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<EnumTest> get serializer => _$EnumTestSerializer();
+}
+
+class _$EnumTestSerializer implements StructuredSerializer<EnumTest> {
+
+    @override
+    final Iterable<Type> types = const [EnumTest, _$EnumTest];
+    @override
+    final String wireName = r'EnumTest';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, EnumTest object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.enumString != null) {
+            result
+                ..add(r'enum_string')
+                ..add(serializers.serialize(object.enumString,
+                    specifiedType: const FullType(EnumTestEnumStringEnum)));
+        }
+        result
+            ..add(r'enum_string_required')
+            ..add(serializers.serialize(object.enumStringRequired,
+                specifiedType: const FullType(EnumTestEnumStringRequiredEnum)));
+        if (object.enumInteger != null) {
+            result
+                ..add(r'enum_integer')
+                ..add(serializers.serialize(object.enumInteger,
+                    specifiedType: const FullType(EnumTestEnumIntegerEnum)));
+        }
+        if (object.enumNumber != null) {
+            result
+                ..add(r'enum_number')
+                ..add(serializers.serialize(object.enumNumber,
+                    specifiedType: const FullType(EnumTestEnumNumberEnum)));
+        }
+        if (object.outerEnum != null) {
+            result
+                ..add(r'outerEnum')
+                ..add(serializers.serialize(object.outerEnum,
+                    specifiedType: const FullType(OuterEnum)));
+        }
+        if (object.outerEnumInteger != null) {
+            result
+                ..add(r'outerEnumInteger')
+                ..add(serializers.serialize(object.outerEnumInteger,
+                    specifiedType: const FullType(OuterEnumInteger)));
+        }
+        if (object.outerEnumDefaultValue != null) {
+            result
+                ..add(r'outerEnumDefaultValue')
+                ..add(serializers.serialize(object.outerEnumDefaultValue,
+                    specifiedType: const FullType(OuterEnumDefaultValue)));
+        }
+        if (object.outerEnumIntegerDefaultValue != null) {
+            result
+                ..add(r'outerEnumIntegerDefaultValue')
+                ..add(serializers.serialize(object.outerEnumIntegerDefaultValue,
+                    specifiedType: const FullType(OuterEnumIntegerDefaultValue)));
+        }
+        return result;
+    }
+
+    @override
+    EnumTest deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = EnumTestBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'enum_string':
+                    result.enumString = serializers.deserialize(value,
+                        specifiedType: const FullType(EnumTestEnumStringEnum)) as EnumTestEnumStringEnum;
+                    break;
+                case r'enum_string_required':
+                    result.enumStringRequired = serializers.deserialize(value,
+                        specifiedType: const FullType(EnumTestEnumStringRequiredEnum)) as EnumTestEnumStringRequiredEnum;
+                    break;
+                case r'enum_integer':
+                    result.enumInteger = serializers.deserialize(value,
+                        specifiedType: const FullType(EnumTestEnumIntegerEnum)) as EnumTestEnumIntegerEnum;
+                    break;
+                case r'enum_number':
+                    result.enumNumber = serializers.deserialize(value,
+                        specifiedType: const FullType(EnumTestEnumNumberEnum)) as EnumTestEnumNumberEnum;
+                    break;
+                case r'outerEnum':
+                    result.outerEnum = serializers.deserialize(value,
+                        specifiedType: const FullType(OuterEnum)) as OuterEnum;
+                    break;
+                case r'outerEnumInteger':
+                    result.outerEnumInteger = serializers.deserialize(value,
+                        specifiedType: const FullType(OuterEnumInteger)) as OuterEnumInteger;
+                    break;
+                case r'outerEnumDefaultValue':
+                    result.outerEnumDefaultValue = serializers.deserialize(value,
+                        specifiedType: const FullType(OuterEnumDefaultValue)) as OuterEnumDefaultValue;
+                    break;
+                case r'outerEnumIntegerDefaultValue':
+                    result.outerEnumIntegerDefaultValue = serializers.deserialize(value,
+                        specifiedType: const FullType(OuterEnumIntegerDefaultValue)) as OuterEnumIntegerDefaultValue;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class EnumTestEnumStringEnum extends EnumClass {
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
index 1bcfce7e9cf..c604b7f8e28 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/file_schema_test_class.dart
@@ -22,12 +22,64 @@ abstract class FileSchemaTestClass implements Built<FileSchemaTestClass, FileSch
     @BuiltValueField(wireName: r'files')
     BuiltList<ModelFile> get files;
 
-    // Boilerplate code needed to wire-up generated code
     FileSchemaTestClass._();
 
     static void _initializeBuilder(FileSchemaTestClassBuilder b) => b;
 
     factory FileSchemaTestClass([void updates(FileSchemaTestClassBuilder b)]) = _$FileSchemaTestClass;
-    static Serializer<FileSchemaTestClass> get serializer => _$fileSchemaTestClassSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<FileSchemaTestClass> get serializer => _$FileSchemaTestClassSerializer();
+}
+
+class _$FileSchemaTestClassSerializer implements StructuredSerializer<FileSchemaTestClass> {
+
+    @override
+    final Iterable<Type> types = const [FileSchemaTestClass, _$FileSchemaTestClass];
+    @override
+    final String wireName = r'FileSchemaTestClass';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, FileSchemaTestClass object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.file != null) {
+            result
+                ..add(r'file')
+                ..add(serializers.serialize(object.file,
+                    specifiedType: const FullType(ModelFile)));
+        }
+        if (object.files != null) {
+            result
+                ..add(r'files')
+                ..add(serializers.serialize(object.files,
+                    specifiedType: const FullType(BuiltList, [FullType(ModelFile)])));
+        }
+        return result;
+    }
+
+    @override
+    FileSchemaTestClass deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = FileSchemaTestClassBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'file':
+                    result.file.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(ModelFile)) as ModelFile);
+                    break;
+                case r'files':
+                    result.files.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(ModelFile)])) as BuiltList<ModelFile>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
index 9984cc16f58..8c3ba98cc7a 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/foo.dart
@@ -16,13 +16,55 @@ abstract class Foo implements Built<Foo, FooBuilder> {
     @BuiltValueField(wireName: r'bar')
     String get bar;
 
-    // Boilerplate code needed to wire-up generated code
     Foo._();
 
     static void _initializeBuilder(FooBuilder b) => b
         ..bar = 'bar';
 
     factory Foo([void updates(FooBuilder b)]) = _$Foo;
-    static Serializer<Foo> get serializer => _$fooSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Foo> get serializer => _$FooSerializer();
+}
+
+class _$FooSerializer implements StructuredSerializer<Foo> {
+
+    @override
+    final Iterable<Type> types = const [Foo, _$Foo];
+    @override
+    final String wireName = r'Foo';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Foo object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.bar != null) {
+            result
+                ..add(r'bar')
+                ..add(serializers.serialize(object.bar,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Foo deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = FooBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'bar':
+                    result.bar = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
index b6d7cacc4fb..64c74f004ca 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/format_test.dart
@@ -75,12 +75,196 @@ abstract class FormatTest implements Built<FormatTest, FormatTestBuilder> {
     @BuiltValueField(wireName: r'pattern_with_digits_and_delimiter')
     String get patternWithDigitsAndDelimiter;
 
-    // Boilerplate code needed to wire-up generated code
     FormatTest._();
 
     static void _initializeBuilder(FormatTestBuilder b) => b;
 
     factory FormatTest([void updates(FormatTestBuilder b)]) = _$FormatTest;
-    static Serializer<FormatTest> get serializer => _$formatTestSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<FormatTest> get serializer => _$FormatTestSerializer();
+}
+
+class _$FormatTestSerializer implements StructuredSerializer<FormatTest> {
+
+    @override
+    final Iterable<Type> types = const [FormatTest, _$FormatTest];
+    @override
+    final String wireName = r'FormatTest';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, FormatTest object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.integer != null) {
+            result
+                ..add(r'integer')
+                ..add(serializers.serialize(object.integer,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.int32 != null) {
+            result
+                ..add(r'int32')
+                ..add(serializers.serialize(object.int32,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.int64 != null) {
+            result
+                ..add(r'int64')
+                ..add(serializers.serialize(object.int64,
+                    specifiedType: const FullType(int)));
+        }
+        result
+            ..add(r'number')
+            ..add(serializers.serialize(object.number,
+                specifiedType: const FullType(num)));
+        if (object.float != null) {
+            result
+                ..add(r'float')
+                ..add(serializers.serialize(object.float,
+                    specifiedType: const FullType(double)));
+        }
+        if (object.double_ != null) {
+            result
+                ..add(r'double')
+                ..add(serializers.serialize(object.double_,
+                    specifiedType: const FullType(double)));
+        }
+        if (object.decimal != null) {
+            result
+                ..add(r'decimal')
+                ..add(serializers.serialize(object.decimal,
+                    specifiedType: const FullType(double)));
+        }
+        if (object.string != null) {
+            result
+                ..add(r'string')
+                ..add(serializers.serialize(object.string,
+                    specifiedType: const FullType(String)));
+        }
+        result
+            ..add(r'byte')
+            ..add(serializers.serialize(object.byte,
+                specifiedType: const FullType(String)));
+        if (object.binary != null) {
+            result
+                ..add(r'binary')
+                ..add(serializers.serialize(object.binary,
+                    specifiedType: const FullType(Uint8List)));
+        }
+        result
+            ..add(r'date')
+            ..add(serializers.serialize(object.date,
+                specifiedType: const FullType(DateTime)));
+        if (object.dateTime != null) {
+            result
+                ..add(r'dateTime')
+                ..add(serializers.serialize(object.dateTime,
+                    specifiedType: const FullType(DateTime)));
+        }
+        if (object.uuid != null) {
+            result
+                ..add(r'uuid')
+                ..add(serializers.serialize(object.uuid,
+                    specifiedType: const FullType(String)));
+        }
+        result
+            ..add(r'password')
+            ..add(serializers.serialize(object.password,
+                specifiedType: const FullType(String)));
+        if (object.patternWithDigits != null) {
+            result
+                ..add(r'pattern_with_digits')
+                ..add(serializers.serialize(object.patternWithDigits,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.patternWithDigitsAndDelimiter != null) {
+            result
+                ..add(r'pattern_with_digits_and_delimiter')
+                ..add(serializers.serialize(object.patternWithDigitsAndDelimiter,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    FormatTest deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = FormatTestBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'integer':
+                    result.integer = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'int32':
+                    result.int32 = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'int64':
+                    result.int64 = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'number':
+                    result.number = serializers.deserialize(value,
+                        specifiedType: const FullType(num)) as num;
+                    break;
+                case r'float':
+                    result.float = serializers.deserialize(value,
+                        specifiedType: const FullType(double)) as double;
+                    break;
+                case r'double':
+                    result.double_ = serializers.deserialize(value,
+                        specifiedType: const FullType(double)) as double;
+                    break;
+                case r'decimal':
+                    result.decimal = serializers.deserialize(value,
+                        specifiedType: const FullType(double)) as double;
+                    break;
+                case r'string':
+                    result.string = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'byte':
+                    result.byte = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'binary':
+                    result.binary = serializers.deserialize(value,
+                        specifiedType: const FullType(Uint8List)) as Uint8List;
+                    break;
+                case r'date':
+                    result.date = serializers.deserialize(value,
+                        specifiedType: const FullType(DateTime)) as DateTime;
+                    break;
+                case r'dateTime':
+                    result.dateTime = serializers.deserialize(value,
+                        specifiedType: const FullType(DateTime)) as DateTime;
+                    break;
+                case r'uuid':
+                    result.uuid = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'password':
+                    result.password = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'pattern_with_digits':
+                    result.patternWithDigits = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'pattern_with_digits_and_delimiter':
+                    result.patternWithDigitsAndDelimiter = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
index 9c5eb2686cb..1abb594f924 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/has_only_read_only.dart
@@ -20,12 +20,64 @@ abstract class HasOnlyReadOnly implements Built<HasOnlyReadOnly, HasOnlyReadOnly
     @BuiltValueField(wireName: r'foo')
     String get foo;
 
-    // Boilerplate code needed to wire-up generated code
     HasOnlyReadOnly._();
 
     static void _initializeBuilder(HasOnlyReadOnlyBuilder b) => b;
 
     factory HasOnlyReadOnly([void updates(HasOnlyReadOnlyBuilder b)]) = _$HasOnlyReadOnly;
-    static Serializer<HasOnlyReadOnly> get serializer => _$hasOnlyReadOnlySerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<HasOnlyReadOnly> get serializer => _$HasOnlyReadOnlySerializer();
+}
+
+class _$HasOnlyReadOnlySerializer implements StructuredSerializer<HasOnlyReadOnly> {
+
+    @override
+    final Iterable<Type> types = const [HasOnlyReadOnly, _$HasOnlyReadOnly];
+    @override
+    final String wireName = r'HasOnlyReadOnly';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, HasOnlyReadOnly object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.bar != null) {
+            result
+                ..add(r'bar')
+                ..add(serializers.serialize(object.bar,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.foo != null) {
+            result
+                ..add(r'foo')
+                ..add(serializers.serialize(object.foo,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    HasOnlyReadOnly deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = HasOnlyReadOnlyBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'bar':
+                    result.bar = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'foo':
+                    result.foo = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/health_check_result.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/health_check_result.dart
index 848806a19b5..d736d9b7984 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/health_check_result.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/health_check_result.dart
@@ -16,12 +16,54 @@ abstract class HealthCheckResult implements Built<HealthCheckResult, HealthCheck
     @BuiltValueField(wireName: r'NullableMessage')
     String get nullableMessage;
 
-    // Boilerplate code needed to wire-up generated code
     HealthCheckResult._();
 
     static void _initializeBuilder(HealthCheckResultBuilder b) => b;
 
     factory HealthCheckResult([void updates(HealthCheckResultBuilder b)]) = _$HealthCheckResult;
-    static Serializer<HealthCheckResult> get serializer => _$healthCheckResultSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<HealthCheckResult> get serializer => _$HealthCheckResultSerializer();
+}
+
+class _$HealthCheckResultSerializer implements StructuredSerializer<HealthCheckResult> {
+
+    @override
+    final Iterable<Type> types = const [HealthCheckResult, _$HealthCheckResult];
+    @override
+    final String wireName = r'HealthCheckResult';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, HealthCheckResult object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.nullableMessage != null) {
+            result
+                ..add(r'NullableMessage')
+                ..add(serializers.serialize(object.nullableMessage,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    HealthCheckResult deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = HealthCheckResultBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'NullableMessage':
+                    result.nullableMessage = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
index b82e139b7c1..3fc149448af 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/inline_response_default.dart
@@ -17,12 +17,54 @@ abstract class InlineResponseDefault implements Built<InlineResponseDefault, Inl
     @BuiltValueField(wireName: r'string')
     Foo get string;
 
-    // Boilerplate code needed to wire-up generated code
     InlineResponseDefault._();
 
     static void _initializeBuilder(InlineResponseDefaultBuilder b) => b;
 
     factory InlineResponseDefault([void updates(InlineResponseDefaultBuilder b)]) = _$InlineResponseDefault;
-    static Serializer<InlineResponseDefault> get serializer => _$inlineResponseDefaultSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<InlineResponseDefault> get serializer => _$InlineResponseDefaultSerializer();
+}
+
+class _$InlineResponseDefaultSerializer implements StructuredSerializer<InlineResponseDefault> {
+
+    @override
+    final Iterable<Type> types = const [InlineResponseDefault, _$InlineResponseDefault];
+    @override
+    final String wireName = r'InlineResponseDefault';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, InlineResponseDefault object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.string != null) {
+            result
+                ..add(r'string')
+                ..add(serializers.serialize(object.string,
+                    specifiedType: const FullType(Foo)));
+        }
+        return result;
+    }
+
+    @override
+    InlineResponseDefault deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = InlineResponseDefaultBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'string':
+                    result.string.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(Foo)) as Foo);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
index 7397482d8e6..85bf467331e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/map_test.dart
@@ -30,13 +30,85 @@ abstract class MapTest implements Built<MapTest, MapTestBuilder> {
     @BuiltValueField(wireName: r'indirect_map')
     BuiltMap<String, bool> get indirectMap;
 
-    // Boilerplate code needed to wire-up generated code
     MapTest._();
 
     static void _initializeBuilder(MapTestBuilder b) => b;
 
     factory MapTest([void updates(MapTestBuilder b)]) = _$MapTest;
-    static Serializer<MapTest> get serializer => _$mapTestSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<MapTest> get serializer => _$MapTestSerializer();
+}
+
+class _$MapTestSerializer implements StructuredSerializer<MapTest> {
+
+    @override
+    final Iterable<Type> types = const [MapTest, _$MapTest];
+    @override
+    final String wireName = r'MapTest';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, MapTest object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.mapMapOfString != null) {
+            result
+                ..add(r'map_map_of_string')
+                ..add(serializers.serialize(object.mapMapOfString,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(BuiltMap, [FullType(String), FullType(String)])])));
+        }
+        if (object.mapOfEnumString != null) {
+            result
+                ..add(r'map_of_enum_string')
+                ..add(serializers.serialize(object.mapOfEnumString,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(MapTestMapOfEnumStringEnum)])));
+        }
+        if (object.directMap != null) {
+            result
+                ..add(r'direct_map')
+                ..add(serializers.serialize(object.directMap,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(bool)])));
+        }
+        if (object.indirectMap != null) {
+            result
+                ..add(r'indirect_map')
+                ..add(serializers.serialize(object.indirectMap,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(bool)])));
+        }
+        return result;
+    }
+
+    @override
+    MapTest deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = MapTestBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'map_map_of_string':
+                    result.mapMapOfString.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(BuiltMap, [FullType(String), FullType(String)])])) as BuiltMap<String, BuiltMap<String, String>>);
+                    break;
+                case r'map_of_enum_string':
+                    result.mapOfEnumString.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(MapTestMapOfEnumStringEnum)])) as BuiltMap<String, MapTestMapOfEnumStringEnum>);
+                    break;
+                case r'direct_map':
+                    result.directMap.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(bool)])) as BuiltMap<String, bool>);
+                    break;
+                case r'indirect_map':
+                    result.indirectMap.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(bool)])) as BuiltMap<String, bool>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class MapTestMapOfEnumStringEnum extends EnumClass {
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
index 31be421309c..28e7ae4bc56 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/mixed_properties_and_additional_properties_class.dart
@@ -26,12 +26,74 @@ abstract class MixedPropertiesAndAdditionalPropertiesClass implements Built<Mixe
     @BuiltValueField(wireName: r'map')
     BuiltMap<String, Animal> get map;
 
-    // Boilerplate code needed to wire-up generated code
     MixedPropertiesAndAdditionalPropertiesClass._();
 
     static void _initializeBuilder(MixedPropertiesAndAdditionalPropertiesClassBuilder b) => b;
 
     factory MixedPropertiesAndAdditionalPropertiesClass([void updates(MixedPropertiesAndAdditionalPropertiesClassBuilder b)]) = _$MixedPropertiesAndAdditionalPropertiesClass;
-    static Serializer<MixedPropertiesAndAdditionalPropertiesClass> get serializer => _$mixedPropertiesAndAdditionalPropertiesClassSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<MixedPropertiesAndAdditionalPropertiesClass> get serializer => _$MixedPropertiesAndAdditionalPropertiesClassSerializer();
+}
+
+class _$MixedPropertiesAndAdditionalPropertiesClassSerializer implements StructuredSerializer<MixedPropertiesAndAdditionalPropertiesClass> {
+
+    @override
+    final Iterable<Type> types = const [MixedPropertiesAndAdditionalPropertiesClass, _$MixedPropertiesAndAdditionalPropertiesClass];
+    @override
+    final String wireName = r'MixedPropertiesAndAdditionalPropertiesClass';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, MixedPropertiesAndAdditionalPropertiesClass object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.uuid != null) {
+            result
+                ..add(r'uuid')
+                ..add(serializers.serialize(object.uuid,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.dateTime != null) {
+            result
+                ..add(r'dateTime')
+                ..add(serializers.serialize(object.dateTime,
+                    specifiedType: const FullType(DateTime)));
+        }
+        if (object.map != null) {
+            result
+                ..add(r'map')
+                ..add(serializers.serialize(object.map,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(Animal)])));
+        }
+        return result;
+    }
+
+    @override
+    MixedPropertiesAndAdditionalPropertiesClass deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = MixedPropertiesAndAdditionalPropertiesClassBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'uuid':
+                    result.uuid = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'dateTime':
+                    result.dateTime = serializers.deserialize(value,
+                        specifiedType: const FullType(DateTime)) as DateTime;
+                    break;
+                case r'map':
+                    result.map.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(Animal)])) as BuiltMap<String, Animal>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
index 5dafab90e8a..c88b52689d8 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model200_response.dart
@@ -20,12 +20,64 @@ abstract class Model200Response implements Built<Model200Response, Model200Respo
     @BuiltValueField(wireName: r'class')
     String get class_;
 
-    // Boilerplate code needed to wire-up generated code
     Model200Response._();
 
     static void _initializeBuilder(Model200ResponseBuilder b) => b;
 
     factory Model200Response([void updates(Model200ResponseBuilder b)]) = _$Model200Response;
-    static Serializer<Model200Response> get serializer => _$model200ResponseSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Model200Response> get serializer => _$Model200ResponseSerializer();
+}
+
+class _$Model200ResponseSerializer implements StructuredSerializer<Model200Response> {
+
+    @override
+    final Iterable<Type> types = const [Model200Response, _$Model200Response];
+    @override
+    final String wireName = r'Model200Response';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Model200Response object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.name != null) {
+            result
+                ..add(r'name')
+                ..add(serializers.serialize(object.name,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.class_ != null) {
+            result
+                ..add(r'class')
+                ..add(serializers.serialize(object.class_,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Model200Response deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = Model200ResponseBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'class':
+                    result.class_ = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
index 5a99a70d9af..0d7dc2b4efe 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_client.dart
@@ -16,12 +16,54 @@ abstract class ModelClient implements Built<ModelClient, ModelClientBuilder> {
     @BuiltValueField(wireName: r'client')
     String get client;
 
-    // Boilerplate code needed to wire-up generated code
     ModelClient._();
 
     static void _initializeBuilder(ModelClientBuilder b) => b;
 
     factory ModelClient([void updates(ModelClientBuilder b)]) = _$ModelClient;
-    static Serializer<ModelClient> get serializer => _$modelClientSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ModelClient> get serializer => _$ModelClientSerializer();
+}
+
+class _$ModelClientSerializer implements StructuredSerializer<ModelClient> {
+
+    @override
+    final Iterable<Type> types = const [ModelClient, _$ModelClient];
+    @override
+    final String wireName = r'ModelClient';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ModelClient object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.client != null) {
+            result
+                ..add(r'client')
+                ..add(serializers.serialize(object.client,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    ModelClient deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ModelClientBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'client':
+                    result.client = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
index 07474a9cc61..429590bdb09 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_file.dart
@@ -17,12 +17,54 @@ abstract class ModelFile implements Built<ModelFile, ModelFileBuilder> {
     @BuiltValueField(wireName: r'sourceURI')
     String get sourceURI;
 
-    // Boilerplate code needed to wire-up generated code
     ModelFile._();
 
     static void _initializeBuilder(ModelFileBuilder b) => b;
 
     factory ModelFile([void updates(ModelFileBuilder b)]) = _$ModelFile;
-    static Serializer<ModelFile> get serializer => _$modelFileSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ModelFile> get serializer => _$ModelFileSerializer();
+}
+
+class _$ModelFileSerializer implements StructuredSerializer<ModelFile> {
+
+    @override
+    final Iterable<Type> types = const [ModelFile, _$ModelFile];
+    @override
+    final String wireName = r'ModelFile';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ModelFile object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.sourceURI != null) {
+            result
+                ..add(r'sourceURI')
+                ..add(serializers.serialize(object.sourceURI,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    ModelFile deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ModelFileBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'sourceURI':
+                    result.sourceURI = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
index 464a9e6baec..3e1c342b2d6 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_list.dart
@@ -16,12 +16,54 @@ abstract class ModelList implements Built<ModelList, ModelListBuilder> {
     @BuiltValueField(wireName: r'123-list')
     String get n123list;
 
-    // Boilerplate code needed to wire-up generated code
     ModelList._();
 
     static void _initializeBuilder(ModelListBuilder b) => b;
 
     factory ModelList([void updates(ModelListBuilder b)]) = _$ModelList;
-    static Serializer<ModelList> get serializer => _$modelListSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ModelList> get serializer => _$ModelListSerializer();
+}
+
+class _$ModelListSerializer implements StructuredSerializer<ModelList> {
+
+    @override
+    final Iterable<Type> types = const [ModelList, _$ModelList];
+    @override
+    final String wireName = r'ModelList';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ModelList object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.n123list != null) {
+            result
+                ..add(r'123-list')
+                ..add(serializers.serialize(object.n123list,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    ModelList deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ModelListBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'123-list':
+                    result.n123list = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
index 31259ba2086..6c63ea4a7de 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/model_return.dart
@@ -16,12 +16,54 @@ abstract class ModelReturn implements Built<ModelReturn, ModelReturnBuilder> {
     @BuiltValueField(wireName: r'return')
     int get return_;
 
-    // Boilerplate code needed to wire-up generated code
     ModelReturn._();
 
     static void _initializeBuilder(ModelReturnBuilder b) => b;
 
     factory ModelReturn([void updates(ModelReturnBuilder b)]) = _$ModelReturn;
-    static Serializer<ModelReturn> get serializer => _$modelReturnSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ModelReturn> get serializer => _$ModelReturnSerializer();
+}
+
+class _$ModelReturnSerializer implements StructuredSerializer<ModelReturn> {
+
+    @override
+    final Iterable<Type> types = const [ModelReturn, _$ModelReturn];
+    @override
+    final String wireName = r'ModelReturn';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ModelReturn object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.return_ != null) {
+            result
+                ..add(r'return')
+                ..add(serializers.serialize(object.return_,
+                    specifiedType: const FullType(int)));
+        }
+        return result;
+    }
+
+    @override
+    ModelReturn deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ModelReturnBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'return':
+                    result.return_ = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
index af454434b7c..247ca3ab5ed 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/name.dart
@@ -27,12 +27,82 @@ abstract class Name implements Built<Name, NameBuilder> {
     @BuiltValueField(wireName: r'123Number')
     int get n123number;
 
-    // Boilerplate code needed to wire-up generated code
     Name._();
 
     static void _initializeBuilder(NameBuilder b) => b;
 
     factory Name([void updates(NameBuilder b)]) = _$Name;
-    static Serializer<Name> get serializer => _$nameSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Name> get serializer => _$NameSerializer();
+}
+
+class _$NameSerializer implements StructuredSerializer<Name> {
+
+    @override
+    final Iterable<Type> types = const [Name, _$Name];
+    @override
+    final String wireName = r'Name';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Name object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        result
+            ..add(r'name')
+            ..add(serializers.serialize(object.name,
+                specifiedType: const FullType(int)));
+        if (object.snakeCase != null) {
+            result
+                ..add(r'snake_case')
+                ..add(serializers.serialize(object.snakeCase,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.property != null) {
+            result
+                ..add(r'property')
+                ..add(serializers.serialize(object.property,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.n123number != null) {
+            result
+                ..add(r'123Number')
+                ..add(serializers.serialize(object.n123number,
+                    specifiedType: const FullType(int)));
+        }
+        return result;
+    }
+
+    @override
+    Name deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = NameBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'snake_case':
+                    result.snakeCase = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'property':
+                    result.property = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'123Number':
+                    result.n123number = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
index 8306d9546bb..44537de8820 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/nullable_class.dart
@@ -62,12 +62,164 @@ abstract class NullableClass implements Built<NullableClass, NullableClassBuilde
     @BuiltValueField(wireName: r'object_items_nullable')
     BuiltMap<String, JsonObject> get objectItemsNullable;
 
-    // Boilerplate code needed to wire-up generated code
     NullableClass._();
 
     static void _initializeBuilder(NullableClassBuilder b) => b;
 
     factory NullableClass([void updates(NullableClassBuilder b)]) = _$NullableClass;
-    static Serializer<NullableClass> get serializer => _$nullableClassSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<NullableClass> get serializer => _$NullableClassSerializer();
+}
+
+class _$NullableClassSerializer implements StructuredSerializer<NullableClass> {
+
+    @override
+    final Iterable<Type> types = const [NullableClass, _$NullableClass];
+    @override
+    final String wireName = r'NullableClass';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, NullableClass object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.integerProp != null) {
+            result
+                ..add(r'integer_prop')
+                ..add(serializers.serialize(object.integerProp,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.numberProp != null) {
+            result
+                ..add(r'number_prop')
+                ..add(serializers.serialize(object.numberProp,
+                    specifiedType: const FullType(num)));
+        }
+        if (object.booleanProp != null) {
+            result
+                ..add(r'boolean_prop')
+                ..add(serializers.serialize(object.booleanProp,
+                    specifiedType: const FullType(bool)));
+        }
+        if (object.stringProp != null) {
+            result
+                ..add(r'string_prop')
+                ..add(serializers.serialize(object.stringProp,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.dateProp != null) {
+            result
+                ..add(r'date_prop')
+                ..add(serializers.serialize(object.dateProp,
+                    specifiedType: const FullType(DateTime)));
+        }
+        if (object.datetimeProp != null) {
+            result
+                ..add(r'datetime_prop')
+                ..add(serializers.serialize(object.datetimeProp,
+                    specifiedType: const FullType(DateTime)));
+        }
+        if (object.arrayNullableProp != null) {
+            result
+                ..add(r'array_nullable_prop')
+                ..add(serializers.serialize(object.arrayNullableProp,
+                    specifiedType: const FullType(BuiltList, [FullType(JsonObject)])));
+        }
+        if (object.arrayAndItemsNullableProp != null) {
+            result
+                ..add(r'array_and_items_nullable_prop')
+                ..add(serializers.serialize(object.arrayAndItemsNullableProp,
+                    specifiedType: const FullType(BuiltList, [FullType(JsonObject)])));
+        }
+        if (object.arrayItemsNullable != null) {
+            result
+                ..add(r'array_items_nullable')
+                ..add(serializers.serialize(object.arrayItemsNullable,
+                    specifiedType: const FullType(BuiltList, [FullType(JsonObject)])));
+        }
+        if (object.objectNullableProp != null) {
+            result
+                ..add(r'object_nullable_prop')
+                ..add(serializers.serialize(object.objectNullableProp,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(JsonObject)])));
+        }
+        if (object.objectAndItemsNullableProp != null) {
+            result
+                ..add(r'object_and_items_nullable_prop')
+                ..add(serializers.serialize(object.objectAndItemsNullableProp,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(JsonObject)])));
+        }
+        if (object.objectItemsNullable != null) {
+            result
+                ..add(r'object_items_nullable')
+                ..add(serializers.serialize(object.objectItemsNullable,
+                    specifiedType: const FullType(BuiltMap, [FullType(String), FullType(JsonObject)])));
+        }
+        return result;
+    }
+
+    @override
+    NullableClass deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = NullableClassBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'integer_prop':
+                    result.integerProp = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'number_prop':
+                    result.numberProp = serializers.deserialize(value,
+                        specifiedType: const FullType(num)) as num;
+                    break;
+                case r'boolean_prop':
+                    result.booleanProp = serializers.deserialize(value,
+                        specifiedType: const FullType(bool)) as bool;
+                    break;
+                case r'string_prop':
+                    result.stringProp = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'date_prop':
+                    result.dateProp = serializers.deserialize(value,
+                        specifiedType: const FullType(DateTime)) as DateTime;
+                    break;
+                case r'datetime_prop':
+                    result.datetimeProp = serializers.deserialize(value,
+                        specifiedType: const FullType(DateTime)) as DateTime;
+                    break;
+                case r'array_nullable_prop':
+                    result.arrayNullableProp.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(JsonObject)])) as BuiltList<JsonObject>);
+                    break;
+                case r'array_and_items_nullable_prop':
+                    result.arrayAndItemsNullableProp.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(JsonObject)])) as BuiltList<JsonObject>);
+                    break;
+                case r'array_items_nullable':
+                    result.arrayItemsNullable.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(JsonObject)])) as BuiltList<JsonObject>);
+                    break;
+                case r'object_nullable_prop':
+                    result.objectNullableProp.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(JsonObject)])) as BuiltMap<String, JsonObject>);
+                    break;
+                case r'object_and_items_nullable_prop':
+                    result.objectAndItemsNullableProp.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(JsonObject)])) as BuiltMap<String, JsonObject>);
+                    break;
+                case r'object_items_nullable':
+                    result.objectItemsNullable.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltMap, [FullType(String), FullType(JsonObject)])) as BuiltMap<String, JsonObject>);
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
index 839165bb796..f4dddb00b79 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/number_only.dart
@@ -16,12 +16,54 @@ abstract class NumberOnly implements Built<NumberOnly, NumberOnlyBuilder> {
     @BuiltValueField(wireName: r'JustNumber')
     num get justNumber;
 
-    // Boilerplate code needed to wire-up generated code
     NumberOnly._();
 
     static void _initializeBuilder(NumberOnlyBuilder b) => b;
 
     factory NumberOnly([void updates(NumberOnlyBuilder b)]) = _$NumberOnly;
-    static Serializer<NumberOnly> get serializer => _$numberOnlySerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<NumberOnly> get serializer => _$NumberOnlySerializer();
+}
+
+class _$NumberOnlySerializer implements StructuredSerializer<NumberOnly> {
+
+    @override
+    final Iterable<Type> types = const [NumberOnly, _$NumberOnly];
+    @override
+    final String wireName = r'NumberOnly';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, NumberOnly object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.justNumber != null) {
+            result
+                ..add(r'JustNumber')
+                ..add(serializers.serialize(object.justNumber,
+                    specifiedType: const FullType(num)));
+        }
+        return result;
+    }
+
+    @override
+    NumberOnly deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = NumberOnlyBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'JustNumber':
+                    result.justNumber = serializers.deserialize(value,
+                        specifiedType: const FullType(num)) as num;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
index f26c6213820..318572b7326 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/order.dart
@@ -39,14 +39,106 @@ abstract class Order implements Built<Order, OrderBuilder> {
     @BuiltValueField(wireName: r'complete')
     bool get complete;
 
-    // Boilerplate code needed to wire-up generated code
     Order._();
 
     static void _initializeBuilder(OrderBuilder b) => b
         ..complete = false;
 
     factory Order([void updates(OrderBuilder b)]) = _$Order;
-    static Serializer<Order> get serializer => _$orderSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Order> get serializer => _$OrderSerializer();
+}
+
+class _$OrderSerializer implements StructuredSerializer<Order> {
+
+    @override
+    final Iterable<Type> types = const [Order, _$Order];
+    @override
+    final String wireName = r'Order';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Order object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.petId != null) {
+            result
+                ..add(r'petId')
+                ..add(serializers.serialize(object.petId,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.quantity != null) {
+            result
+                ..add(r'quantity')
+                ..add(serializers.serialize(object.quantity,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.shipDate != null) {
+            result
+                ..add(r'shipDate')
+                ..add(serializers.serialize(object.shipDate,
+                    specifiedType: const FullType(DateTime)));
+        }
+        if (object.status != null) {
+            result
+                ..add(r'status')
+                ..add(serializers.serialize(object.status,
+                    specifiedType: const FullType(OrderStatusEnum)));
+        }
+        if (object.complete != null) {
+            result
+                ..add(r'complete')
+                ..add(serializers.serialize(object.complete,
+                    specifiedType: const FullType(bool)));
+        }
+        return result;
+    }
+
+    @override
+    Order deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = OrderBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'petId':
+                    result.petId = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'quantity':
+                    result.quantity = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'shipDate':
+                    result.shipDate = serializers.deserialize(value,
+                        specifiedType: const FullType(DateTime)) as DateTime;
+                    break;
+                case r'status':
+                    result.status = serializers.deserialize(value,
+                        specifiedType: const FullType(OrderStatusEnum)) as OrderStatusEnum;
+                    break;
+                case r'complete':
+                    result.complete = serializers.deserialize(value,
+                        specifiedType: const FullType(bool)) as bool;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class OrderStatusEnum extends EnumClass {
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
index bc748ef970f..a87499482a9 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/outer_composite.dart
@@ -24,12 +24,74 @@ abstract class OuterComposite implements Built<OuterComposite, OuterCompositeBui
     @BuiltValueField(wireName: r'my_boolean')
     bool get myBoolean;
 
-    // Boilerplate code needed to wire-up generated code
     OuterComposite._();
 
     static void _initializeBuilder(OuterCompositeBuilder b) => b;
 
     factory OuterComposite([void updates(OuterCompositeBuilder b)]) = _$OuterComposite;
-    static Serializer<OuterComposite> get serializer => _$outerCompositeSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<OuterComposite> get serializer => _$OuterCompositeSerializer();
+}
+
+class _$OuterCompositeSerializer implements StructuredSerializer<OuterComposite> {
+
+    @override
+    final Iterable<Type> types = const [OuterComposite, _$OuterComposite];
+    @override
+    final String wireName = r'OuterComposite';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, OuterComposite object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.myNumber != null) {
+            result
+                ..add(r'my_number')
+                ..add(serializers.serialize(object.myNumber,
+                    specifiedType: const FullType(num)));
+        }
+        if (object.myString != null) {
+            result
+                ..add(r'my_string')
+                ..add(serializers.serialize(object.myString,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.myBoolean != null) {
+            result
+                ..add(r'my_boolean')
+                ..add(serializers.serialize(object.myBoolean,
+                    specifiedType: const FullType(bool)));
+        }
+        return result;
+    }
+
+    @override
+    OuterComposite deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = OuterCompositeBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'my_number':
+                    result.myNumber = serializers.deserialize(value,
+                        specifiedType: const FullType(num)) as num;
+                    break;
+                case r'my_string':
+                    result.myString = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'my_boolean':
+                    result.myBoolean = serializers.deserialize(value,
+                        specifiedType: const FullType(bool)) as bool;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
index 3c05528613a..2de9741aa40 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/pet.dart
@@ -39,13 +39,101 @@ abstract class Pet implements Built<Pet, PetBuilder> {
     PetStatusEnum get status;
     // enum statusEnum {  available,  pending,  sold,  };
 
-    // Boilerplate code needed to wire-up generated code
     Pet._();
 
     static void _initializeBuilder(PetBuilder b) => b;
 
     factory Pet([void updates(PetBuilder b)]) = _$Pet;
-    static Serializer<Pet> get serializer => _$petSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Pet> get serializer => _$PetSerializer();
+}
+
+class _$PetSerializer implements StructuredSerializer<Pet> {
+
+    @override
+    final Iterable<Type> types = const [Pet, _$Pet];
+    @override
+    final String wireName = r'Pet';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Pet object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.category != null) {
+            result
+                ..add(r'category')
+                ..add(serializers.serialize(object.category,
+                    specifiedType: const FullType(Category)));
+        }
+        result
+            ..add(r'name')
+            ..add(serializers.serialize(object.name,
+                specifiedType: const FullType(String)));
+        result
+            ..add(r'photoUrls')
+            ..add(serializers.serialize(object.photoUrls,
+                specifiedType: const FullType(BuiltList, [FullType(String)])));
+        if (object.tags != null) {
+            result
+                ..add(r'tags')
+                ..add(serializers.serialize(object.tags,
+                    specifiedType: const FullType(BuiltList, [FullType(Tag)])));
+        }
+        if (object.status != null) {
+            result
+                ..add(r'status')
+                ..add(serializers.serialize(object.status,
+                    specifiedType: const FullType(PetStatusEnum)));
+        }
+        return result;
+    }
+
+    @override
+    Pet deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = PetBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'category':
+                    result.category.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(Category)) as Category);
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'photoUrls':
+                    result.photoUrls.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(String)])) as BuiltList<String>);
+                    break;
+                case r'tags':
+                    result.tags.replace(serializers.deserialize(value,
+                        specifiedType: const FullType(BuiltList, [FullType(Tag)])) as BuiltList<Tag>);
+                    break;
+                case r'status':
+                    result.status = serializers.deserialize(value,
+                        specifiedType: const FullType(PetStatusEnum)) as PetStatusEnum;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
 class PetStatusEnum extends EnumClass {
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
index 6ac8f07169c..9c4f0ec6db4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/read_only_first.dart
@@ -20,12 +20,64 @@ abstract class ReadOnlyFirst implements Built<ReadOnlyFirst, ReadOnlyFirstBuilde
     @BuiltValueField(wireName: r'baz')
     String get baz;
 
-    // Boilerplate code needed to wire-up generated code
     ReadOnlyFirst._();
 
     static void _initializeBuilder(ReadOnlyFirstBuilder b) => b;
 
     factory ReadOnlyFirst([void updates(ReadOnlyFirstBuilder b)]) = _$ReadOnlyFirst;
-    static Serializer<ReadOnlyFirst> get serializer => _$readOnlyFirstSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<ReadOnlyFirst> get serializer => _$ReadOnlyFirstSerializer();
+}
+
+class _$ReadOnlyFirstSerializer implements StructuredSerializer<ReadOnlyFirst> {
+
+    @override
+    final Iterable<Type> types = const [ReadOnlyFirst, _$ReadOnlyFirst];
+    @override
+    final String wireName = r'ReadOnlyFirst';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, ReadOnlyFirst object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.bar != null) {
+            result
+                ..add(r'bar')
+                ..add(serializers.serialize(object.bar,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.baz != null) {
+            result
+                ..add(r'baz')
+                ..add(serializers.serialize(object.baz,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    ReadOnlyFirst deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = ReadOnlyFirstBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'bar':
+                    result.bar = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'baz':
+                    result.baz = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
index dc072d5ddab..99d555fee16 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/special_model_name.dart
@@ -16,12 +16,54 @@ abstract class SpecialModelName implements Built<SpecialModelName, SpecialModelN
     @BuiltValueField(wireName: r'$special[property.name]')
     int get dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket;
 
-    // Boilerplate code needed to wire-up generated code
     SpecialModelName._();
 
     static void _initializeBuilder(SpecialModelNameBuilder b) => b;
 
     factory SpecialModelName([void updates(SpecialModelNameBuilder b)]) = _$SpecialModelName;
-    static Serializer<SpecialModelName> get serializer => _$specialModelNameSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<SpecialModelName> get serializer => _$SpecialModelNameSerializer();
+}
+
+class _$SpecialModelNameSerializer implements StructuredSerializer<SpecialModelName> {
+
+    @override
+    final Iterable<Type> types = const [SpecialModelName, _$SpecialModelName];
+    @override
+    final String wireName = r'SpecialModelName';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, SpecialModelName object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket != null) {
+            result
+                ..add(r'$special[property.name]')
+                ..add(serializers.serialize(object.dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket,
+                    specifiedType: const FullType(int)));
+        }
+        return result;
+    }
+
+    @override
+    SpecialModelName deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = SpecialModelNameBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'$special[property.name]':
+                    result.dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
index 528acd843e7..e1a3fcf392c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/tag.dart
@@ -20,12 +20,64 @@ abstract class Tag implements Built<Tag, TagBuilder> {
     @BuiltValueField(wireName: r'name')
     String get name;
 
-    // Boilerplate code needed to wire-up generated code
     Tag._();
 
     static void _initializeBuilder(TagBuilder b) => b;
 
     factory Tag([void updates(TagBuilder b)]) = _$Tag;
-    static Serializer<Tag> get serializer => _$tagSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<Tag> get serializer => _$TagSerializer();
+}
+
+class _$TagSerializer implements StructuredSerializer<Tag> {
+
+    @override
+    final Iterable<Type> types = const [Tag, _$Tag];
+    @override
+    final String wireName = r'Tag';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, Tag object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.name != null) {
+            result
+                ..add(r'name')
+                ..add(serializers.serialize(object.name,
+                    specifiedType: const FullType(String)));
+        }
+        return result;
+    }
+
+    @override
+    Tag deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = TagBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'name':
+                    result.name = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
index 93259a43019..c58dbae1dfc 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/model/user.dart
@@ -45,12 +45,124 @@ abstract class User implements Built<User, UserBuilder> {
     @BuiltValueField(wireName: r'userStatus')
     int get userStatus;
 
-    // Boilerplate code needed to wire-up generated code
     User._();
 
     static void _initializeBuilder(UserBuilder b) => b;
 
     factory User([void updates(UserBuilder b)]) = _$User;
-    static Serializer<User> get serializer => _$userSerializer;
+
+    @BuiltValueSerializer(custom: true)
+    static Serializer<User> get serializer => _$UserSerializer();
+}
+
+class _$UserSerializer implements StructuredSerializer<User> {
+
+    @override
+    final Iterable<Type> types = const [User, _$User];
+    @override
+    final String wireName = r'User';
+
+    @override
+    Iterable<Object> serialize(Serializers serializers, User object,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = <Object>[];
+        if (object.id != null) {
+            result
+                ..add(r'id')
+                ..add(serializers.serialize(object.id,
+                    specifiedType: const FullType(int)));
+        }
+        if (object.username != null) {
+            result
+                ..add(r'username')
+                ..add(serializers.serialize(object.username,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.firstName != null) {
+            result
+                ..add(r'firstName')
+                ..add(serializers.serialize(object.firstName,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.lastName != null) {
+            result
+                ..add(r'lastName')
+                ..add(serializers.serialize(object.lastName,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.email != null) {
+            result
+                ..add(r'email')
+                ..add(serializers.serialize(object.email,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.password != null) {
+            result
+                ..add(r'password')
+                ..add(serializers.serialize(object.password,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.phone != null) {
+            result
+                ..add(r'phone')
+                ..add(serializers.serialize(object.phone,
+                    specifiedType: const FullType(String)));
+        }
+        if (object.userStatus != null) {
+            result
+                ..add(r'userStatus')
+                ..add(serializers.serialize(object.userStatus,
+                    specifiedType: const FullType(int)));
+        }
+        return result;
+    }
+
+    @override
+    User deserialize(Serializers serializers, Iterable<Object> serialized,
+        {FullType specifiedType = FullType.unspecified}) {
+        final result = UserBuilder();
+
+        final iterator = serialized.iterator;
+        while (iterator.moveNext()) {
+            final key = iterator.current as String;
+            iterator.moveNext();
+            final dynamic value = iterator.current;
+            switch (key) {
+                case r'id':
+                    result.id = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+                case r'username':
+                    result.username = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'firstName':
+                    result.firstName = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'lastName':
+                    result.lastName = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'email':
+                    result.email = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'password':
+                    result.password = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'phone':
+                    result.phone = serializers.deserialize(value,
+                        specifiedType: const FullType(String)) as String;
+                    break;
+                case r'userStatus':
+                    result.userStatus = serializers.deserialize(value,
+                        specifiedType: const FullType(int)) as int;
+                    break;
+            }
+        }
+        return result.build();
+    }
 }
 
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/additional_properties_class_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/additional_properties_class_test.dart
index 81db250160d..a42d4361266 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/additional_properties_class_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/additional_properties_class_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for AdditionalPropertiesClass
 void main() {
-  final instance = AdditionalPropertiesClass();
+  final instance = AdditionalPropertiesClassBuilder();
+  // TODO add properties to the builder and call build()
 
   group(AdditionalPropertiesClass, () {
     // BuiltMap<String, String> mapProperty
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/animal_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/animal_test.dart
index d1fd66cefbe..9af52a98ee9 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/animal_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/animal_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Animal
 void main() {
-  final instance = Animal();
+  final instance = AnimalBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Animal, () {
     // String className
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/api_response_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/api_response_test.dart
index 39d3ffc2941..cb3253820b5 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/api_response_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/api_response_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ApiResponse
 void main() {
-  final instance = ApiResponse();
+  final instance = ApiResponseBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ApiResponse, () {
     // int code
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_of_array_of_number_only_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_of_array_of_number_only_test.dart
index 6d4f7c31fde..275290a0506 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_of_array_of_number_only_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_of_array_of_number_only_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ArrayOfArrayOfNumberOnly
 void main() {
-  final instance = ArrayOfArrayOfNumberOnly();
+  final instance = ArrayOfArrayOfNumberOnlyBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ArrayOfArrayOfNumberOnly, () {
     // BuiltList<BuiltList<num>> arrayArrayNumber
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_of_number_only_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_of_number_only_test.dart
index 4a34a792ec3..3b8d21dec0e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_of_number_only_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_of_number_only_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ArrayOfNumberOnly
 void main() {
-  final instance = ArrayOfNumberOnly();
+  final instance = ArrayOfNumberOnlyBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ArrayOfNumberOnly, () {
     // BuiltList<num> arrayNumber
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_test_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_test_test.dart
index 0c53feccd9a..fe28e8db27a 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_test_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/array_test_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ArrayTest
 void main() {
-  final instance = ArrayTest();
+  final instance = ArrayTestBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ArrayTest, () {
     // BuiltList<String> arrayOfString
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/capitalization_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/capitalization_test.dart
index 0775e8d2756..f33adee56b4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/capitalization_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/capitalization_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Capitalization
 void main() {
-  final instance = Capitalization();
+  final instance = CapitalizationBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Capitalization, () {
     // String smallCamel
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/cat_all_of_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/cat_all_of_test.dart
index 460577b0234..39e55d2a8a8 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/cat_all_of_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/cat_all_of_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for CatAllOf
 void main() {
-  final instance = CatAllOf();
+  final instance = CatAllOfBuilder();
+  // TODO add properties to the builder and call build()
 
   group(CatAllOf, () {
     // bool declawed
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/cat_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/cat_test.dart
index 05c2b79badb..20c9c639016 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/cat_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/cat_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Cat
 void main() {
-  final instance = Cat();
+  final instance = CatBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Cat, () {
     // String className
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/category_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/category_test.dart
index fc2c1ecb46e..9a554657aee 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/category_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/category_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Category
 void main() {
-  final instance = Category();
+  final instance = CategoryBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Category, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/class_model_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/class_model_test.dart
index af5ab7492c7..a7cafb35578 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/class_model_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/class_model_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ClassModel
 void main() {
-  final instance = ClassModel();
+  final instance = ClassModelBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ClassModel, () {
     // String class_
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/dog_all_of_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/dog_all_of_test.dart
index f7bed7fdebf..c86956a1ecc 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/dog_all_of_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/dog_all_of_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for DogAllOf
 void main() {
-  final instance = DogAllOf();
+  final instance = DogAllOfBuilder();
+  // TODO add properties to the builder and call build()
 
   group(DogAllOf, () {
     // String breed
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/dog_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/dog_test.dart
index 4daa11323da..47480ce518e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/dog_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/dog_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Dog
 void main() {
-  final instance = Dog();
+  final instance = DogBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Dog, () {
     // String className
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/enum_arrays_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/enum_arrays_test.dart
index 3aa0e621f79..7f51477c8ca 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/enum_arrays_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/enum_arrays_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for EnumArrays
 void main() {
-  final instance = EnumArrays();
+  final instance = EnumArraysBuilder();
+  // TODO add properties to the builder and call build()
 
   group(EnumArrays, () {
     // String justSymbol
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/enum_test_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/enum_test_test.dart
index 8d963d1eead..cab0b474ad7 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/enum_test_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/enum_test_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for EnumTest
 void main() {
-  final instance = EnumTest();
+  final instance = EnumTestBuilder();
+  // TODO add properties to the builder and call build()
 
   group(EnumTest, () {
     // String enumString
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/file_schema_test_class_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/file_schema_test_class_test.dart
index fcab730f1d5..f06dffe0773 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/file_schema_test_class_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/file_schema_test_class_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for FileSchemaTestClass
 void main() {
-  final instance = FileSchemaTestClass();
+  final instance = FileSchemaTestClassBuilder();
+  // TODO add properties to the builder and call build()
 
   group(FileSchemaTestClass, () {
     // ModelFile file
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/foo_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/foo_test.dart
index c788dd3a3c9..af504c9d66e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/foo_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/foo_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Foo
 void main() {
-  final instance = Foo();
+  final instance = FooBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Foo, () {
     // String bar (default value: 'bar')
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/format_test_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/format_test_test.dart
index 1b56b04d4c8..301b7e71a9c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/format_test_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/format_test_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for FormatTest
 void main() {
-  final instance = FormatTest();
+  final instance = FormatTestBuilder();
+  // TODO add properties to the builder and call build()
 
   group(FormatTest, () {
     // int integer
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/has_only_read_only_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/has_only_read_only_test.dart
index 2556caff31f..3b28f0ca8ae 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/has_only_read_only_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/has_only_read_only_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for HasOnlyReadOnly
 void main() {
-  final instance = HasOnlyReadOnly();
+  final instance = HasOnlyReadOnlyBuilder();
+  // TODO add properties to the builder and call build()
 
   group(HasOnlyReadOnly, () {
     // String bar
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/health_check_result_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/health_check_result_test.dart
index 81960b87ce8..bcc12c8609b 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/health_check_result_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/health_check_result_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for HealthCheckResult
 void main() {
-  final instance = HealthCheckResult();
+  final instance = HealthCheckResultBuilder();
+  // TODO add properties to the builder and call build()
 
   group(HealthCheckResult, () {
     // String nullableMessage
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/inline_response_default_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/inline_response_default_test.dart
index cae92c3385e..dea2a202cb4 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/inline_response_default_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/inline_response_default_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for InlineResponseDefault
 void main() {
-  final instance = InlineResponseDefault();
+  final instance = InlineResponseDefaultBuilder();
+  // TODO add properties to the builder and call build()
 
   group(InlineResponseDefault, () {
     // Foo string
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/map_test_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/map_test_test.dart
index ed5f45ce721..504a0491692 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/map_test_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/map_test_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for MapTest
 void main() {
-  final instance = MapTest();
+  final instance = MapTestBuilder();
+  // TODO add properties to the builder and call build()
 
   group(MapTest, () {
     // BuiltMap<String, BuiltMap<String, String>> mapMapOfString
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/mixed_properties_and_additional_properties_class_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/mixed_properties_and_additional_properties_class_test.dart
index cc36b6e7dd3..554114321bf 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/mixed_properties_and_additional_properties_class_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/mixed_properties_and_additional_properties_class_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for MixedPropertiesAndAdditionalPropertiesClass
 void main() {
-  final instance = MixedPropertiesAndAdditionalPropertiesClass();
+  final instance = MixedPropertiesAndAdditionalPropertiesClassBuilder();
+  // TODO add properties to the builder and call build()
 
   group(MixedPropertiesAndAdditionalPropertiesClass, () {
     // String uuid
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model200_response_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model200_response_test.dart
index 6b77b5481b6..39936c0b46c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model200_response_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model200_response_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Model200Response
 void main() {
-  final instance = Model200Response();
+  final instance = Model200ResponseBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Model200Response, () {
     // int name
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_client_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_client_test.dart
index c3908d24b92..a545bd208d8 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_client_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_client_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ModelClient
 void main() {
-  final instance = ModelClient();
+  final instance = ModelClientBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ModelClient, () {
     // String client
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_file_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_file_test.dart
index 4bf8d1250af..b56d60d212b 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_file_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_file_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ModelFile
 void main() {
-  final instance = ModelFile();
+  final instance = ModelFileBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ModelFile, () {
     // Test capitalization
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_list_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_list_test.dart
index 03cfd40a8f1..90e24ea428e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_list_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_list_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ModelList
 void main() {
-  final instance = ModelList();
+  final instance = ModelListBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ModelList, () {
     // String n123list
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_return_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_return_test.dart
index ac0e3574eab..3fa61b44adb 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_return_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/model_return_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ModelReturn
 void main() {
-  final instance = ModelReturn();
+  final instance = ModelReturnBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ModelReturn, () {
     // int return_
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/name_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/name_test.dart
index 7f3fa21ef78..372fa6337e8 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/name_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/name_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Name
 void main() {
-  final instance = Name();
+  final instance = NameBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Name, () {
     // int name
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/nullable_class_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/nullable_class_test.dart
index 0bcae3b4e8b..bb611393f65 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/nullable_class_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/nullable_class_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for NullableClass
 void main() {
-  final instance = NullableClass();
+  final instance = NullableClassBuilder();
+  // TODO add properties to the builder and call build()
 
   group(NullableClass, () {
     // int integerProp
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/number_only_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/number_only_test.dart
index 2630062232e..332d1ea7443 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/number_only_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/number_only_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for NumberOnly
 void main() {
-  final instance = NumberOnly();
+  final instance = NumberOnlyBuilder();
+  // TODO add properties to the builder and call build()
 
   group(NumberOnly, () {
     // num justNumber
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/order_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/order_test.dart
index 25b2cc396f3..0b063de2de5 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/order_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/order_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Order
 void main() {
-  final instance = Order();
+  final instance = OrderBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Order, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/outer_composite_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/outer_composite_test.dart
index a48b12809c6..7016c1f4d34 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/outer_composite_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/outer_composite_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for OuterComposite
 void main() {
-  final instance = OuterComposite();
+  final instance = OuterCompositeBuilder();
+  // TODO add properties to the builder and call build()
 
   group(OuterComposite, () {
     // num myNumber
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/pet_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/pet_test.dart
index 9d5b6e4dd4a..bce1534977e 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/pet_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/pet_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Pet
 void main() {
-  final instance = Pet();
+  final instance = PetBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Pet, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/read_only_first_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/read_only_first_test.dart
index cdb7de301ea..892da5669ac 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/read_only_first_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/read_only_first_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for ReadOnlyFirst
 void main() {
-  final instance = ReadOnlyFirst();
+  final instance = ReadOnlyFirstBuilder();
+  // TODO add properties to the builder and call build()
 
   group(ReadOnlyFirst, () {
     // String bar
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/special_model_name_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/special_model_name_test.dart
index 41d8d80eeb0..40f86751c11 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/special_model_name_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/special_model_name_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for SpecialModelName
 void main() {
-  final instance = SpecialModelName();
+  final instance = SpecialModelNameBuilder();
+  // TODO add properties to the builder and call build()
 
   group(SpecialModelName, () {
     // int dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/tag_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/tag_test.dart
index 0dbda6e4986..867b246921c 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/tag_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/tag_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for Tag
 void main() {
-  final instance = Tag();
+  final instance = TagBuilder();
+  // TODO add properties to the builder and call build()
 
   group(Tag, () {
     // int id
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/user_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/user_test.dart
index 09e720b625c..01a3b6f07de 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/user_test.dart
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/test/user_test.dart
@@ -3,7 +3,8 @@ import 'package:test/test.dart';
 
 // tests for User
 void main() {
-  final instance = User();
+  final instance = UserBuilder();
+  // TODO add properties to the builder and call build()
 
   group(User, () {
     // int id
-- 
GitLab