Как я могу получить метаданные функции верхнего уровня в Dart - PullRequest
0 голосов
/ 02 марта 2019
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

Метаданные функции верхнего уровня пусты.Но метод в классе может получить доступ к его метаданным.Есть ли способ получить метаданные функции верхнего уровня?

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Я только что нашел новый способ доступа к метаданным функции верхнего уровня.

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

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

main() {
  ClosureMirror closureMirror = reflect(func);
  print(closureMirror.function.metadata.first.reflectee);
}
0 голосов
/ 11 марта 2019

dart:mirrors конечно не работает во флаттере.

0 голосов
/ 02 марта 2019
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
[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...