1. 指南 ?
该库构建于 json_serializable 和 freezed 库的基础之上。
该库提供了一种能力,可以**直接从 JSON 文件自动生成由 freezed 库支持的类对象**。
请给这个项目一些 ❤️ 并给它点星支持。
1.1. 动机?
- 基于 JSON 的模型设计。
- 同步模型对象的设计和实现。
- 进一步扩展 freezed 库的可能性。
1.2. 开始使用?
1.2.1. 前提条件
该库自动生成的代码依赖于 json_serializable 和 freezed。
因此,让我们将必需的库添加到 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 时,您需要注意以下规则。
- **freezer** 解析扩展名为
.freezer.json的文件。 - **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. 支持 ❤️
展示您对该项目支持的最简单方法是**在 GitHub 和 Pub.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)** 设计和实现。