extractValue static method
Implementation
static extractValue(String reference, Map dataMap, Type T) {
dynamic defaultValue = _getDefaultValue(reference, T);
dynamic value = dataMap[reference];
if (value is String) {
String valueCasted = value;
if (LocalStringUtils.isNullOrEmpty(valueCasted,
considerWhiteSpaceAsEmpty: true)) return defaultValue;
switch (T) {
case DateTime:
try {
return DateFormat(_dateFormat).parse(valueCasted, true);
} catch (err) {
return defaultValue;
}
case String:
return valueCasted;
case Color:
case int:
// Color hexadecimal representation
final RegExpMatch? match =
RegExp(r'^(0x|#)(\w{2})?(\w{6,6})$').firstMatch(valueCasted);
if (match != null) {
String hex = (match.group(2) ?? 'FF') + match.group(3)!;
final int colorValue = int.parse(hex, radix: 16);
return (T == Color) ? Color(colorValue) : colorValue;
} else if (T == int) {
int? parsedValue = int.tryParse(valueCasted.replaceFirstMapped(
RegExp(r'^(\d+)\.\d+$'), (match) => '${match.group(1)}'));
return parsedValue ?? defaultValue;
}
break;
case double:
double? parsedValue = double.tryParse(valueCasted);
return parsedValue ?? defaultValue;
case bool:
return valueCasted.toLowerCase() == 'true';
}
}
switch (T) {
case int:
if (value is int) return value;
if (value is double) return value.round();
return defaultValue;
case double:
if (value is int) return value;
if (value is double) return value;
return defaultValue;
case Color:
switch (value.runtimeType) {
case MaterialColor:
value = (value as MaterialColor).shade500;
break;
case MaterialAccentColor:
value = Color((value as MaterialAccentColor).value);
break;
case CupertinoDynamicColor:
value = Color((value as CupertinoDynamicColor).value);
break;
}
break;
case bool:
return value ?? defaultValue ?? false;
}
if (value.runtimeType.hashCode != T.hashCode) return defaultValue;
return defaultValue;
}