如何在Dart中获取顶级函数的元数据

时间:2019-03-02 15:57:22

标签: dart annotations metadata

import 'dart:mirrors';
const Tag = 'tag';
@Tag
void func() => print("hello");
class A {
  @Tag
  void func() => print("hello");
}
main() {
  // top-level func
  print(reflect(func).type.metadata);
  //method
  print(reflectClass(A).declarations[Symbol('func')].metadata.first.reflectee);
}
// output
//[]
//tag

顶级功能的元数据为空。 但是Class中的方法可以访问其元数据。 有什么方法可以获取顶级函数的元数据?

3 个答案:

答案 0 :(得分:0)

import 'dart:mirrors';

const Tag = 'tag';
@Tag
void func() => print("hello");

class A {
  @Tag
  void func() => print("hello");
}

main() {
  var mirrors = currentMirrorSystem();
  // top-level func
  var f = mirrors.isolate.rootLibrary.declarations[#func];
  print(f.metadata.first.reflectee);
  //method
  print(reflectClass(A).declarations[Symbol('func')].metadata.first.reflectee);
  // Closure on `func` has no metadate
  print(reflect(func).type.metadata);  
}

结果

tag
tag
[]

答案 1 :(得分:0)

我刚刚找到了一种访问顶级功能元数据的新方法。

import 'dart:mirrors';
const Tag = 'tag';

@Tag
void func() => print("hello");

main() {
  ClosureMirror closureMirror = reflect(func);
  print(closureMirror.function.metadata.first.reflectee);
}

答案 2 :(得分:0)

dart:mirrors当然在Flutter中不起作用。