decodeScene function
Decodes a Scene from a JSON map (already parsed).
Only schemaVersion = 2 is accepted.
Throws SceneJsonFormatException when validation fails.
Implementation
Scene decodeScene(Map<String, dynamic> json) {
final version = _requireInt(json, 'schemaVersion');
if (!schemaVersionsRead.contains(version)) {
throw SceneJsonFormatException(
'Unsupported schemaVersion: $version. Expected one of: '
'${schemaVersionsRead.toList()}.',
);
}
final cameraJson = _requireMap(json, 'camera');
final camera = Camera(
offset: Offset(
_requireDouble(cameraJson, 'offsetX'),
_requireDouble(cameraJson, 'offsetY'),
),
);
final backgroundJson = _requireMap(json, 'background');
final gridJson = _requireMap(backgroundJson, 'grid');
final background = Background(
color: _parseColor(_requireString(backgroundJson, 'color')),
grid: GridSettings(
isEnabled: _requireBool(gridJson, 'enabled'),
cellSize: _requirePositiveDouble(gridJson, 'cellSize'),
color: _parseColor(_requireString(gridJson, 'color')),
),
);
final paletteJson = _requireMap(json, 'palette');
final palette = ScenePalette(
penColors: _requireList(paletteJson, 'penColors')
.map((value) => _parseColor(_requireStringValue(value, 'penColors')))
.toList(),
backgroundColors: _requireList(paletteJson, 'backgroundColors')
.map(
(value) =>
_parseColor(_requireStringValue(value, 'backgroundColors')),
)
.toList(),
gridSizes: _requireList(
paletteJson,
'gridSizes',
).map((value) => _requirePositiveDoubleValue(value, 'gridSizes')).toList(),
);
final layersJson = _requireList(json, 'layers');
final layers = layersJson.map((layerJson) {
if (layerJson is! Map<String, dynamic>) {
throw SceneJsonFormatException('Layer must be an object.');
}
return _decodeLayer(layerJson);
}).toList();
return Scene(
layers: layers,
camera: camera,
background: background,
palette: palette,
);
}