ElementVisitor Annotation FieldElement到值null的检查不起作用



我正在使用Code Generation,并试图从AnnotaedClass中获取一些values

我可以用visitFieldElement得到elements,但我不能将它们转换为它们的实际值。。。

这是Class,我想在其中获得fields及其实际Type

@generateTranslation
class LocaleConfiguration {
static const String baseLanguageCode = 'de';
static const List<String> supportedLanguageCodes = [
'de',
'en',
'es',
];
}

这是我的visitFieldElement:

Map<dynamic, dynamic> fields = <dynamic, dynamic>{};
@override
dynamic visitFieldElement(FieldElement element) {
final type = element.type.toString().replaceAll('*', '');
final valueRaw = element.computeConstantValue();
if (valueRaw.toStringValue() != null) {
fields[type] = valueRaw.toStringValue();
}
if (valueRaw.toListValue() != null) {
fields[type] = valueRaw.toListValue();
}
fields[type] = valueRaw;
}

问题

!= null检查实际上从来不是true

如果我简单地对所有元素调用toStringValue,则supportedLanguageCodesvaluenull,如果我对所有元素都调用toListValue,则baseLangugeCodevaluenull。。。

我在这里错过了什么?为什么null checks工作不正常?

如果你需要更多信息,请告诉我!

我猜

@override
dynamic visitFieldElement(FieldElement element) {
final type = element.type.toString().replaceAll('*', '');
final valueRaw = element.computeConstantValue();
if (valueRaw.toStringValue() != null) {
fields[type] = valueRaw.toStringValue();
}
if (valueRaw.toListValue() != null) {
fields[type] = valueRaw.toListValue();
}
fields[type] = valueRaw;
}

应该是

@override
dynamic visitFieldElement(FieldElement element) {
final type = element.type.toString().replaceAll('*', '');
final valueRaw = element.computeConstantValue();
if (valueRaw.toStringValue() != null) {
fields[type] = valueRaw.toStringValue();
} else if (valueRaw.toListValue() != null) {
fields[type] = valueRaw.toListValue();
} else {
fields[type] = valueRaw;
}
}

相关内容

  • 没有找到相关文章

最新更新