Flutter枚举类生成插件enum_generator的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter枚举类生成插件enum_generator的使用

生成功能型枚举

enum_generator 是一个轻量级的库,用于为枚举类类型创建功能,使枚举的使用更加便捷。它类似于 Freezed,但专为枚举设计。

安装

在项目中添加以下依赖项:

dependencies:
  enum_annotation: ^0.0.2

dev_dependencies:
  build_runner: any
  enum_generator: any

使用

生成代码

使用 build_runner 生成代码:

  • 仅 Dart 项目:

    dart pub run build_runner build
    # 或者
    dart pub run build_runner watch
    
  • Flutter 项目:

    flutter pub run build_runner build
    # 或者
    flutter pub run build_runner watch
    
示例代码

下面是一个完整的示例,展示了如何使用 enum_generator 生成功能型枚举类,并在 main.dart 中使用这些枚举。

import 'package:enum_annotation/enum_annotation.dart';

// 生成代码的部分文件声明
part 'main.g.dart';

// 使用 [@generate](/user/generate) 注解来生成枚举的功能
[@generate](/user/generate)
enum Shape {
  // 定义枚举值,并为每个枚举值关联额外的数据
  square(10, 'square'),
  circle(90, 'circle'),
  triangle(1, 'triangle'),
  hexagon(6, 'hexagon');

  // 枚举构造函数,接收额外的数据
  final int data;
  final String message;

  // 常量构造函数,确保枚举值是不可变的
  const Shape(this.data, this.message);
}

void main() {
  // 创建一个 Shape 枚举实例
  final shape = Shape.circle;

  // 使用 when 方法处理所有可能的枚举值
  final message = shape.when(
    square: () => 'I am a Square',
    circle: () => 'I am a Circle',
    triangle: () => 'I am a Triangle',
    hexagon: () => 'I am a hexagon'
  );
  print(message); // 输出: I am a Circle

  // 使用 maybeWhen 方法处理部分枚举值,并提供 orElse 回调
  final canBeRotated = shape.maybeWhen(
    hexagon: () => true,
    orElse: () => false,
  );
  print('Can be rotate: $canBeRotated'); // 输出: false

  // 检查枚举值是否等于某个特定值
  print('The shape is circle: ${shape.isCircle}'); // 输出: true
  print('The shape is Square: ${shape.isSquare}'); // 输出: false
  print('The shape is Triangle: ${shape.isTriangle}'); // 输出: false
}

更多关于Flutter枚举类生成插件enum_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter枚举类生成插件enum_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是如何在Flutter项目中使用enum_generator插件来自动生成与枚举类相关的代码的具体示例。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加enum_generator的依赖。这个插件依赖于build_runner,因此也需要添加它。

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  build_runner: ^2.1.4
  enum_generator: ^2.0.0 # 请确保使用最新版本

步骤 2: 创建枚举类

在你的Flutter项目中创建一个枚举类。例如,在lib目录下创建一个enums.dart文件,并定义一个枚举。

// lib/enums.dart
enum Status {
  active,
  inactive,
  pending,
}

步骤 3: 配置build.yaml

在项目根目录下创建或编辑build.yaml文件,添加以下内容来配置enum_generator

targets:
  $default:
    builders:
      enum_generator:
        generate_for:
          - lib/enums.dart # 指定你的枚举类文件

步骤 4: 运行代码生成

打开终端并导航到你的Flutter项目根目录,运行以下命令来生成代码:

flutter pub run build_runner build

步骤 5: 使用生成的代码

enum_generator将生成一个与你的枚举类对应的帮助类文件,通常命名为enums.g.dart。这个文件将包含一些实用的方法,比如将枚举转换为字符串或从字符串转换为枚举等。

生成的代码可能类似于以下内容(注意,实际生成的代码可能会有所不同,具体取决于enum_generator的版本和配置):

// lib/enums.g.dart (这是自动生成的代码,不要手动编辑)
part of 'enums.dart';

extension StatusExtension on Status {
  String get value {
    switch (this) {
      case Status.active:
        return 'active';
      case Status.inactive:
        return 'inactive';
      case Status.pending:
        return 'pending';
    }
  }

  static Status fromValue(String value) {
    switch (value) {
      case 'active':
        return Status.active;
      case 'inactive':
        return Status.inactive;
      case 'pending':
        return Status.pending;
      default:
        throw ArgumentError('Unknown enum value $value');
    }
  }

  static List<Status> values() => [
        Status.active,
        Status.inactive,
        Status.pending,
      ];

  static List<String> valuesAsString() => [
        Status.active.value,
        Status.inactive.value,
        Status.pending.value,
      ];
}

步骤 6: 在项目中使用生成的扩展方法

现在你可以在你的Flutter项目中使用这些生成的扩展方法了。例如:

void main() {
  Status status = Status.active;
  print(status.value); // 输出: active

  String statusString = 'inactive';
  Status fromStringStatus = Status.fromValue(statusString);
  print(fromStringStatus); // 输出: Status.inactive

  List<String> allStatusValues = Status.valuesAsString();
  print(allStatusValues); // 输出: [active, inactive, pending]
}

这样,通过使用enum_generator插件,你可以自动化地生成一些与枚举类相关的实用方法,从而简化枚举值在应用程序中的使用。

回到顶部