1. 指南 ?

该库构建于 json_serializablefreezed 库的基础之上。

该库提供了一种能力,可以**直接从 JSON 文件自动生成由 freezed 库支持的类对象**。

请给这个项目一些 ❤️ 并给它点星支持。

1.1. 动机?

  • 基于 JSON 的模型设计。
  • 同步模型对象的设计和实现。
  • 进一步扩展 freezed 库的可能性。

1.2. 开始使用?

1.2.1. 前提条件

该库自动生成的代码依赖于 json_serializablefreezed

因此,让我们将必需的库添加到 pubspec.yaml 文件中,如下所示。

dependencies:
  json_annotation: ^4.6.0
  freezed_annotation: ^2.1.0

dev_dependencies:
  json_serializable: ^6.3.1
  freezed: ^2.1.0+1

1.2.2. 安装库

接下来,让我们安装用于使用 **freezer** 功能的库。

使用 Dart

dart pub get freezer

使用 Flutter

flutter pub get freezer

1.2.3. 创建 JSON 文件

**freezer** 将 JSON 文件解释为设计信息,并自动生成由 freezed 库支持的对象类。

在使用 freezer 时,您需要注意以下规则。

  1. **freezer** 解析扩展名为 .freezer.json 的文件。
  2. **freezer** 解析存储在项目根目录的 .design 文件夹中的 JSON 文件。

因此,现在让我们创建一个具有以下结构的 JSON 文件作为示例。

{
  "shop": {
    "name.!required": "My Fancy Shop",
    "product": [
      {
        "name": "Chocolate",
        "price": 5.99
      },
      {
        "name": "Gummy",
        "price": 8.99
      }
    ],
    "closed": false
  }
}

然后,将此 JSON 文件存储在项目根目录的 .design 文件夹中。

.
├── analysis_options.yaml
├── design
│   └── shop.freezer.json
├── lib
├── pubspec.lock
└── pubspec.yaml

1.2.4. 执行命令

现在,让我们执行以下命令,看看会发生什么!

dart pub run freezer:main

如果获得以下输出,则表示此示例成功。

Started process for 1 files

[INFO] Reading cached asset graph completed, took 31ms
[INFO] Checking for updates since last build completed, took 293ms
[INFO] Running build completed, took 917ms
[INFO] Caching finalized dependency graph completed, took 17ms
[INFO] Succeeded after 939ms with 4 outputs (4 actions)

┏━━ Generated dart files
┣ ✔ /Users/user/package/lib//product.dart
┣ ✔ /Users/user/package/lib//product.freezed.dart
┣ ✔ /Users/user/package/lib//product.g.dart
┣ ✔ /Users/user/package/lib//shop.dart
┣ ✔ /Users/user/package/lib//shop.freezed.dart
┣ ✔ /Users/user/package/lib//shop.g.dart
┗━━ 6 files in 1.1904 seconds

您可以在 .lib 文件夹中看到生成的 dart 代码,如下所示。

.
├── analysis_options.yaml
├── design
│   └── shop.freezer.json
├── lib
│   ├── product.dart
│   ├── product.freezed.dart
│   ├── product.g.dart
│   ├── shop.dart
│   ├── shop.freezed.dart
│   └── shop.g.dart
├── pubspec.lock
└── pubspec.yaml

1.3. 贡献?

如果您想为 **freezer** 做出贡献,请创建一个 issue 或提交一个 Pull Request。

为开源项目做出贡献的方式有很多。例如,可以考虑以下主题:

  • 存在未实现的请求参数或响应字段。
  • 文档已过时或不完整。
  • 有更好的方法或想法来实现某个功能。
  • 等等…

您可以从以下资源中查看更多详细信息。

或者,如果您愿意,可以创建一个 讨论

随时加入这项开发,多元化的意见可以使软件变得更好!

1.4. 支持 ❤️

展示您对该项目支持的最简单方法是**在 GitHubPub.dev 上给项目点赞**。

您还可以通过在 GitHub 上**成为赞助商**来支持此项目。

1.5. 许可证?

**freezer** 的所有资源均根据 BSD-3 许可证提供。

Copyright 2022 Kato Shinya. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided the conditions.

注意 源文件中的许可证通知会根据 .github/header-checker-lint.yml 进行严格验证。请检查 header-checker-lint.yml 以了解允许的标准。

1.6. 更多信息?

**freezer** 由 **Kato Shinya (@myConsciousness)** 设计和实现。

GitHub

查看 Github