[译]Flutter Favorite 之超给力的辅助代码生成器 freezed - 安装运行

1,943 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情


freezed | Dart Package (flutter-io.cn)

译时版本:2.2.0


欢迎使用 Freezed ,另外一个用于 数据类/Union/模式匹配/克隆 的代码生成器。

动机

Dart 很棒,但是定义一个 “Model” 很冗长。我们需要:

  • 定义构造方法 + 属性
  • 覆写 toString、 操作符 ==、 hashCode
  • 实现一个 copyWith 方法用来克隆对象
  • 处理序列化/反序列化

在这之上,Dart 也缺失了如 Union 类型和模式匹配之类的特性。

要实现所有这些需要几百行代码,这很容易导致错误并明显地影响 Model 的可读性。

Freezed 尝试通过实现这些的大部分来解决问题,使你可以专注于 Model 的定义。

使用前使用后
image.pngimage.png

如何使用

安装

要使用 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 个包:

禁用无效注解目标的警告和生成文件中的警告

如果你打算和 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.dartFreezed 会自动去做。