decodeNumberFormat static method
Decodes an HWNumberFormat, or null when obj is absent.
A string field the analyzer cannot evaluate decodes as empty so the validator reports it rather than the format silently changing.
Implementation
static HWNumberFormat? decodeNumberFormat(
DartObject? obj, {
String? defaultLocale,
String? resourcePrefix,
}) {
if (obj == null || obj.isNull) return null;
final typeName = obj.type?.element?.name;
switch (typeName) {
case 'HWDecimalNumberFormat':
return HWNumberFormat.decimal(
minimumFractionDigits:
getField(obj, 'minimumFractionDigits')?.toIntValue(),
maximumFractionDigits:
getField(obj, 'maximumFractionDigits')?.toIntValue(),
useGrouping: getField(obj, 'useGrouping')?.toBoolValue() ?? true,
);
case 'HWPercentNumberFormat':
return HWNumberFormat.percent(
minimumFractionDigits:
getField(obj, 'minimumFractionDigits')?.toIntValue(),
maximumFractionDigits:
getField(obj, 'maximumFractionDigits')?.toIntValue(),
);
case 'HWCurrencyNumberFormat':
final currency = decodeCurrency(
getField(obj, 'currency'),
defaultLocale: defaultLocale,
resourcePrefix: resourcePrefix,
);
if (currency == null) {
// coverage:ignore-start
throw GeneratorError('HWNumberFormat.currency has no currency');
// coverage:ignore-end
}
return HWNumberFormat.currency(
currency: currency,
decimalDigits: getField(obj, 'decimalDigits')?.toIntValue(),
);
case 'HWCompactNumberFormat':
return const HWNumberFormat.compact();
case 'HWPatternNumberFormat':
return HWNumberFormat.pattern(
getField(obj, 'pattern')?.toStringValue() ?? '',
);
}
throw GeneratorError('Unknown number format type: $typeName');
}