首页 > 解决方案 > 如何检查值是否为枚举?

问题描述

我想检查 dart 中的值是否是枚举,如果是,则自动序列化它。

我的症结是如何测试一个值是否是一个枚举。

这就是我测试其他类型的方式

if (T == int)
  val = prefs.getInt(this._key);
else if (T == double)
  val = prefs.getDouble(this._key);
else if (T == bool)
  val = prefs.getBool(this._key);
else if (T == String)
  val = prefs.getString(this._key);
else if ([""] is T)
  val = prefs.getStringList(this._key);

但我似乎无法Tenum

由于所有枚举都有相同的方法,我希望能够感知它们并相应地处理它们

标签: dart

解决方案


如果需要检查是dynamic值枚举类型。您可以使用下一种方法。主要思想与@Oniya Daniel 的回答非常相似。

 enum Fruit {
   banana,
   apple,
   orange,
 }

下一个检查isEnum条件的方法

 bool isEnum(dynamic data) {
   final split = data.toString().split('.');
   return split.length > 1 && split[0] == data.runtimeType.toString();
 }

测试结果如下

  test('check enum runtime', () {
    expect(isEnum(Fruit.banana), true);
    expect(isEnum(null), false);
    expect(isEnum(''), false);
    expect(isEnum('banana'), false);
  });

PS:describeEnum(<enum_value>)package:flutter/foundation.dart


推荐阅读