Flutter枚举生成插件easy_enum_generator的使用

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

Flutter枚举生成插件easy_enum_generator的使用

提供了用于为带有 easy_enum 注解的类生成 EasyEnum 扩展的 Dart 构建系统构建器。

使用

在你的 pubspec.yaml 文件中:

dependencies 部分添加 easy_enum: ^1.0.0

dependencies:
  ...
  easy_enum: ^1.0.0

dev_dependencies 部分添加 easy_enum_generator: ^2.0.1build_runner: ^2.1.4

dev_dependencies:
  ...
  build_runner: ^2.1.4
  easy_enum_generator: ^2.0.1

设置 environment 至少为 Dart 2.13.0 版本:

environment:
  sdk: ">=2.13.0 <3.0.0"

你的 pubspec.yaml 文件应该看起来像这样:

name: project_name
description: project description
version: 1.0.0

environment:
  sdk: ">=2.13.0 <3.0.0"

dependencies:
  ...
  easy_enum: ^1.0.0

dev_dependencies:
  ...
  build_runner: ^2.1.4
  easy_enum_generator: ^2.0.1

注解你的类

在你的类上添加 EasyEnum 注解,并指定生成的文件路径:

import 'package:easy_enum/easy_enum.dart';

part 'basic_class.g.dart';

@EasyEnum()
enum SimpleState { play, paused, stopped }

@EasyEnum(toValue: 'theValue', toEnum: 'theRating')
enum SomeRating { none, dislike, like }

class BasicClass {
  ...
}

确保你设置了部分文件,如示例所示:part 'your_file_name.g.dart';

运行代码生成

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

flutter pub run build_runner build

生成的扩展

生成的代码如下:

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'basic_class.dart';

// **************************************************************************
// EasyEnumGenerator
// **************************************************************************

extension SimpleStateExt on SimpleState {
  String get value => ['play', 'paused', 'stopped'][index];
}

extension SimpleStateTxe on String {
  SimpleState? get simpleState => {
        'play': SimpleState.play,
        'paused': SimpleState.paused,
        'stopped': SimpleState.stopped,
      }[this];
}

extension SomeRatingExt on SomeRating {
  String get theValue => ['none', 'dislike', 'like'][index];
}

extension SomeRatingTxe on String {
  SomeRating? get theRating => {
        'none': SomeRating.none,
        'dislike': SomeRating.dislike,
        'like': SomeRating.like,
      }[this];
}

现在,之前可能看起来像这样的代码:

String getStringFromSimpleState(SimpleSate simple) {
  switch (simple) {
    case SimpleSate.play: return 'play';
    case SimpleSate.paused: return 'paused';
    case SimpleSate.stopped: return 'stopped';
  }
}
...
var someVar = getStringFromSimpleState(SimpleSate.paused);

print('$someVar');
...

可以简化为:

...
print(SimpleSate.paused.value);
...

此外,你可以将字符串转换为其关联的枚举:

String someVal = getStatusFromApi();  //返回字符串 'paused'

if ( someVal.simpleState == SimpleState.paused ) {
  ...
}

额外功能

替换获取器名称

默认情况下,你可以通过 value 获取器获取枚举的字符串表示形式,并通过枚举的小驼峰命名法(例如 “myString.simpleState”)获取字符串的枚举表示形式。

如果你想要更改获取器名称以检索相关的枚举值,可以在注解中添加参数,如下所示:

@EasyEnum(toValue: 'theValue', toEnum: 'theState')
enum SimpleState { play, paused, stopped }

现在,获取器方法已更改,允许通过以下方式检索:

print(SimpleSate.paused.theValue);

print('paused'.theState == SimpleState.paused);

完整示例

下面是完整的示例代码,演示了如何使用 easy_enum_generator 插件。

import 'lib/example_usage.dart';

void main(List<String> arguments) {
  print('test:');

  var test = Test('name', SimpleState.paused, SomeRating.none);

  print('paused'.simpleState == test.state); // true

  print(SimpleState.paused.value); // paused

  print('none'.theRating == test.rating); // true

  print(SomeRating.none.theValue); // none
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用easy_enum_generator插件来自动生成枚举类的辅助代码的一个示例。这个插件可以帮助你生成枚举的JSON序列化和反序列化代码,以及其他可能的实用功能。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  build_runner: ^2.1.4
  easy_enum_generator: ^x.y.z  # 请替换为最新版本号

步骤 2: 创建枚举类

接下来,创建一个枚举类。例如,我们创建一个表示星期几的枚举类:

// lib/enums/weekday.dart
part 'weekday.g.dart';  // 引入生成的代码文件

@EnumClass()
enum Weekday {
  monday,
  tuesday,
  wednesday,
  thursday,
  friday,
  saturday,
  sunday,
}

注意,part 'weekday.g.dart'; 这行代码是用来引入easy_enum_generator生成的代码文件的。

步骤 3: 生成代码

在项目的根目录下运行以下命令来生成枚举的辅助代码:

flutter pub run build_runner build

这个命令会读取你的枚举类并生成对应的.g.dart文件。在这个例子中,它会生成weekday.g.dart

步骤 4: 使用生成的代码

生成的代码文件会包含枚举的JSON序列化和反序列化方法,以及其他可能的方法。例如,你可以这样使用:

import 'package:flutter/material.dart';
import 'enums/weekday.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Enum Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Serialized Weekday: ${_serializeWeekday(Weekday.monday)}'),
              Text('Deserialized Weekday: ${_deserializeWeekday("monday")}'),
            ],
          ),
        ),
      ),
    );
  }

  // 序列化枚举值到字符串
  String _serializeWeekday(Weekday weekday) {
    return weekday.toJson();
  }

  // 从字符串反序列化到枚举值
  Weekday _deserializeWeekday(String value) {
    return Weekday.fromJson(value);
  }
}

在这个例子中,weekday.g.dart文件会包含toJson()fromJson()方法,这些方法允许你将枚举值序列化为JSON字符串,并从JSON字符串反序列化为枚举值。

总结

通过easy_enum_generator插件,你可以轻松地为你的枚举类生成实用的辅助代码,例如JSON序列化和反序列化方法。这不仅减少了手动编写重复代码的工作量,还提高了代码的一致性和可维护性。

请确保在实际项目中替换为最新的插件版本号,并根据需要进行调整。

回到顶部