获取类的公共静态字段/属性的值,它的名称为dart中的字符串,通过reflectable

Sae*_*aei 2 reflection dart dart-mirrors flutter

说我有一节课:

class Icons {
       static const IconData threesixty = IconData(0xe577, fontFamily: 'MaterialIcons');
 }
Run Code Online (Sandbox Code Playgroud)

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

String fieldName = "threesixty";
Run Code Online (Sandbox Code Playgroud)

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

我正在使用可反射的包,已经使用了ClassMirrors的其他功能,但不知道如何做到这一点.

Mer*_*tus 8

你想要什么需要使用反射.由于树木摇晃,不支持颤振反射.树抖动是从您的应用程序包(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;
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

PS main.reflectable.dart是由reflectable包生成的文件.