Implementation
static SymbolLayer decode(String properties) {
var map = json.decode(properties);
if (map["layout"] == null) {
map["layout"] = {};
}
if (map["paint"] == null) {
map["paint"] = {};
}
return SymbolLayer(
id: map["id"],
sourceId: map["source"],
sourceLayer: map["source-layer"],
minZoom: map["minzoom"]?.toDouble(),
maxZoom: map["maxzoom"]?.toDouble(),
slot: map["slot"],
visibility: map["layout"]["visibility"] == null
? Visibility.VISIBLE
: Visibility.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["visibility"]),
),
visibilityExpression: styleOptionalCastList(map["layout"]["visibility"]),
filter: styleOptionalCastList(map["filter"]),
iconAllowOverlap: styleOptionalCast(map["layout"]["icon-allow-overlap"]),
iconAllowOverlapExpression: styleOptionalCastList(
map["layout"]["icon-allow-overlap"],
),
iconAnchor: map["layout"]["icon-anchor"] == null
? null
: IconAnchor.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["icon-anchor"]),
),
iconAnchorExpression: styleOptionalCastList(map["layout"]["icon-anchor"]),
iconIgnorePlacement: styleOptionalCast(
map["layout"]["icon-ignore-placement"],
),
iconIgnorePlacementExpression: styleOptionalCastList(
map["layout"]["icon-ignore-placement"],
),
iconImage: styleOptionalCast(map["layout"]["icon-image"]),
iconImageExpression: styleOptionalCastList(map["layout"]["icon-image"]),
iconKeepUpright: styleOptionalCast(map["layout"]["icon-keep-upright"]),
iconKeepUprightExpression: styleOptionalCastList(
map["layout"]["icon-keep-upright"],
),
iconOffset: (map["layout"]["icon-offset"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
iconOffsetExpression: styleOptionalCastList(map["layout"]["icon-offset"]),
iconOptional: styleOptionalCast(map["layout"]["icon-optional"]),
iconOptionalExpression: styleOptionalCastList(
map["layout"]["icon-optional"],
),
iconPadding: styleOptionalCast(map["layout"]["icon-padding"]),
iconPaddingExpression: styleOptionalCastList(
map["layout"]["icon-padding"],
),
iconPitchAlignment: map["layout"]["icon-pitch-alignment"] == null
? null
: IconPitchAlignment.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["icon-pitch-alignment"]),
),
iconPitchAlignmentExpression: styleOptionalCastList(
map["layout"]["icon-pitch-alignment"],
),
iconRotate: styleOptionalCast(map["layout"]["icon-rotate"]),
iconRotateExpression: styleOptionalCastList(map["layout"]["icon-rotate"]),
iconRotationAlignment: map["layout"]["icon-rotation-alignment"] == null
? null
: IconRotationAlignment.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["icon-rotation-alignment"]),
),
iconRotationAlignmentExpression: styleOptionalCastList(
map["layout"]["icon-rotation-alignment"],
),
iconSize: styleOptionalCast(map["layout"]["icon-size"]),
iconSizeExpression: styleOptionalCastList(map["layout"]["icon-size"]),
iconSizeScaleRange: (map["layout"]["icon-size-scale-range"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
iconSizeScaleRangeExpression: styleOptionalCastList(
map["layout"]["icon-size-scale-range"],
),
iconTextFit: map["layout"]["icon-text-fit"] == null
? null
: IconTextFit.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["icon-text-fit"]),
),
iconTextFitExpression: styleOptionalCastList(
map["layout"]["icon-text-fit"],
),
iconTextFitPadding: (map["layout"]["icon-text-fit-padding"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
iconTextFitPaddingExpression: styleOptionalCastList(
map["layout"]["icon-text-fit-padding"],
),
symbolAvoidEdges: styleOptionalCast(map["layout"]["symbol-avoid-edges"]),
symbolAvoidEdgesExpression: styleOptionalCastList(
map["layout"]["symbol-avoid-edges"],
),
symbolElevationReference:
map["layout"]["symbol-elevation-reference"] == null
? null
: SymbolElevationReference.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["symbol-elevation-reference"]),
),
symbolElevationReferenceExpression: styleOptionalCastList(
map["layout"]["symbol-elevation-reference"],
),
symbolPlacement: map["layout"]["symbol-placement"] == null
? null
: SymbolPlacement.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["symbol-placement"]),
),
symbolPlacementExpression: styleOptionalCastList(
map["layout"]["symbol-placement"],
),
symbolSortKey: styleOptionalCast(map["layout"]["symbol-sort-key"]),
symbolSortKeyExpression: styleOptionalCastList(
map["layout"]["symbol-sort-key"],
),
symbolSpacing: styleOptionalCast(map["layout"]["symbol-spacing"]),
symbolSpacingExpression: styleOptionalCastList(
map["layout"]["symbol-spacing"],
),
symbolZElevate: styleOptionalCast(map["layout"]["symbol-z-elevate"]),
symbolZElevateExpression: styleOptionalCastList(
map["layout"]["symbol-z-elevate"],
),
symbolZOrder: map["layout"]["symbol-z-order"] == null
? null
: SymbolZOrder.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["symbol-z-order"]),
),
symbolZOrderExpression: styleOptionalCastList(
map["layout"]["symbol-z-order"],
),
textAllowOverlap: styleOptionalCast(map["layout"]["text-allow-overlap"]),
textAllowOverlapExpression: styleOptionalCastList(
map["layout"]["text-allow-overlap"],
),
textAnchor: map["layout"]["text-anchor"] == null
? null
: TextAnchor.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["text-anchor"]),
),
textAnchorExpression: styleOptionalCastList(map["layout"]["text-anchor"]),
textField: styleOptionalCast(map["layout"]["text-field"]),
textFieldExpression: styleOptionalCastList(map["layout"]["text-field"]),
textFont: (map["layout"]["text-font"] as List?)
?.map<String?>((e) => e.toString())
.toList(),
textFontExpression: styleOptionalCastList(map["layout"]["text-font"]),
textIgnorePlacement: styleOptionalCast(
map["layout"]["text-ignore-placement"],
),
textIgnorePlacementExpression: styleOptionalCastList(
map["layout"]["text-ignore-placement"],
),
textJustify: map["layout"]["text-justify"] == null
? null
: TextJustify.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["text-justify"]),
),
textJustifyExpression: styleOptionalCastList(
map["layout"]["text-justify"],
),
textKeepUpright: styleOptionalCast(map["layout"]["text-keep-upright"]),
textKeepUprightExpression: styleOptionalCastList(
map["layout"]["text-keep-upright"],
),
textLetterSpacing: styleOptionalCast(
map["layout"]["text-letter-spacing"],
),
textLetterSpacingExpression: styleOptionalCastList(
map["layout"]["text-letter-spacing"],
),
textLineHeight: styleOptionalCast(map["layout"]["text-line-height"]),
textLineHeightExpression: styleOptionalCastList(
map["layout"]["text-line-height"],
),
textMaxAngle: styleOptionalCast(map["layout"]["text-max-angle"]),
textMaxAngleExpression: styleOptionalCastList(
map["layout"]["text-max-angle"],
),
textMaxWidth: styleOptionalCast(map["layout"]["text-max-width"]),
textMaxWidthExpression: styleOptionalCastList(
map["layout"]["text-max-width"],
),
textOffset: (map["layout"]["text-offset"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
textOffsetExpression: styleOptionalCastList(map["layout"]["text-offset"]),
textOptional: styleOptionalCast(map["layout"]["text-optional"]),
textOptionalExpression: styleOptionalCastList(
map["layout"]["text-optional"],
),
textPadding: styleOptionalCast(map["layout"]["text-padding"]),
textPaddingExpression: styleOptionalCastList(
map["layout"]["text-padding"],
),
textPitchAlignment: map["layout"]["text-pitch-alignment"] == null
? null
: TextPitchAlignment.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["text-pitch-alignment"]),
),
textPitchAlignmentExpression: styleOptionalCastList(
map["layout"]["text-pitch-alignment"],
),
textRadialOffset: styleOptionalCast(map["layout"]["text-radial-offset"]),
textRadialOffsetExpression: styleOptionalCastList(
map["layout"]["text-radial-offset"],
),
textRotate: styleOptionalCast(map["layout"]["text-rotate"]),
textRotateExpression: styleOptionalCastList(map["layout"]["text-rotate"]),
textRotationAlignment: map["layout"]["text-rotation-alignment"] == null
? null
: TextRotationAlignment.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["text-rotation-alignment"]),
),
textRotationAlignmentExpression: styleOptionalCastList(
map["layout"]["text-rotation-alignment"],
),
textSize: styleOptionalCast(map["layout"]["text-size"]),
textSizeExpression: styleOptionalCastList(map["layout"]["text-size"]),
textSizeScaleRange: (map["layout"]["text-size-scale-range"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
textSizeScaleRangeExpression: styleOptionalCastList(
map["layout"]["text-size-scale-range"],
),
textTransform: map["layout"]["text-transform"] == null
? null
: TextTransform.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["layout"]["text-transform"]),
),
textTransformExpression: styleOptionalCastList(
map["layout"]["text-transform"],
),
textVariableAnchor: (map["layout"]["text-variable-anchor"] as List?)
?.map<String?>((e) => e.toString())
.toList(),
textVariableAnchorExpression: styleOptionalCastList(
map["layout"]["text-variable-anchor"],
),
textWritingMode: (map["layout"]["text-writing-mode"] as List?)
?.map<String?>((e) => e.toString())
.toList(),
textWritingModeExpression: styleOptionalCastList(
map["layout"]["text-writing-mode"],
),
iconColor: (map["paint"]["icon-color"] as List?)?.toRGBAInt(),
iconColorExpression: styleOptionalCastList(map["paint"]["icon-color"]),
iconColorBrightnessMax: styleOptionalCast(
map["paint"]["icon-color-brightness-max"],
),
iconColorBrightnessMaxExpression: styleOptionalCastList(
map["paint"]["icon-color-brightness-max"],
),
iconColorBrightnessMin: styleOptionalCast(
map["paint"]["icon-color-brightness-min"],
),
iconColorBrightnessMinExpression: styleOptionalCastList(
map["paint"]["icon-color-brightness-min"],
),
iconColorContrast: styleOptionalCast(map["paint"]["icon-color-contrast"]),
iconColorContrastExpression: styleOptionalCastList(
map["paint"]["icon-color-contrast"],
),
iconColorSaturation: styleOptionalCast(
map["paint"]["icon-color-saturation"],
),
iconColorSaturationExpression: styleOptionalCastList(
map["paint"]["icon-color-saturation"],
),
iconEmissiveStrength: styleOptionalCast(
map["paint"]["icon-emissive-strength"],
),
iconEmissiveStrengthExpression: styleOptionalCastList(
map["paint"]["icon-emissive-strength"],
),
iconHaloBlur: styleOptionalCast(map["paint"]["icon-halo-blur"]),
iconHaloBlurExpression: styleOptionalCastList(
map["paint"]["icon-halo-blur"],
),
iconHaloColor: (map["paint"]["icon-halo-color"] as List?)?.toRGBAInt(),
iconHaloColorExpression: styleOptionalCastList(
map["paint"]["icon-halo-color"],
),
iconHaloWidth: styleOptionalCast(map["paint"]["icon-halo-width"]),
iconHaloWidthExpression: styleOptionalCastList(
map["paint"]["icon-halo-width"],
),
iconImageCrossFade: styleOptionalCast(
map["paint"]["icon-image-cross-fade"],
),
iconImageCrossFadeExpression: styleOptionalCastList(
map["paint"]["icon-image-cross-fade"],
),
iconOcclusionOpacity: styleOptionalCast(
map["paint"]["icon-occlusion-opacity"],
),
iconOcclusionOpacityExpression: styleOptionalCastList(
map["paint"]["icon-occlusion-opacity"],
),
iconOpacity: styleOptionalCast(map["paint"]["icon-opacity"]),
iconOpacityExpression: styleOptionalCastList(
map["paint"]["icon-opacity"],
),
iconTranslate: (map["paint"]["icon-translate"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
iconTranslateExpression: styleOptionalCastList(
map["paint"]["icon-translate"],
),
iconTranslateAnchor: map["paint"]["icon-translate-anchor"] == null
? null
: IconTranslateAnchor.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["paint"]["icon-translate-anchor"]),
),
iconTranslateAnchorExpression: styleOptionalCastList(
map["paint"]["icon-translate-anchor"],
),
occlusionOpacityMode: map["paint"]["occlusion-opacity-mode"] == null
? null
: OcclusionOpacityMode.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["paint"]["occlusion-opacity-mode"]),
),
occlusionOpacityModeExpression: styleOptionalCastList(
map["paint"]["occlusion-opacity-mode"],
),
symbolZOffset: styleOptionalCast(map["paint"]["symbol-z-offset"]),
symbolZOffsetExpression: styleOptionalCastList(
map["paint"]["symbol-z-offset"],
),
textColor: (map["paint"]["text-color"] as List?)?.toRGBAInt(),
textColorExpression: styleOptionalCastList(map["paint"]["text-color"]),
textEmissiveStrength: styleOptionalCast(
map["paint"]["text-emissive-strength"],
),
textEmissiveStrengthExpression: styleOptionalCastList(
map["paint"]["text-emissive-strength"],
),
textHaloBlur: styleOptionalCast(map["paint"]["text-halo-blur"]),
textHaloBlurExpression: styleOptionalCastList(
map["paint"]["text-halo-blur"],
),
textHaloColor: (map["paint"]["text-halo-color"] as List?)?.toRGBAInt(),
textHaloColorExpression: styleOptionalCastList(
map["paint"]["text-halo-color"],
),
textHaloWidth: styleOptionalCast(map["paint"]["text-halo-width"]),
textHaloWidthExpression: styleOptionalCastList(
map["paint"]["text-halo-width"],
),
textOcclusionOpacity: styleOptionalCast(
map["paint"]["text-occlusion-opacity"],
),
textOcclusionOpacityExpression: styleOptionalCastList(
map["paint"]["text-occlusion-opacity"],
),
textOpacity: styleOptionalCast(map["paint"]["text-opacity"]),
textOpacityExpression: styleOptionalCastList(
map["paint"]["text-opacity"],
),
textTranslate: (map["paint"]["text-translate"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
textTranslateExpression: styleOptionalCastList(
map["paint"]["text-translate"],
),
textTranslateAnchor: map["paint"]["text-translate-anchor"] == null
? null
: TextTranslateAnchor.values.firstWhere(
(e) => e.name
.toLowerCase()
.replaceAll("_", "-")
.contains(map["paint"]["text-translate-anchor"]),
),
textTranslateAnchorExpression: styleOptionalCastList(
map["paint"]["text-translate-anchor"],
),
);
}