Dart 如何检索带有元数据标记的函数

Dart 如何检索带有元数据标记的函数,dart,dart-mirrors,Dart,Dart Mirrors,请看下面的代码片段 导入“省道:镜像”; 类元{ 最终字符串数据; 常量元(this.data); } @元(“标记”) doSomething()=>打印(“你必须做点什么”); void main(){ doSomething(); } 如何检索具有元数据标记的函数?在我的示例中,我想找出哪个方法用meta标记。您可以这样做: void main(){ doSomething(); getMetaData(); } void getMetaData(){ LibraryMirror cur

请看下面的代码片段

导入“省道:镜像”;
类元{
最终字符串数据;
常量元(this.data);
}
@元(“标记”)
doSomething()=>打印(“你必须做点什么”);
void main(){
doSomething();
}

如何检索具有元数据标记的函数?在我的示例中,我想找出哪个方法用meta标记。

您可以这样做:

void main(){
doSomething();
getMetaData();
}
void getMetaData(){
LibraryMirror currentLib=currentMirrorSystem().libraries.values.last;
currentLib.declarations.forEach((符号s,DeclarationMirror){
如果(mirror.metadata.length>0){
打印($s符号有元数据:“${mirror.MetaData.first.reflectee.data}”);
}
});
}
这应该给你:

你必须做点什么
符号(“doSomething”)有元数据:“Tag”
您还可以分析来自另一个项目的文件,并在该文件上使用dart:mirrors,而不是检查当前库。可能
libraries.values.last
并不总是返回当前库-因此您可能需要更改它。在我的例子中,它起作用了。

var decls=currentMirrorSystem().isolate.rootLibrary.declarations;
打印(decls.keys.where((k)=>decls[k]是MethodMirror&&
decls[k].metadata.where((k)=>k.reflectee是meta.isNotEmpty));
另请参见

查看相关代码