decodeMarginSpec static method

MarginSpec? decodeMarginSpec(
  1. dynamic map, {
  2. bool validate = true,
})

Decodes the object from an int or Map-like dynamic structure. This expects the JSON format to be of the following structure:

{
  "bottomMarginSpec": <MarginSpec>,
  "leftMarginSpec": <MarginSpec>,
  "rightMarginSpec": <MarginSpec>,
  "topMarginSpec": <MarginSpec>
}

Implementation

static charts.MarginSpec? decodeMarginSpec(
  dynamic map, {
  bool validate = true,
}) {
  charts.MarginSpec? result;

  if (map is charts.MarginSpec) {
    result = map;
  } else if ((map is num || map is String) &&
      JsonClass.parseInt(map) != null) {
    result = charts.MarginSpec.fixedPixel(JsonClass.parseInt(map));
  } else if (map != null) {
    assert(SchemaValidator.validate(
      schemaId: '$_baseSchemaUrl/margin_spec',
      value: map,
      validate: validate,
    ));
    final type = map['type'];

    switch (type) {
      case 'percent':
        result = charts.MarginSpec.fromPercent(
          maxPercent: JsonClass.parseInt(map['maxPercent']),
          minPercent: JsonClass.parseInt(map['minPercent']),
        );
        break;

      case 'pixel':
        if (map is num || map is String) {
          result = charts.MarginSpec.fromPixel(
            maxPixel: JsonClass.parseInt(map['maxPixel']),
            minPixel: JsonClass.parseInt(map['minPixel']),
          );
        } else {
          result = charts.MarginSpec.fromPixel(
            maxPixel: JsonClass.parseInt(
              map['maxPixel'],
            ),
            minPixel: JsonClass.parseInt(
              map['minPixel'],
            ),
          );
        }
        break;
      default:
        throw Exception('Unknown [MarginSpec.type] encountered: [$type]');
    }
  }

  return result;
}