fromJson static method

PropertyConstraint<Object?> fromJson(
  1. Map<String, Object?> json
)

Decodes one tagged constraint, or an UnknownConstraint for tags this build does not know.

Implementation

static PropertyConstraint<Object?> fromJson(Map<String, Object?> json) {
  if (json.length != 1) return UnknownConstraint(json);
  final tag = json.keys.single;
  final value = json[tag];
  double? d(Object? v, String key) =>
      v is Map ? (v[key] as num?)?.toDouble() : null;
  int? i(Object? v, String key) =>
      v is Map ? (v[key] as num?)?.toInt() : null;
  switch (tag) {
    case 'range':
      return Range(d(value, 'min'), d(value, 'max'));
    case 'softRange':
      return SoftRange(d(value, 'min') ?? 0, d(value, 'max') ?? 1);
    case 'intRange':
      return IntRange(i(value, 'min'), i(value, 'max'));
    case 'step':
      return Step((value as num?)?.toDouble() ?? 1);
    case 'powerOfTwo':
      return PowerOfTwo(min: i(value, 'min') ?? 1, max: i(value, 'max'));
    case 'angleRadians':
      return const AngleRadians();
    case 'rgbColor':
      return const RgbColor();
    case 'normalized':
      return const Normalized();
    case 'layerMask32':
      return const LayerMask32();
    case 'multiline':
      return const Multiline();
    case 'pattern':
      return TextPattern(value is String ? value : '');
    case 'assetExtensions':
      return AssetExtensions([
        if (value is List)
          for (final extension in value)
            if (extension is String) extension,
      ]);
    case 'minCount':
      return MinCount((value as num?)?.toInt() ?? 0);
    case 'sortedDescending':
      return SortedDescending(value is String ? value : '');
    default:
      return UnknownConstraint(json);
  }
}