与Dynamic class method invocation in PHP处的问题一样,我想在Dart中执行此操作。
var = "name";
page.${var} = value;
page.save();
这可能吗?
答案 0 :(得分:10)
使用Mirrors可以实现一些目标。
以下是如何设置类的值以及如何动态调用方法的示例:
import 'dart:mirrors';
class Page {
var name;
method() {
print('called!');
}
}
void main() {
var page = new Page();
var im = reflect(page);
// Set values.
im.setField("name", "some value").then((temp) => print(page.name));
// Call methods.
im.invoke("method", []);
}
如果您想知道,im
是InstanceMirror
,它基本上反映了page
个实例。
还有另一个问题:Is there a way to dynamically call a method or set an instance variable in a class in Dart?
答案 1 :(得分:6)
您可以使用Dart Mirror API来执行此类操作。镜像API现在还没有完全实现,但是它的工作原理如下:
import 'dart:mirrors';
class Page {
String name;
}
main() {
final page = new Page();
var value = "value";
InstanceMirror im = reflect(page);
im.setField("name", value).then((_){
print(page.name); // display "value"
});
}
答案 2 :(得分:0)
您可以使用Serializable
例如:
import 'package:serializable/serializable.dart';
@serializable
class Page extends _$PageSerializable {
String name;
}
main() {
final page = new Page();
var attribute = "name";
var value = "value";
page["name"] = value;
page[attribute] = value;
print("page.name: ${page['name']}");
}