[译]Flutter Favorite 之超给力的辅助代码生成器 freezed - 配置 & 实用工具

859 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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);
    

捐献者

参考原文。