decodeRect static method
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;
}