Проверить элемент конструктора с помощью анализатора в dart

#flutter #dart

#flutter #dart

Вопрос:

Я создал библиотеку во Flutter для генерации кода для аннотированных элементов. Мне нужно проверить параметр в конструкторе класса, который требуется с помощью анализатора.

Пример виджета с аннотацией:

 @myAnnotation
class WidgetText extends StatelessWidget {
  WidgetText({
    @required this.text,
    this.subtitle,
  });

  final String text;
  final String subtitle;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text(text),
        if (subtitle != null) Text(subtitle),
      ],
    );
  }
}
  

Пример моего посетителя:

 class MyAnnotationVisitor extends SimpleElementVisitor<void> {
  @override
  void visitFieldElement(FieldElement element) {
    print('${element.name} is required? ${element.hasRequired}');
  }
}
  

Этот посетитель выше выводит это для WidgetText

 text is required? false
subtitle is required? false
  

Посетитель может проверить, является ли это поле обязательным, только если в поле будет отмечена аннотация, приведенная ниже. Но повторяется, и я хотел бы проверить в конструкторе.

 @myAnnotation
class WidgetText extends StatelessWidget {
  WidgetText({
    @required this.text,
    this.subtitle,
  });

  @required
  final String text;
  final String subtitle;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text(text),
        if (subtitle != null) Text(subtitle),
      ],
    );
  }
}
  

Ответ №1:

Это возможно при анализе ParameterElement . Вызывается get hasRequired .