Flutter Swagger代码生成插件swagger_dart_code_generator_solve_generic的使用
Flutter Swagger代码生成插件swagger_dart_code_generator_solve_generic的使用
📣 从Swagger/OpenAPI模式构建dart类型 #
SwaggerDartCodeGenerator是一个代码生成器,它查找*.swagger
文件并基于模式生成.swagger.dart
文件。代码生成基于Chopper和JsonAnnotation模型,并可以根据您的需求进行配置。
概述 #
通常情况下,每个.swagger
文件将生成三种输出。
.dart由Swagger dart code generator生成,包含所有模型、请求、转换器等。
自v1.2.0起,.enums.dart由Swagger dart code generator生成,包含所有枚举和枚举映射。
.chopper.dart - 由chopper生成。
.g.dart - 由json_serializable生成。

安装 #
在pubspec.yaml
文件中添加以下内容以支持代码生成:
dev_dependencies:
chopper_generator: ^3.0.5
json_annotation: ^3.0.1
json_serializable: ^3.4.1
swagger_dart_code_generator: any
运行时使用的包包括:
dependencies:
chopper: ^3.0.3
然后运行以下命令来获取包:
pub packages get
或者
flutter packages get
现在,通过运行以下命令让SwaggerGenerator为您生成API文件:
pub run build_runner build
或者
flutter pub run build_runner build
配置 #
Swagger生成器提供了一些配置选项以生成代码。所有选项都应包含在项目的根目录下的build.yaml
文件中:
targets:
$default:
builders:
swagger_dart_code_generator:
options:
# 自定义配置选项!
以下是配置选项表:
选项 | 默认值 | 是否必需 | 描述 |
---|---|---|---|
use_inheritance |
true |
false |
启用或禁用extends关键字。 |
with_base_url |
true |
false |
如果此选项为false,则生成器将忽略Swagger文件中的baseUrl。 |
use_required_attribute_for_headers |
true |
false |
如果此选项为false,则生成器不会为headers添加@required属性。 |
with_converter |
true |
false |
如果选项为true,则会生成所有映射的组合。 |
ignore_headers |
false |
false |
如果选项为true,则不会生成headers。 |
use_path_for_request_names |
false |
false |
如果属性为false ,则方法名等于operationId ?? path+methodType。如果为true ,则只有path+methodType。 |
enums_case_sensitive |
true |
false |
如果值为false,则enumValue 将被定义为Enum.enumValue 即使它的json键等于ENUMVALUE 。 |
use_default_null_for_lists |
false |
false |
如果选项为true,则列表的默认值为null,否则为[] 。 |
build_only_models |
false |
false |
如果选项为true,则不会生成chopper类。 |
include_if_null |
null |
false |
启用或禁用includeIfNull JsonAnnotation功能并设置其值。参见IncludeIfNull。 |
default_values_map |
[] |
false |
包含类型及其默认值的映射。参见DefaultValueMap。 |
response_override_value_map |
[] |
false |
包含响应及其覆盖值的映射。参见ResponseOverrideValueMap。 |
input_folder |
- |
true |
.swagger文件所在的文件夹路径(例如swagger_examples或lib/swaggers)。 |
output_folder |
- |
true |
输出文件夹路径(例如lib/generated)。 |
重要的是要记住,默认情况下,build会遵循Dart的包布局约定,这意味着只会考虑某些文件夹来解析输入文件。因此,如果您想引用lib/之外的文件夹中的文件,请确保已在sources中包含了该文件夹:
targets:
$default:
sources:
- lib/**
- swagger_examples/**
- swaggers/**
模型生成的IncludeIfNull #
此选项用于为模型字段添加includeIfEmpty注解。如果未启用或为空,则includeIfNull注解将不会添加到字段中。详情请参阅官方文档。请参阅以下示例:
targets:
$default:
builders:
swagger_dart_code_generator:
options:
input_folder: 'lib/swaggers'
output_folder: 'lib/generated_code/'
include_if_null:
enabled: true
value: false
模型生成的默认值映射 #
如果您希望为特定类型的字段添加defaultValue:属性,可以使用默认值映射。请参阅以下示例:
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: 'default'
- type_name: 'List<String>'
default_value: '[]'
请求生成的响应覆盖值映射 #
如果您希望为具体的请求覆盖响应,可以使用response_override_value_map。例如:
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
overridden_value: 'List<dynamic>'
- url: '/news/latest'
method: put
overridden_value: 'MyPerfectType'
检查示例以详细了解如何使用它。
示例代码
example/lib/main.dart
import 'dart:async';
import 'package:example/generated_code/example_swagger.enums.swagger.dart';
import 'package:example/generated_code/example_swagger.swagger.dart';
Future main() async {
final client = ExampleSwagger.create();
final pet = Pet(
name: 'Boris',
tags: [],
id: 11,
photoUrls: [
'https://i.pinimg.com/originals/de/71/bb/de71bb8a57ff473cc58ebc6af58c4858.jpg'
],
category: Category(id: 1, name: 'Mops'),
status: PetStatus.available);
final postResult = await client.petPost(body: pet);
if (postResult.statusCode != 200) {
/// Some network error
}
final getResult = await client.petPetIdGet(petId: 11);
if (getResult.statusCode != 200) {
// Some network error
}
print(
'Hello, my name is ${getResult.body!.name}, I am ${getResult.body!.category!.name}');
}
更多关于Flutter Swagger代码生成插件swagger_dart_code_generator_solve_generic的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Swagger代码生成插件swagger_dart_code_generator_solve_generic的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
swagger_dart_code_generator
是一个用于从 Swagger/OpenAPI 规范生成 Dart 代码的 Flutter 插件。它可以帮助你快速生成 API 客户端、模型类和其他相关的代码,从而减少手动编写这些代码的工作量。
swagger_dart_code_generator_solve_generic
是一个扩展插件,用于解决 swagger_dart_code_generator
在处理泛型类型时的一些问题。它可以帮助生成更准确的泛型类型代码。
使用步骤
-
安装依赖
首先,你需要在
pubspec.yaml
文件中添加swagger_dart_code_generator
和swagger_dart_code_generator_solve_generic
作为开发依赖。dev_dependencies: swagger_dart_code_generator: ^2.0.0 swagger_dart_code_generator_solve_generic: ^1.0.0
然后运行
flutter pub get
以安装这些依赖。 -
配置
build.yaml
在项目的根目录下创建一个
build.yaml
文件(如果还没有的话),并配置生成器的选项。targets: $default: builders: swagger_dart_code_generator|swagger_dart_code_generator: enabled: true options: input_folder: "swagger" output_folder: "lib/generated" use_null_safety: true solve_generic: true
input_folder
: 指定包含 Swagger/OpenAPI 文件的文件夹。output_folder
: 指定生成的 Dart 代码的输出文件夹。use_null_safety
: 是否生成支持 null safety 的代码。solve_generic
: 启用swagger_dart_code_generator_solve_generic
插件来解决泛型问题。
-
运行代码生成
在终端中运行以下命令来生成代码:
flutter pub run build_runner build
这将会根据
build.yaml
中的配置生成 Dart 代码,并将其输出到指定的文件夹中。 -
使用生成的代码
生成的代码通常包括 API 客户端、模型类等。你可以在你的 Flutter 项目中直接使用这些生成的类来进行 API 调用。
import 'generated/api_client.dart'; import 'generated/models/user_model.dart'; void fetchUser() async { final client = ApiClient(); final UserModel user = await client.getUserById(1); print(user.name); }