我希望能够使用noSuchMethod()中的查找使用Map来支持动态属性.但是,最新更改会使传入的属性引用名称不可用.我可以理解缩小场景要求我们使用符号而不是字符串作为名称,但这使得实现可序列化的动态属性变得困难.任何人都有关于如何处理这个问题的好主意?
Ale*_*uin 10
您可以使用以下方式访问原始名称 MirrorSystem.getName(symbol)
所以动态类看起来像:
import 'dart:mirrors';
class A {
final _properties = new Map<String, Object>();
noSuchMethod(Invocation invocation) {
if (invocation.isAccessor) {
final realName = MirrorSystem.getName(invocation.memberName);
if (invocation.isSetter) {
// for setter realname looks like "prop=" so we remove the "="
final name = realName.substring(0, realName.length - 1);
_properties[name] = invocation.positionalArguments.first;
return;
} else {
return _properties[realName];
}
}
return super.noSuchMethod(invocation);
}
}
main() {
final a = new A();
a.i = 151;
print(a.i); // print 151
a.someMethod(); // throws
}
Run Code Online (Sandbox Code Playgroud)