Flutter枚举生成插件easy_enum_generator的使用
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.1
和 build_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
更多关于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序列化和反序列化方法。这不仅减少了手动编写重复代码的工作量,还提高了代码的一致性和可维护性。
请确保在实际项目中替换为最新的插件版本号,并根据需要进行调整。