diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java
index 0f2dac9c89f5a54a6c98f957e133116284320c11..e231fc54ccceb5c1f87f3c4220ae3b1125a20326 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java
@@ -17,9 +17,12 @@
 package org.openapitools.codegen.languages;
 
 import com.google.common.collect.Sets;
+import com.samskivert.mustache.Mustache;
+import com.samskivert.mustache.Template;
 import io.swagger.v3.oas.models.media.Schema;
 import org.apache.commons.lang3.StringUtils;
 import org.openapitools.codegen.*;
+import org.openapitools.codegen.api.TemplatePathLocator;
 import org.openapitools.codegen.config.GlobalSettings;
 import org.openapitools.codegen.meta.GeneratorMetadata;
 import org.openapitools.codegen.meta.Stability;
@@ -28,6 +31,10 @@ import org.openapitools.codegen.model.ModelMap;
 import org.openapitools.codegen.model.ModelsMap;
 import org.openapitools.codegen.model.OperationMap;
 import org.openapitools.codegen.model.OperationsMap;
+import org.openapitools.codegen.templating.CommonTemplateContentLocator;
+import org.openapitools.codegen.templating.GeneratorTemplateContentLocator;
+import org.openapitools.codegen.templating.MustacheEngineAdapter;
+import org.openapitools.codegen.templating.TemplateManagerOptions;
 import org.openapitools.codegen.utils.ModelUtils;
 import org.openapitools.codegen.utils.ProcessUtils;
 import org.slf4j.Logger;
