Flutter枚举管理插件good_enums的使用

Flutter枚举管理插件good_enums的使用

good_enums 是一个用于简化枚举使用的代码生成器。它通过注解库来生成额外的方法,从而使得枚举更加易于管理和使用。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  good_enums_annotations:

dev_dependencies:
  build_runner:
  good_enums:

然后运行 flutter pub get 来安装这些依赖项。

示例

首先,你需要导入 good_enums_annotations 并创建一个带有注解的枚举类。接着,使用 build_runner 生成必要的代码扩展。

1. 创建枚举类

import 'package:good_enums_annotations/good_enums_annotations.dart';
part 'environment.g.dart';  // 这个文件将由代码生成器自动生成

// 使用 [@goodEnum](/user/goodEnum) 注解来标记这个枚举类
[@goodEnum](/user/goodEnum)
enum Environment {
  dev,
  prod,
  stage;
}

2. 生成代码

运行以下命令来生成代码扩展:

flutter pub run build_runner build

这将在 environment.g.dart 中生成一些扩展方法。

生成的方法

对于每个枚举字段,都会生成以下方法:

  • isField 方法(例如 isDev),用于检查当前枚举值是否等于特定的枚举字段。
  • ifIs 方法,根据当前枚举值执行不同的回调函数。
  • maybeIfIs 方法,具有可选的回调函数和默认情况。

isField 方法

if (environment.isDev()) {
  // do something
  return;
}
// else

如果设置了 valueCheckAsGettertrue,你可以直接使用属性访问的方式:

if (environment.isDev) {
  // do something
  return;
}
// else

ifIs 方法

return environment.ifIs(
  dev: () => Text("IsDev"),
  prod: () => Text("IsProd"),
  stage: () => Text("IsStage"),
);

maybeIfIs 方法

return environment.maybeIfIs(
  dev: () => Text("IsDev"),
  orElse: () => Text("IsElse"),
);

生成的代码

extension GoodEnvironment on Environment {
  bool isDev() {
    return this == Environment.dev;
  }

  bool isProd() {
    return this == Environment.prod;
  }

  bool isStage() {
    return this == Environment.stage;
  }

  TResult ifIs<TResult>({
    required TResult Function() dev,
    required TResult Function() prod,
    required TResult Function() stage,
  }) {
    switch (this) {
      case Environment.dev:
        return dev();
      case Environment.prod:
        return prod();
      case Environment.stage:
        return stage();
    }
  }

  TResult maybeIfIs<TResult>({
    TResult Function()? dev,
    TResult Function()? prod,
    TResult Function()? stage,
    required TResult Function() orElse,
  }) {
    switch (this) {
      case Environment.dev:
        if (dev != null) return dev();
        break;
      case Environment.prod:
        if (prod != null) return prod();
        break;
      case Environment.stage:
        if (stage != null) return stage();
        break;
    }
    return orElse();
  }
}

配置

你可以通过传递参数来自定义 @GoodEnum 的行为:

@GoodEnum(
  // 禁用/启用 isIs 方法,默认为 true
  enableIf: true,
  // 禁用/启用 maybeIfIs 方法,默认为 true
  enableMaybeIf: true,
  // 自定义前缀方法,默认为 `is`
  prefix: 'is',
  // 设置 valueCheckAsGetter 为 false
  valueCheckAsGetter: false,
)

完整示例

下面是一个完整的示例代码,展示了如何使用 good_enums 插件:

import 'package:flutter/material.dart';
import 'package:good_enums_annotations/good_enums_annotations.dart';
part 'environment.g.dart';

// 使用 [@goodEnum](/user/goodEnum) 注解来标记这个枚举类
[@goodEnum](/user/goodEnum)
enum Environment {
  dev,
  prod,
  stage;
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Good Enums Example')),
        body: Center(
          child: Text(
            Environment.dev.maybeIfIs(
              dev: () => "IsDev",
              orElse: () => "IsElse",
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter枚举管理插件good_enums的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


good_enums 是一个用于 Flutter 的枚举管理插件,它可以帮助开发者更高效地管理和使用枚举类型。通过 good_enums,你可以为枚举类型生成一些有用的扩展方法,例如将枚举值转换为字符串、从字符串解析枚举值等。

安装 good_enums

首先,你需要在 pubspec.yaml 文件中添加 good_enums 依赖:

dependencies:
  flutter:
    sdk: flutter
  good_enums: ^1.0.0

然后运行 flutter pub get 来安装依赖。

使用 good_enums

  1. 定义枚举类型

    假设你有一个枚举类型 Status

    enum Status {
      pending,
      approved,
      rejected,
    }
    
  2. 生成扩展方法

    使用 good_enums 注解来生成扩展方法:

    import 'package:good_enums/good_enums.dart';
    
    [@GoodEnum](/user/GoodEnum)()
    enum Status {
      pending,
      approved,
      rejected,
    }
    
  3. 使用生成的扩展方法

    在代码中,你可以使用生成的扩展方法来操作枚举类型。例如:

    void main() {
      // 将枚举值转换为字符串
      String statusString = Status.pending.toStringValue();
      print(statusString); // 输出: "pending"
    
      // 从字符串解析枚举值
      Status status = Status.fromString('approved');
      print(status); // 输出: Status.approved
    
      // 获取所有枚举值的列表
      List<Status> allStatuses = Status.values;
      print(allStatuses); // 输出: [Status.pending, Status.approved, Status.rejected]
    }
    

高级用法

good_enums 还支持一些高级功能,例如自定义枚举值的字符串表示、生成 toJsonfromJson 方法等。

  1. 自定义枚举值的字符串表示

    你可以使用 @GoodEnumValue 注解来为枚举值指定自定义的字符串表示:

    [@GoodEnum](/user/GoodEnum)()
    enum Status {
      @GoodEnumValue('PENDING')
      pending,
      @GoodEnumValue('APPROVED')
      approved,
      @GoodEnumValue('REJECTED')
      rejected,
    }
    
    void main() {
      String statusString = Status.pending.toStringValue();
      print(statusString); // 输出: "PENDING"
    }
    
  2. 生成 toJsonfromJson 方法

    你可以使用 [@GoodEnum](/user/GoodEnum) 注解的 json 参数来生成 toJsonfromJson 方法:

    [@GoodEnum](/user/GoodEnum)(json: true)
    enum Status {
      pending,
      approved,
      rejected,
    }
    
    void main() {
      // 将枚举值转换为 JSON
      String json = Status.approved.toJson();
      print(json); // 输出: "approved"
    
      // 从 JSON 解析枚举值
      Status status = Status.fromJson('rejected');
      print(status); // 输出: Status.rejected
    }
回到顶部