获取 public static field/property 的 class 的值通过它的名称作为 dart 中的字符串通过 reflectable

Getting value of public static field/property of a class by it's name as string in dart via reflectable

假设我有一个 class:

class Icons {
       static const IconData threesixty = IconData(0xe577, fontFamily: 'MaterialIcons');
 }

现在我有一个字符串变量,值为 "threesixty":

String fieldName = "threesixty";

如何通过 fieldName 变量获取 Icons class 中的 threesixty 的值?

我正在使用 reflectable 包,并且已经在 flutter 中使用了 ClassMirrors 的其他功能,但不知道该怎么做。

据我所知,除非使用镜像库,否则这是不可能的。

参见:

你想要的需要使用反射。由于 tree shaking,不支持 flutter 反射。 Tree shaking 是从您的应用程序包(apk、ipa)中删除未使用的代码以减小包大小的过程。当使用反射时,所有代码都可以隐式使用,因此 flutter 无法知道要删除哪些代码部分,因此他们选择不支持反射(dart 上下文中的镜像)。 如果可能,您应该尝试使用继承来解决您的问题,或者根据您的具体问题,您可以尝试使用静态代码生成。

编辑:您可以像这样调用带有反射的静态 getter;

import 'package:reflectable/reflectable.dart';

class Reflector extends Reflectable {
  const Reflector() : super(staticInvokeCapability);
}

const reflector = const Reflector();

@reflector
class ClassToReflect {
  static double staticPropertyToInvoke = 15;
}

Main.dart

import 'package:reflectable/reflectable.dart';
import 'main.reflectable.dart';

void main() {
  initializeReflectable();

  ClassMirror x = reflector.reflectType(ClassToReflect);
  var y = x.invokeGetter('staticPropertyToInvoke');
  debugPrint(y);
}

P.S。 main.reflectable.dart是反射包生成的文件。