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

How can I get the metadata of a top-level function in Dart

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 中的方法可以访问它的元数据。 有什么办法可以得到顶层函数的元数据吗?

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
[]

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

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

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

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

dart:mirrors 当然在 Flutter 中是行不通的。