使用镜像可以实现多种功能。
以下是一个示例,演示如何动态设置类的值和调用方法:
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
实例。
还有另一个问题:在 Dart 中是否有一种动态调用类中方法或设置实例变量的方式?
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"
});
}
Futures.wait()
没有什么意义。您可以省略它,结果是相同的。Futures.wait()
返回一个Future
,当给定的操作完成时,该Future
也会完成,因此,您真的必须编写.then()
才能使其正常工作。当然,现在它运行是侥幸的,因为这些操作恰好是非异步的 :) - Kai Sellgrenimport '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']}");
}