Flutter枚举字符串扩展插件enum_string_extension_gen的使用

Flutter枚举字符串扩展插件enum_string_extension_gen的使用

概述

enum_string_extension_gen 是一个基于 source_gen 的生成器插件,用于为 Flutter 中的枚举类型生成字符串扩展方法。通过该插件,您可以轻松地将枚举值与本地化字符串或其他自定义字符串关联起来。

使用步骤

  1. 添加依赖pubspec.yaml 文件中添加以下依赖:

    dependencies:
      enum_string_extension: ^<版本号>
    
    dev_dependencies:
      build_runner: ^2.0.0
      enum_string_extension_gen: ^<版本号>
    
  2. 创建枚举类 创建一个枚举类,并使用 [@enumString](/user/enumString) 注解标记。

    import 'package:enum_string_extension/enum_string_extension.dart';
    
    enum MyEnum {
      value1,
      value2,
      value3,
    }
    
    [@enumString](/user/enumString)
    enum BasicClass {
      optionA,
      optionB,
      optionC,
    }
    
  3. 生成扩展方法 运行以下命令以生成扩展方法:

    flutter pub run build_runner build
    

    生成的扩展方法会自动添加到对应的枚举类中。

  4. 使用扩展方法 现在可以使用生成的扩展方法来获取枚举值的字符串表示。

    void main() {
      print(MyEnum.value1.text); // 输出: "value1"
      print(BasicClass.optionA.text); // 输出: "optionA"
    }
    

完整示例

以下是一个完整的示例,展示了如何使用 enum_string_extension_gen 插件。

示例代码
import 'package:enum_string_extension/enum_string_extension.dart';

// 定义枚举类
enum Color {
  red,
  green,
  blue,
}

[@enumString](/user/enumString)
enum Status {
  success,
  failure,
  pending,
}

void main() {
  // 使用生成的扩展方法
  print(Color.red.text); // 输出: "red"
  print(Status.success.text); // 输出: "success"
}
生成的扩展方法

运行 flutter pub run build_runner build 后,生成的扩展方法如下:

extension ColorExtension on Color {
  String get text => toString().split('.').last;
}

extension StatusExtension on Status {
  String get text => toString().split('.').last;
}

高级用法

命名空间和前缀

您可以为枚举值生成带命名空间或前缀的扩展方法。

[@enumString](/user/enumString)
enum NamespaceExample {
  optionA,
  optionB,
}

[@enumString](/user/enumString)
@EnumKey(namespace: 'myNamespace')
enum NamespacedEnum {
  option1,
  option2,
}

[@enumString](/user/enumString)
@EnumKey(prefix: 'prefix_')
enum PrefixedEnum {
  optionX,
  optionY,
}

生成的扩展方法如下:

extension NamespaceExampleExtension on NamespaceExample {
  String get text => toString().split('.').last;
}

extension NamespacedEnumExtension on NamespacedEnum {
  String get myNamespaceText => toString().split('.').last;
}

extension PrefixedEnumExtension on PrefixedEnum {
  String get prefix_text => toString().split('.').last;
}

更多关于Flutter枚举字符串扩展插件enum_string_extension_gen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter枚举字符串扩展插件enum_string_extension_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


enum_string_extension_gen 是一个用于 Flutter 的代码生成插件,它可以帮助你自动生成枚举类型的字符串扩展方法。通过这个插件,你可以轻松地将枚举值转换为字符串,或者从字符串转换为枚举值,而不需要手动编写这些繁琐的代码。

安装步骤

  1. 添加依赖
    pubspec.yaml 文件中添加 enum_string_extension_genbuild_runner 作为开发依赖:

    dev_dependencies:
      build_runner: ^2.1.0
      enum_string_extension_gen: ^1.0.0
    
  2. 导入包
    在你的 Dart 文件中导入 enum_string_extension_gen

    import 'package:enum_string_extension_gen/enum_string_extension_gen.dart';
    
  3. 定义枚举
    使用 [@EnumStringExtension](/user/EnumStringExtension) 注解来标记你想要生成字符串扩展方法的枚举:

    [@EnumStringExtension](/user/EnumStringExtension)
    enum Status {
      pending,
      approved,
      rejected,
    }
    
  4. 生成代码
    运行 build_runner 来生成扩展方法:

    flutter pub run build_runner build
    

    或者,如果你希望在代码变化时自动重新生成代码,可以使用 watch 命令:

    flutter pub run build_runner watch
    

使用生成的扩展方法

生成的代码将包含以下扩展方法:

  • toEnumString(): 将枚举值转换为字符串。
  • fromEnumString(String value): 将字符串转换为枚举值。

例如,假设你有一个 Status 枚举:

[@EnumStringExtension](/user/EnumStringExtension)
enum Status {
  pending,
  approved,
  rejected,
}

生成的扩展方法将允许你这样使用:

void main() {
  // 将枚举值转换为字符串
  String statusString = Status.pending.toEnumString(); // 输出: "pending"

  // 将字符串转换为枚举值
  Status status = Status.fromEnumString("approved"); // 输出: Status.approved

  print(statusString);
  print(status);
}

自定义字符串映射

默认情况下,枚举值会直接转换为小写的字符串。如果你想自定义枚举值与字符串的映射关系,可以在枚举定义中使用 @EnumValue 注解:

[@EnumStringExtension](/user/EnumStringExtension)
enum Status {
  @EnumValue("Pending")
  pending,
  @EnumValue("Approved")
  approved,
  @EnumValue("Rejected")
  rejected,
}

这样生成的扩展方法将使用你指定的字符串:

void main() {
  String statusString = Status.pending.toEnumString(); // 输出: "Pending"
  Status status = Status.fromEnumString("Approved"); // 输出: Status.approved

  print(statusString);
  print(status);
}
回到顶部