搜索插件、代码仓与 APP 分类

插件详情v7.0.0

openapi_generator

基于 npm 版本的 openapi-generator-cli 实现,用于生成 OpenAPI 客户端 SDK 的代码生成器。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
1.5万
喜欢数
126
Pub 分数
130

安装插件

flutter pub add openapi_generator

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Flutter/Dart 包,可从 OpenAPI 规范生成客户端 SDK,灵感来自 npm 的 openapi-generator-cli。它可自动化创建类型安全的 Dart 代码以进行 API 交互,减少手动工作量和潜在错误。生成的代码支持多种平台,包括 Android、iOS、Web、macOS、Windows 和 Linux,可在不同环境中实现一致的 API 客户端使用。非常适合依赖 OpenAPI/Swagger 定义来维护其应用程序中强大且更新及时的 API 集成的团队。

适合场景

  • 从 OpenAPI 规范自动生成 API 客户端
  • 使用类型安全集成 REST API
  • 跨平台 Flutter 应用 API 客户端
  • 保持 API 合同与后端更改同步
  • 减少 API 服务层中的样板代码

主要特点

  • 从 OpenAPI 3.x 规范生成 Dart 代码
  • 支持多平台输出
  • 生成类型安全的 API 模型和服务
  • 通过 Flutter pub add 集成
  • 使用类似 CLI 的工作流程

适合对象

  • 使用 OpenAPI 定义的 API 的 Flutter 开发人员
  • 需要自动化 API 客户端更新的团队
  • 跨平台需要一致API集成的项目
  • 希望减少手动 API 服务编码的开发人员

使用建议

  • 需要有效的 OpenAPI 规范文件
  • 生成的代码可能需要针对复杂端点进行自定义
  • 在 CI/CD 流水线中使用效果最佳,以确保一致性
  • 不是运行时库——仅生成源代码

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

openapi-generator-dart

pub package Pub Likes Pub Points Pub Popularity GitHub Repo stars codecov

Like this library? Give us a star or a like!


⚠️ Java Requirement

Java is required to use this library.
The OpenAPI Generator CLI is a Java application.
Please ensure you have Java (version 8 or higher) installed and available in your system PATH.
You can check your Java installation with:

java -version

If you do not have Java installed, download it from Adoptium or Oracle.


⚠️ Deprecation & Breaking Change Notice

skipIfSpecIsUnchanged is Deprecated
  • The skipIfSpecIsUnchanged option is now deprecated and will be removed in the next major release.
  • Local OpenAPI specs are now automatically watched for changes.
    • If your spec file is in the lib/ folder, this works out of the box.
    • If your spec file is outside lib/, you must update or add a build.yaml to include your spec file as a source.
      Example:
      targets:
        $default:
          sources:
            - $package$
            - lib/**
            - openapi.yaml # or your spec file path
      
  • Remote specs:
    Use the forceAlwaysRun (defaults to false) option to ensure the generator always runs.
    • This option is ignored for local specs.
    • When enabled, it modifies the annotated file to force regeneration. This might cause issues such as merge conflicts

Overview

This repository provides Dart/Flutter libraries for generating OpenAPI client SDKs directly from your OpenAPI specification. Inspired by Openapi Generator Cli (npm), it enables seamless integration into Dart and Flutter projects.

Libraries
Library Description Latest Version
openapi-generator Dev dependency for generating OpenAPI client SDK via Dart source gen (usage) pub package
openapi-generator-annotations Annotations for configuring OpenAPI client SDK generation (usage) pub package
openapi-generator-cli CLI wrapper for OpenAPI code generation (usage) pub package

Quick Start

1. Add Dependencies

Add the annotations package to your pubspec.yaml:

dependencies:
  openapi_generator_annotations: ^<latest-version>

Add the generator as a dev dependency:

dev_dependencies:
  openapi_generator: ^<latest-version>

Beta Features:
For beta features, use the beta branch:

dependencies:
  openapi_generator_annotations:
    git:
      url: https://github.com/gibahjoe/openapi-generator-dart.git
      ref: beta
      path: openapi-generator-annotations

dev_dependencies:
  openapi_generator:
    git:
      url: https://github.com/gibahjoe/openapi-generator-dart.git
      ref: beta
      path: openapi-generator
2. Annotate Your Dart Class

Annotate a Dart class with @Openapi() to configure code generation:

import 'package:openapi_generator_annotations/openapi_generator_annotations.dart';

@Openapi(
  additionalProperties: DioProperties(pubName: 'petstore_api', pubAuthor: 'Johnny Depp'),
  inputSpec: RemoteSpec(path: 'https://petstore3.swagger.io/api/v3/openapi.json'),
  typeMappings: {'Pet': 'ExamplePet'},
  generatorName: Generator.dio,
  runSourceGenOnOutput: true,
  outputDirectory: 'api/petstore_api',
)
class Example {}
3. Generate the SDK

Run the build command:

dart run build_runner build --delete-conflicting-outputs
# or, for Flutter projects:
flutter pub run build_runner build --delete-conflicting-outputs

The generated SDK will appear in the specified output directory.


Next Generation Features (v5.0+)

  • Spec Caching: Automatically caches your OpenAPI spec for faster incremental builds.
  • Remote Spec Support: Pulls and caches remote specs; always fetches the latest version unless using a local copy.
  • Smart Generation: Skips code generation if there are no changes in the spec or based on flags.
  • All previous features remain available.

Example:

@Openapi(
  additionalProperties: DioProperties(pubName: 'petstore_api', pubAuthor: 'Johnny Depp'),
  inputSpec: RemoteSpec(path: 'https://petstore3.swagger.io/api/v3/openapi.json'),
  typeMappings: {'Pet': 'ExamplePet'},
  generatorName: Generator.dio,
  runSourceGenOnOutput: true,
  outputDirectory: 'api/petstore_api',
)
class Example {}

Advanced Configuration

If you are having issues with the generated code, this is not an problem with this package and creating an issue here will not help solve it. Its best to create the issue in the base OpenApi library since this package is a wrapper around that library for ease of use with Flutter/dart.

Below are some advanced configurations you may try.

  • Custom Templates:
    Use the templateDirectory parameter to specify a custom code generation template.

  • Type & Import Mappings:
    Use typeMappings and importMappings to control how OpenAPI types and models are mapped in Dart.

  • Reserved Words:
    Use reservedWordsMappings to avoid conflicts with Dart reserved words.

Example:

@Openapi(
  additionalProperties: DioProperties(pubName: 'custom_api', pubAuthor: 'Jane Doe'),
  inputSpec: InputSpec(path: 'openapi-spec.yaml'),
  generatorName: Generator.dio,
  templateDirectory: 'templates/dart',
  typeMappings: {'date': 'DateTime'},
  importMappings: {'DateTime': 'package:my_project/date_time.dart'},
  reservedWordsMappings: {'class': 'clazz'},
  outputDirectory: 'api/custom_api',
)
class CustomApi {}

Troubleshooting

Common Issues
  • Dependency Conflicts:
    Use dependency_overrides in the generated package's pubspec.yaml and add pubspec.yaml to .openapi-generator-ignore to prevent overwrites.

  • Incorrect Generated Code:

    • Fix your OpenAPI spec (preferred).
    • Manually edit the generated code and add the files to .openapi-generator-ignore to prevent them from being overwritten.

.openapi-generator-ignore Example:

# Ignore all test files
test/*
# Ignore pubspec.yaml to preserve manual changes
pubspec.yaml

所属分类

依赖

依赖清单 11 项

源码仓库

使用此插件的项目

暂无相关数据。