持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情
freezed | Dart Package (flutter-io.cn)
译时版本:2.2.0
欢迎使用 Freezed ,另外一个用于 数据类/Union/模式匹配/克隆 的代码生成器。
动机
Dart 很棒,但是定义一个 “Model” 很冗长。我们需要:
- 定义构造方法 + 属性
- 覆写
toString、 操作符==、hashCode - 实现一个
copyWith方法用来克隆对象 - 处理序列化/反序列化
在这之上,Dart 也缺失了如 Union 类型和模式匹配之类的特性。
要实现所有这些需要几百行代码,这很容易导致错误并明显地影响 Model 的可读性。
Freezed 尝试通过实现这些的大部分来解决问题,使你可以专注于 Model 的定义。
| 使用前 | 使用后 |
|---|---|
如何使用
安装
要使用 Freezed ,你需要安装典型的 build_runner/代码生成器。
首先,通过在 pubspec.yaml 添加依赖安装 build_runner 和 Freezed :
对于 Flutter 工程:
flutter pub add freezed_annotation
flutter pub add --dev build_runner
flutter pub add --dev freezed
# if using freezed to generate fromJson/toJson, also add:
flutter pub add json_annotation
flutter pub add --dev json_serializable
对于 Dart 工程:
dart pub add freezed_annotation
dart pub add --dev build_runner
dart pub add --dev freezed
# if using freezed to generate fromJson/toJson, also add:
dart pub add json_annotation
dart pub add --dev json_serializable
这会安装 3 个包:
- build_runner,运行代码生成器的工具
- freezed,代码生成器
- freezed_annotation,包含用于freezed的注解的包。
禁用无效注解目标的警告和生成文件中的警告
如果你打算和 json_serializable 一起使用 Freezed,json_serializable 和 meta 的最近版本可能需要你禁掉 invalid_annotation_target 警告。
要做到这点,需要把下面的内容添加到工程根目录下的 analysis_options.yaml 文件中:
analyzer:
errors:
invalid_annotation_target: ignore
运行生成器
要运行生成器,执行下面的命令:
dart run build_runner build
对于 Flutter 工程,也可以运行:
flutter pub run build_runner build
注意,和大多数代码生成器一样,Freezed 需要在文件的最上面导入注解 (freezed_annotation) 和使用 part 关键字。
这样的话,一个要使用 Freezed 的文件的开头会如下:
import 'package:freezed_annotation/freezed_annotation.dart';
part 'my_file.freezed.dart';
考虑 也要导入 package:flutter/foundation.dart。
原因是,导入 foundation.dart 也会导入生成在 Flutter 的 devtool 中更有可读性的对象的类。
如果导入了 foundation.dart ,Freezed 会自动去做。