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: _optionalCastList(map["layout"]["visibility"]),
filter: _optionalCastList(map["filter"]),
iconAllowOverlap: _optionalCast(map["layout"]["icon-allow-overlap"]),
iconAllowOverlapExpression:
_optionalCastList(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: _optionalCastList(map["layout"]["icon-anchor"]),
iconIgnorePlacement:
_optionalCast(map["layout"]["icon-ignore-placement"]),
iconIgnorePlacementExpression:
_optionalCastList(map["layout"]["icon-ignore-placement"]),
iconImage: _optionalCast(map["layout"]["icon-image"]),
iconImageExpression: _optionalCastList(map["layout"]["icon-image"]),
iconKeepUpright: _optionalCast(map["layout"]["icon-keep-upright"]),
iconKeepUprightExpression:
_optionalCastList(map["layout"]["icon-keep-upright"]),
iconOffset: (map["layout"]["icon-offset"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
iconOffsetExpression: _optionalCastList(map["layout"]["icon-offset"]),
iconOptional: _optionalCast(map["layout"]["icon-optional"]),
iconOptionalExpression: _optionalCastList(map["layout"]["icon-optional"]),
iconPadding: _optionalCast(map["layout"]["icon-padding"]),
iconPaddingExpression: _optionalCastList(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:
_optionalCastList(map["layout"]["icon-pitch-alignment"]),
iconRotate: _optionalCast(map["layout"]["icon-rotate"]),
iconRotateExpression: _optionalCastList(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:
_optionalCastList(map["layout"]["icon-rotation-alignment"]),
iconSize: _optionalCast(map["layout"]["icon-size"]),
iconSizeExpression: _optionalCastList(map["layout"]["icon-size"]),
iconSizeScaleRange: (map["layout"]["icon-size-scale-range"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
iconSizeScaleRangeExpression:
_optionalCastList(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: _optionalCastList(map["layout"]["icon-text-fit"]),
iconTextFitPadding: (map["layout"]["icon-text-fit-padding"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
iconTextFitPaddingExpression:
_optionalCastList(map["layout"]["icon-text-fit-padding"]),
symbolAvoidEdges: _optionalCast(map["layout"]["symbol-avoid-edges"]),
symbolAvoidEdgesExpression:
_optionalCastList(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:
_optionalCastList(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:
_optionalCastList(map["layout"]["symbol-placement"]),
symbolSortKey: _optionalCast(map["layout"]["symbol-sort-key"]),
symbolSortKeyExpression:
_optionalCastList(map["layout"]["symbol-sort-key"]),
symbolSpacing: _optionalCast(map["layout"]["symbol-spacing"]),
symbolSpacingExpression:
_optionalCastList(map["layout"]["symbol-spacing"]),
symbolZElevate: _optionalCast(map["layout"]["symbol-z-elevate"]),
symbolZElevateExpression:
_optionalCastList(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:
_optionalCastList(map["layout"]["symbol-z-order"]),
textAllowOverlap: _optionalCast(map["layout"]["text-allow-overlap"]),
textAllowOverlapExpression:
_optionalCastList(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: _optionalCastList(map["layout"]["text-anchor"]),
textField: _optionalCast(map["layout"]["text-field"]),
textFieldExpression: _optionalCastList(map["layout"]["text-field"]),
textFont: (map["layout"]["text-font"] as List?)
?.map<String?>((e) => e.toString())
.toList(),
textFontExpression: _optionalCastList(map["layout"]["text-font"]),
textIgnorePlacement:
_optionalCast(map["layout"]["text-ignore-placement"]),
textIgnorePlacementExpression:
_optionalCastList(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: _optionalCastList(map["layout"]["text-justify"]),
textKeepUpright: _optionalCast(map["layout"]["text-keep-upright"]),
textKeepUprightExpression:
_optionalCastList(map["layout"]["text-keep-upright"]),
textLetterSpacing: _optionalCast(map["layout"]["text-letter-spacing"]),
textLetterSpacingExpression:
_optionalCastList(map["layout"]["text-letter-spacing"]),
textLineHeight: _optionalCast(map["layout"]["text-line-height"]),
textLineHeightExpression:
_optionalCastList(map["layout"]["text-line-height"]),
textMaxAngle: _optionalCast(map["layout"]["text-max-angle"]),
textMaxAngleExpression:
_optionalCastList(map["layout"]["text-max-angle"]),
textMaxWidth: _optionalCast(map["layout"]["text-max-width"]),
textMaxWidthExpression:
_optionalCastList(map["layout"]["text-max-width"]),
textOffset: (map["layout"]["text-offset"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
textOffsetExpression: _optionalCastList(map["layout"]["text-offset"]),
textOptional: _optionalCast(map["layout"]["text-optional"]),
textOptionalExpression: _optionalCastList(map["layout"]["text-optional"]),
textPadding: _optionalCast(map["layout"]["text-padding"]),
textPaddingExpression: _optionalCastList(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:
_optionalCastList(map["layout"]["text-pitch-alignment"]),
textRadialOffset: _optionalCast(map["layout"]["text-radial-offset"]),
textRadialOffsetExpression:
_optionalCastList(map["layout"]["text-radial-offset"]),
textRotate: _optionalCast(map["layout"]["text-rotate"]),
textRotateExpression: _optionalCastList(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:
_optionalCastList(map["layout"]["text-rotation-alignment"]),
textSize: _optionalCast(map["layout"]["text-size"]),
textSizeExpression: _optionalCastList(map["layout"]["text-size"]),
textSizeScaleRange: (map["layout"]["text-size-scale-range"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
textSizeScaleRangeExpression:
_optionalCastList(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:
_optionalCastList(map["layout"]["text-transform"]),
textVariableAnchor: (map["layout"]["text-variable-anchor"] as List?)
?.map<String?>((e) => e.toString())
.toList(),
textVariableAnchorExpression:
_optionalCastList(map["layout"]["text-variable-anchor"]),
textWritingMode: (map["layout"]["text-writing-mode"] as List?)
?.map<String?>((e) => e.toString())
.toList(),
textWritingModeExpression:
_optionalCastList(map["layout"]["text-writing-mode"]),
iconColor: (map["paint"]["icon-color"] as List?)?.toRGBAInt(),
iconColorExpression: _optionalCastList(map["paint"]["icon-color"]),
iconColorBrightnessMax:
_optionalCast(map["paint"]["icon-color-brightness-max"]),
iconColorBrightnessMaxExpression:
_optionalCastList(map["paint"]["icon-color-brightness-max"]),
iconColorBrightnessMin:
_optionalCast(map["paint"]["icon-color-brightness-min"]),
iconColorBrightnessMinExpression:
_optionalCastList(map["paint"]["icon-color-brightness-min"]),
iconColorContrast: _optionalCast(map["paint"]["icon-color-contrast"]),
iconColorContrastExpression:
_optionalCastList(map["paint"]["icon-color-contrast"]),
iconColorSaturation: _optionalCast(map["paint"]["icon-color-saturation"]),
iconColorSaturationExpression:
_optionalCastList(map["paint"]["icon-color-saturation"]),
iconEmissiveStrength:
_optionalCast(map["paint"]["icon-emissive-strength"]),
iconEmissiveStrengthExpression:
_optionalCastList(map["paint"]["icon-emissive-strength"]),
iconHaloBlur: _optionalCast(map["paint"]["icon-halo-blur"]),
iconHaloBlurExpression: _optionalCastList(map["paint"]["icon-halo-blur"]),
iconHaloColor: (map["paint"]["icon-halo-color"] as List?)?.toRGBAInt(),
iconHaloColorExpression:
_optionalCastList(map["paint"]["icon-halo-color"]),
iconHaloWidth: _optionalCast(map["paint"]["icon-halo-width"]),
iconHaloWidthExpression:
_optionalCastList(map["paint"]["icon-halo-width"]),
iconImageCrossFade: _optionalCast(map["paint"]["icon-image-cross-fade"]),
iconImageCrossFadeExpression:
_optionalCastList(map["paint"]["icon-image-cross-fade"]),
iconOcclusionOpacity:
_optionalCast(map["paint"]["icon-occlusion-opacity"]),
iconOcclusionOpacityExpression:
_optionalCastList(map["paint"]["icon-occlusion-opacity"]),
iconOpacity: _optionalCast(map["paint"]["icon-opacity"]),
iconOpacityExpression: _optionalCastList(map["paint"]["icon-opacity"]),
iconTranslate: (map["paint"]["icon-translate"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
iconTranslateExpression:
_optionalCastList(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:
_optionalCastList(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:
_optionalCastList(map["paint"]["occlusion-opacity-mode"]),
symbolZOffset: _optionalCast(map["paint"]["symbol-z-offset"]),
symbolZOffsetExpression:
_optionalCastList(map["paint"]["symbol-z-offset"]),
textColor: (map["paint"]["text-color"] as List?)?.toRGBAInt(),
textColorExpression: _optionalCastList(map["paint"]["text-color"]),
textEmissiveStrength:
_optionalCast(map["paint"]["text-emissive-strength"]),
textEmissiveStrengthExpression:
_optionalCastList(map["paint"]["text-emissive-strength"]),
textHaloBlur: _optionalCast(map["paint"]["text-halo-blur"]),
textHaloBlurExpression: _optionalCastList(map["paint"]["text-halo-blur"]),
textHaloColor: (map["paint"]["text-halo-color"] as List?)?.toRGBAInt(),
textHaloColorExpression:
_optionalCastList(map["paint"]["text-halo-color"]),
textHaloWidth: _optionalCast(map["paint"]["text-halo-width"]),
textHaloWidthExpression:
_optionalCastList(map["paint"]["text-halo-width"]),
textOcclusionOpacity:
_optionalCast(map["paint"]["text-occlusion-opacity"]),
textOcclusionOpacityExpression:
_optionalCastList(map["paint"]["text-occlusion-opacity"]),
textOpacity: _optionalCast(map["paint"]["text-opacity"]),
textOpacityExpression: _optionalCastList(map["paint"]["text-opacity"]),
textTranslate: (map["paint"]["text-translate"] as List?)
?.map<double?>((e) => e.toDouble())
.toList(),
textTranslateExpression:
_optionalCastList(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:
_optionalCastList(map["paint"]["text-translate-anchor"]),
);
}