我创建了此类
class Opacity {
String a,b,c;
Opacity({this.a, this.b,this.c});
}
我试图仅使用字符串和参数的哈希图来动态创建此类的实例。
String type = "Opacity";
List<String> args = {'a': 'a', 'b': 'b','c': 'c'}
我有一个约束,我不能修改Opacity
类。
在创建实例时,我曾考虑过使用反射从字符串动态创建类,但是我不知道如何动态传递参数。
答案 0 :(得分:1)
从字符串到源名称,再到由该源名称表示的内容,都是反射。仅通过dart:mirrors
库,或者如果您提前生成代码(可能使用package:reflectable
),就可以使用它。
在这一点上,Dart与JavaScript等语言有所不同,在JavaScript中,您可以在运行时检查所有值。
没有反思,调用构造函数的唯一方法是在代码中是否有实际的代码执行该调用。这意味着您必须至少在代码中的某个位置拥有类似Opacity(a: ..., b: ..., c: ...)
的代码。
您可以定义以下函数:
Opacity createOpacity(Map<String, String> args) =>
Opacity(a: args["a"], b: args["b"], c: args["c"]);
那么您可以按名称注册为:
Map<String, Function> factories = {"Opacity": createOpacity};
最后将其用作:
var type = "Opacity";
var args = {'a': 'a', 'b': 'b', 'c': 'c'};
Opacity myOpacity = factories[type](args);
答案 1 :(得分:1)
要动态地将参数传递给构造函数,可以使用newInstance
的{{1}}方法。
例如
ClassMirror