CNFoldableState.fromMap constructor
Parses the map sent by the native side.
Implementation
factory CNFoldableState.fromMap(Map<Object?, Object?>? map) {
if (map == null || map['supported'] != true) return unsupported;
final hingeMap = map['hinge'] as Map<Object?, Object?>?;
final regionMaps = (map['regions'] as List<Object?>?) ?? const <Object?>[];
double d(Map<Object?, Object?> m, String k) =>
(m[k] as num?)?.toDouble() ?? 0;
return CNFoldableState(
isSupported: true,
hinge: hingeMap == null
? null
: CNHinge(
status: switch (hingeMap['status']) {
'closed' => CNHingeStatus.closed,
'partiallyOpen' => CNHingeStatus.partiallyOpen,
'fullyOpen' => CNHingeStatus.fullyOpen,
_ => CNHingeStatus.unknown,
},
angle: d(hingeMap, 'angle'),
),
verticalBarSide: switch (map['verticalBarSide']) {
'left' => CNVerticalBarSide.left,
'right' => CNVerticalBarSide.right,
_ => CNVerticalBarSide.none,
},
regions: <CNReservedRegion>[
for (final raw in regionMaps)
if (raw is Map<Object?, Object?>)
CNReservedRegion(
kind: raw['kind'] == 'division'
? CNReservedRegionKind.division
: CNReservedRegionKind.occlusion,
frame: Rect.fromLTWH(
d(raw, 'x'),
d(raw, 'y'),
d(raw, 'width'),
d(raw, 'height'),
),
margins: EdgeInsets.fromLTRB(
d(raw, 'marginLeft'),
d(raw, 'marginTop'),
d(raw, 'marginRight'),
d(raw, 'marginBottom'),
),
isActive: raw['active'] == true,
),
],
);
}