持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
freezed | Dart Package (flutter-io.cn)
译时版本:2.2.0
配置
Freezed 提供了大量选项用来定制生成的代码。
例如,如果想要禁止生成 when 方法。
要做到这一点,有可个可能的途径:
改变指定 Model 的行为
如果仅仅想为某个指定的类定制生成的代码,可以用不同的注解做到:
@Freezed()
class Person with _$Person {
factory Person(String name, int age) = _Person;
}
这样做的话,现在可以传递各种参数给 @Freezed 来改变输出:
@Freezed(
// 禁止生成 copyWith/==
copyWith: false,
equal: false,
)
class Person with _$Person {...}
要查看所有可用的设置,请参考@Freezed 的文档:pub.flutter-io.cn/documentati…
改变整个工程的行为
你也可能想要同时对所有的 Freezed Model 应用这些设置,而不是只针对单个类应用改变。
要这样做,可以通过定制名为 build.yaml 的文件。
该文件是一个可选的配置文件,应该和 pubspec.yaml 在同一层目录:
my_project_folder/
pubspec.yaml
build.yaml
lib/
在这里,可以如下配置,修改和 @Freezed(上面)的选项相同的选项:
targets:
$default:
builders:
freezed:
options:
# 禁止整个工程的类的 copyWith/== 的生成
copy_with: false
equal: false
实用工具
用于 VSCode 的 Freezed 插件
Freezed 插件可帮助你更快地使用 freezed 。例如:
- 使用
Ctrl+Shift+B(在 Mac 上是Cmd+Shift+B) 可快速使用build_runner编译。 - 使用
Ctrl+Shift+P>Generate Freezed class可快速生成一个 Freezed 类。
用于 IntelliJ/Android Studio 的 Freezed 插件
可以在这里获得样板代码的模板。
示例:
-
输入 freezedClass 然后按
Tab生成一个 Freezed 类@freezed class Demo with _$Demo { } -
输入 freezedFromJson 然后按
Tab为 json_serializable 生成 fromJson 方法。factory Demo.fromJson(Map<String, dynamic> json) => _$DemoFromJson(json);
捐献者
参考原文。