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的其他功能,但不知道如何做到这一点.
你想要什么需要使用反射.由于树木摇晃,不支持颤振反射.树抖动是从您的应用程序包(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包生成的文件.