SwaggerDartCodeGenerator is a code generator that looks for *.swagger
files and builds .swagger.dart
files, based on the schema. Codegenration based on Chopper and JsonAnnotation models and can be configured for your needs.
In general case for each .swagger file three outputs will be created.
.dart generated by Swagger dart code generator, contains all models, requests, converters, etc.
[Since v1.2.0] .enums.dart generated by Swagger dart code generator, contains all enums and enums mappings.
.chopper.dart - generated by chopper.
.g.dart - generated by json_serializable.
Add the following to your pubspec.yaml
file to be able to do code generation:
dev_dependencies:
chopper_generator: ^3.0.5
json_annotation: ^3.0.1
json_serializable: ^3.4.1
swagger_dart_code_generator: any
The generated code uses the following packages in run-time:
dependencies:
chopper: ^3.0.3
Then run:
pub packages get
or
flutter packages get
Now SwaggerGenerator will generate the API files for you by running:
pub run build_runner build
or
flutter pub run build_runner build
Swagger generator offers some configuration options to generate code. All options should be included on build.yaml
file on the root of the project:
targets:
$default:
builders:
swagger_dart_code_generator:
options:
# custom configuration options!
Option | Default value | Is required | Description |
---|---|---|---|
with_base_url |
true |
false |
If this option is false, generator will ignore base url in swagger file. |
with_converter |
true |
false |
If option is true, combination of all mappings will be generated. |
ignore_headers |
false |
false |
If option is true, headers will not be generated. |
use_path_for_request_names |
false |
false |
If property == false , then method name == operationId ?? path+methodType. If true - only path+methodType. |
enums_case_sensitive |
true |
false |
If value is false, ‘enumValue’ will be defined like Enum.enumValue even it’s json key equals ‘ENUMVALUE’ |
use_default_null_for_lists |
false |
false |
If option is true, default value for lists will be null, otherwice - [] |
build_only_models |
false |
false |
If option is true, chopper classes will not be generated. |
default_values_map |
[] |
false |
Contains map of types and theirs default values. See DefaultValueMap. |
response_override_value_map |
[] |
false |
Contains map of responses and theirs overriden values. See ResponseOverrideValueMap. |
input_folder |
- |
true |
Path to folder with .swagger files (for ex. swagger_examples, or lib/swaggers). |
output_folder |
- |
true |
Path to output folder (for ex. lib/generated). |
It’s important to remember that, by default, build will follow Dart’s package layout conventions, meaning that only some folders will be considered to parse the input files. So, if you want to reference files from a folder other than lib/
, make sure you’ve included it on sources
:
targets:
$default:
sources:
- lib/**
- swagger_examples/**
- swaggers/**
If you want to add defaultValue: attribute to fields with concrete type you can use default value map. Please see next example:
targets:
$default:
builders:
swagger_dart_code_generator:
options:
input_folder: 'lib/swaggers'
output_folder: 'lib/generated_code/'
default_values_map:
- type_name: int
default_value: '36'
- type_name: String
default_value: 'defaut'
- type_name: 'List<String>'
default_value: '[]'
If you want to override response for concrete request, you can use response_override_value_map. For example:
targets:
$default:
builders:
swagger_dart_code_generator:
options:
input_folder: 'lib/swaggers'
output_folder: 'lib/generated_code/'
response_override_value_map:
- url: '/store/inventory'
method: get
overriden_value: 'List<dynamic>'
- url: '/news/latest'
method: put
overriden_value: 'MyPerfectType'
Check the examples to see how to use it in details.
Author: epam-cross-platform-lab
Source Code: https://github.com/epam-cross-platform-lab/swagger-dart-code-generator
#flutter #dart #mobile-apps