我正在使用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
,则supportedLanguageCodes
的value
是null
,如果我对所有元素都调用toListValue
,则baseLangugeCode
的value
是null
。。。
我在这里错过了什么?为什么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;
}
}