decodeRect static method

Rect? decodeRect(
  1. dynamic value, {
  2. bool validate = true,
})

Decodes the value to a Rect. If value is not null then it must contain a property named "type" with one of the following values:

  • center
  • circle
  • largest
  • ltrb
  • ltwh
  • points
  • zero

The structure of the remaining attributes depends on the "type" property.

Type: center

{
  "center": {
    "dx": <double>,
    "dy": <double>
  },
  "height": <double>,
  "width": <double>,
  "type": "center"
}

Type: circle

{
  "center": {
    "dx": <double>,
    "dy": <double>
  },
  "radius": <double>,
  "type": "circle"
}

Type: largest

{
  "type": "largest"
}

Type: ltrb

{
  "bottom": <double>,
  "left": <double>,
  "right": <double>,
  "top": <double>,
  "type": "ltrb"
}

Type: ltwh

{
  "height": <double>,
  "left": <double>,
  "top": <double>,
  "type": "ltwh",
  "width": <double>
}

Type: points

{
  "a": {
    "dx": <double>,
    "dy": <double>
  },
  "b": {
    "dx": <double>,
    "dy": <double>
  }
  "type": "points"
}

Type: zero

{
  "type": "zero"
}

See also:

Implementation

static Rect? decodeRect(
  dynamic value, {
  bool validate = true,
}) {
  Rect? result;
  if (value is Rect) {
    result = value;
  } else {
    assert(value == null || value['type'] is String);
    _checkSupported(
      'Rect.type',
      [
        'center',
        'circle',
        'largest',
        'ltrb',
        'ltwh',
        'points',
        'zero',
      ],
      value == null ? null : value['type'],
    );

    if (value != null) {
      assert(SchemaValidator.validate(
        schemaId: '$_baseSchemaUrl/rect',
        value: value,
        validate: validate,
      ));
      String? type = value['type'];
      switch (type) {
        case 'center':
          result = Rect.fromCenter(
            center: decodeOffset(
              value['center'],
              validate: false,
            )!,
            height: JsonClass.parseDouble(value['height'])!,
            width: JsonClass.parseDouble(value['width'])!,
          );
          break;

        case 'circle':
          result = Rect.fromCircle(
            center: decodeOffset(
              value['center'],
              validate: false,
            )!,
            radius: JsonClass.parseDouble(value['radius'])!,
          );
          break;

        case 'largest':
          result = Rect.largest;
          break;

        case 'ltrb':
          result = Rect.fromLTRB(
            JsonClass.parseDouble(value['left'])!,
            JsonClass.parseDouble(value['top'])!,
            JsonClass.parseDouble(value['right'])!,
            JsonClass.parseDouble(value['bottom'])!,
          );
          break;

        case 'ltwh':
          result = Rect.fromLTWH(
            JsonClass.parseDouble(value['left'])!,
            JsonClass.parseDouble(value['top'])!,
            JsonClass.parseDouble(value['width'])!,
            JsonClass.parseDouble(value['height'])!,
          );
          break;

        case 'points':
          result = Rect.fromPoints(
            decodeOffset(
              value['a'],
              validate: false,
            )!,
            decodeOffset(
              value['b'],
              validate: false,
            )!,
          );
          break;

        case 'zero':
          result = Rect.zero;
          break;
      }
    }
  }

  return result;
}