Flutter 用の build_runner パッケージを作成しています。Flutter の一般的なパターンは、カスタム ウィジェットが他のカスタム ウィジェットで構成されるコンポーザビリティです。例えば、
@MyAnnotation()
class Foo extends StatelessWidget {
@override
Widget build() {
:
_Bar(),
:
}
}
@MyAnnotation()
class _Bar extends StatelessWidget {
:
}
集約したいクラスの上 (例: 上) にアノテーションを配置することで、2 つ以上のクラスの機能を使用する build_runner で単一のクラスをコード生成したいと考えています@MyAnnotation
。
私の現在のジェネレーターは次のようになります。
class SubclassGenerator extends GeneratorForAnnotation<Findable> {
@override
Future<String> generateForAnnotatedElement(
_element.Element element,
ConstantReader annotation,
BuildStep buildStep,
) {
:
}
}
ジェネレーターは注釈ごとに呼び出されるため、集約クラスを返す最後のものを除く''
すべてのFuture<String>
s に対して返されますが、それが最後の注釈であることをどのように知ることができますか? たとえば、build_runner がファイルの処理をいつ終了したかを判断するメカニズムはありますか? もしそうなら、解析が完了するまで待って、すべてのFuture<String>
s を完了することができます。それは可能ですか?