#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
.