parseCssPropertyAsDouble function

double? parseCssPropertyAsDouble(
  1. String value, {
  2. required BuildContext context,
})

Implementation

double? parseCssPropertyAsDouble(
  String value, {
  required BuildContext context,
}) {
  if (value.trim().isEmpty) {
    return null;
  }

  // Try to parse it in case it's a valid double already
  var doubleValue = double.tryParse(value);

  if (doubleValue != null) {
    return doubleValue;
  }

  // If not then if it's a css numberic value then we will try to parse it
  final unit = _CssUnit.values
      .where((element) => value.endsWith(element.cssName))
      .firstOrNull;
  if (unit == null) {
    return null;
  }
  value = value.replaceFirst(unit.cssName, '');
  doubleValue = double.tryParse(value);
  if (doubleValue != null) {
    switch (unit) {
      case _CssUnit.px:
        // Do nothing
        break;
      case _CssUnit.percentage:
        // Not supported yet
        doubleValue = null;
        break;
      case _CssUnit.viewportWidth:
        doubleValue = (doubleValue / 100) * MediaQuery.sizeOf(context).width;
        break;
      case _CssUnit.viewportHeight:
        doubleValue = (doubleValue / 100) * MediaQuery.sizeOf(context).height;
        break;
      case _CssUnit.em:
        doubleValue = MediaQuery.textScalerOf(context).scale(doubleValue);
        break;
      case _CssUnit.rem:
        // Not fully supported yet
        doubleValue = MediaQuery.textScalerOf(context).scale(doubleValue);
        break;
      case _CssUnit.invalid:
        // Ignore
        doubleValue = null;
        break;
    }
  }
  return doubleValue;
}