如何在飞镖中全局显示枚举?

时间:2020-01-13 18:38:15

标签: flutter dart

enum Category{ restaurant, pizzera, fast_food, other }

class XXX ...

如何从其他类中静态访问XXX.Category?

非常感谢您的宝贵时间;-)

1 个答案:

答案 0 :(得分:2)

无法将文件,类,枚举或其他方式公开给全局Dart上下文,以使所有其他文件将自动访问。您可以将其创建为全局资源,然后将其显式导入需要它的其他文件中。

(myEnum.dart)

enum MyEnum {
  value1,
  value2,
  value3,
}

(main.dart)

import 'relative/path/to/file/myEnum.dart'; // Load the contents of myEnum.dart into this file's scope

void main() {
  var e = MyEnum.value1;
  // Do whatever else you want with MyEnum
}

重新阅读问题后,似乎您真正想要的是将枚举声明为静态类的成员,也就是说,您可以使用语法ClassName.EnumName.value来引用它。遗憾的是,Dart不支持嵌套类型。 (您不能在其他类中声明一个类或枚举。)

您可以使用一种变通方法,该方法将产生相同的语法结果,尽管我想记录在案,因为这是不推荐的,并且肯定会使事情变得比需要的复杂。

(foo.dart)

enum _MyEnum {
  value1,
  value2,
  value3,
  value4,
}

class _MyEnumContainer {
  _MyEnum get value1 => _MyEnum.value1;
  _MyEnum get value2 => _MyEnum.value2;
  _MyEnum get value3 => _MyEnum.value3;
  _MyEnum get value4 => _MyEnum.value4;
}

class Foo {
  static _myEnumContainerInstance = _MyEnumContainer();
  static _MyEnumContainer get MyEnum => _myEnumContainerInstance;
}

(main.dart)

import 'foo.dart';

void main() {
  var e = Foo.MyEnum.value1;
}

或者(也建议使用),您也可以只从第一个示例中导入带有标签的文件。当然,这纯粹是一种装饰性选择,将无法执行,但是从句法上讲,它可以达到您想要的目的。

import 'myEnum.dart' as Foo;

void main() {
  var e = Foo.MyEnum.value1;
}