@@ -58,6 +65,8 @@ public class DartDioNextClientCodegen extends AbstractDartCodegen {
 
     private String clientName;
 
+    private TemplateManager templateManager;
+
     public DartDioNextClientCodegen() {
         super();
 
@@ -178,6 +187,28 @@ public class DartDioNextClientCodegen extends AbstractDartCodegen {
                 configureSerializationLibraryBuiltValue(srcFolder);
                 break;
         }
+
+        TemplateManagerOptions templateManagerOptions = new TemplateManagerOptions(isEnableMinimalUpdate(), isSkipOverwrite());
+        TemplatePathLocator commonTemplateLocator = new CommonTemplateContentLocator();
+        TemplatePathLocator generatorTemplateLocator = new GeneratorTemplateContentLocator(this);
+        templateManager = new TemplateManager(
+                templateManagerOptions,
+                getTemplatingEngine(),
+                new TemplatePathLocator[]{generatorTemplateLocator, commonTemplateLocator}
+        );
+
+        // A lambda which allows for easy includes of serialization library specific
+        // templates without having to change the main template files.
+        additionalProperties.put("includeLibraryTemplate", (Mustache.Lambda) (fragment, writer) -> {
+            MustacheEngineAdapter engine = ((MustacheEngineAdapter) getTemplatingEngine());
+            String templateFile = "serialization/" + library + "/" + fragment.execute() + ".mustache";
+            Template tmpl = engine.getCompiler()
+                    .withLoader(name -> engine.findTemplate(templateManager, name))
+                    .defaultValue("")
+                    .compile(templateManager.getFullTemplateContents(templateFile));
+
+            fragment.executeTemplate(tmpl, writer);
+        });
     }
 
     private void configureSerializationLibraryBuiltValue(String srcFolder) {
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache
index 01663cfd23c2795650376e30a6342642d3369a22..892cbafd469449907e1c8d5048b9b8a0af9d558d 100644
--- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache
+++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache
@@ -1,7 +1,7 @@
 {{>header}}
 import 'dart:async';
 
-{{#useBuiltValue}}import 'package:built_value/serializer.dart';{{/useBuiltValue}}
+{{#includeLibraryTemplate}}api/imports{{/includeLibraryTemplate}}
 import 'package:dio/dio.dart';
 
 {{#operations}}
@@ -11,12 +11,8 @@ import 'package:dio/dio.dart';
 class {{classname}} {
 
   final Dio _dio;
-  {{#useBuiltValue}}
 
-  final Serializers _serializers;
-
-  {{/useBuiltValue}}
-  const {{classname}}(this._dio{{#useBuiltValue}}, this._serializers{{/useBuiltValue}});
+{{#includeLibraryTemplate}}api/constructor{{/includeLibraryTemplate}}
 
   {{#operation}}
   /// {{summary}}{{^summary}}{{nickname}}{{/summary}}
@@ -88,14 +84,14 @@ class {{classname}} {
 
     final _queryParameters = <String, dynamic>{
       {{#queryParams}}
-      {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{baseName}}': {{#useBuiltValue}}{{>serialization/built_value/query_param}}{{/useBuiltValue}},
+      {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{baseName}}': {{#includeLibraryTemplate}}api/query_param{{/includeLibraryTemplate}},
       {{/queryParams}}
     };{{/hasQueryParams}}{{#hasBodyOrFormParams}}
 
     dynamic _bodyData;
 
     try {
-{{#useBuiltValue}}{{>serialization/built_value/serialize}}{{/useBuiltValue}}
+{{#includeLibraryTemplate}}api/serialize{{/includeLibraryTemplate}}
     } catch(error, stackTrace) {
       throw DioError(
          requestOptions: _options.compose(
@@ -122,7 +118,7 @@ class {{classname}} {
     {{{returnType}}} _responseData;
 
     try {
-{{#useBuiltValue}}{{>serialization/built_value/deserialize}}{{/useBuiltValue}}
+{{#includeLibraryTemplate}}api/deserialize{{/includeLibraryTemplate}}
     } catch (error, stackTrace) {
       throw DioError(
         requestOptions: _response.requestOptions,
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/class.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/class.mustache
index da5ecb735258f8e38fef70eecc1b2e2d9e319eef..228fcf5826d1db748309416cc330836c0264d5fc 100644
--- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/class.mustache
+++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/class.mustache
@@ -1 +1 @@
-{{#useBuiltValue}}{{>serialization/built_value/class}}{{/useBuiltValue}}
\ No newline at end of file
+{{#includeLibraryTemplate}}class{{/includeLibraryTemplate}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/enum.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/enum.mustache
index 6c20417e35634d6060adbf3b16bb8dac235df00d..a47e780c2b57ef37a5fd0c10c8143fc7ccd5be06 100644
--- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/enum.mustache
+++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/enum.mustache
@@ -1 +1 @@
-{{#useBuiltValue}}{{>serialization/built_value/enum}}{{/useBuiltValue}}
\ No newline at end of file
+{{#includeLibraryTemplate}}enum{{/includeLibraryTemplate}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/constructor.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/constructor.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..e823414cc755a37c15e7089d1ad3c1e7b0375956
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/constructor.mustache
@@ -0,0 +1,3 @@
+  final Serializers _serializers;
+
+  const {{classname}}(this._dio, this._serializers);
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/deserialize.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/deserialize.mustache
similarity index 100%
rename from modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/deserialize.mustache
rename to modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/deserialize.mustache
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/imports.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/imports.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..2f62fbda42679c55ada15c385bfd209170c162d5
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/imports.mustache
@@ -0,0 +1 @@
+import 'package:built_value/serializer.dart';
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/query_param.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/query_param.mustache
similarity index 100%
rename from modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/query_param.mustache
rename to modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/query_param.mustache
diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/serialize.mustache
similarity index 97%
rename from modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache
rename to modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/serialize.mustache
index 54d8e99c7579928136b481b1936060ad286fc41a..6c4d370d86e94f0fc1e5e995f66ef5402d24947b 100644
--- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache
+++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/serialize.mustache
@@ -9,7 +9,7 @@
       {{^isMultipart}}
       _bodyData = <String, dynamic>{
         {{#formParams}}
-        {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{{baseName}}}': {{>serialization/built_value/query_param}},
+        {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{{baseName}}}': {{>serialization/built_value/api/query_param}},
         {{/formParams}}
       };
       {{/isMultipart}}
@@ -27,4 +27,4 @@
       {{/isContainer}}
       _bodyData = {{^required}}{{paramName}} == null ? null : {{/required}}_serializers.serialize({{paramName}}, specifiedType: _type);
       {{/isPrimitiveType}}
-      {{/bodyParam}}
\ No newline at end of file
+      {{/bodyParam}}