canvasObjectFromJson function

CanvasObject canvasObjectFromJson(
  1. Map<String, Object?> json
)

Creates a retained canvas object from JSON.

Implementation

CanvasObject canvasObjectFromJson(Map<String, Object?> json) {
  final paint = json['paint'] is Map
      ? CanvasPaint.fromJson(Map<String, Object?>.from(json['paint'] as Map))
      : const CanvasPaint();
  final id = json['id']?.toString();
  final name = json['name']?.toString();
  final locked = json['locked'] == true;
  final hidden = json['hidden'] == true;
  return switch (json['type']?.toString()) {
    'rect' => CanvasRect(
      id: id,
      name: name,
      paint: paint,
      rotation: _toDouble(json['rotation']),
      locked: locked,
      hidden: hidden,
      x: _toDouble(json['x']),
      y: _toDouble(json['y']),
      width: _toDouble(json['width']),
      height: _toDouble(json['height']),
      borderRadius: _toDouble(json['borderRadius']),
    ),
    'line' => CanvasLine(
      id: id,
      name: name,
      paint: paint,
      rotation: _toDouble(json['rotation']),
      locked: locked,
      hidden: hidden,
      x1: _toDouble(json['x1']),
      y1: _toDouble(json['y1']),
      x2: _toDouble(json['x2']),
      y2: _toDouble(json['y2']),
    ),
    'circle' => CanvasCircle(
      id: id,
      name: name,
      paint: paint,
      rotation: _toDouble(json['rotation']),
      locked: locked,
      hidden: hidden,
      x: _toDouble(json['x']),
      y: _toDouble(json['y']),
      radius: _toDouble(json['radius']),
    ),
    'text' => CanvasTextObject(
      id: id,
      name: name,
      paint: paint,
      rotation: _toDouble(json['rotation']),
      locked: locked,
      hidden: hidden,
      text: json['text']?.toString() ?? '',
      x: _toDouble(json['x']),
      y: _toDouble(json['y']),
    ),
    'image' => CanvasImageObject(
      id: id,
      name: name,
      paint: paint,
      rotation: _toDouble(json['rotation']),
      locked: locked,
      hidden: hidden,
      src: json['src']?.toString() ?? '',
      x: _toDouble(json['x']),
      y: _toDouble(json['y']),
      width: _toDouble(json['width']),
      height: _toDouble(json['height']),
      crossOrigin: json['crossOrigin']?.toString(),
    ),
    _ => throw ArgumentError('Unknown canvas object type: ${json['type']}'),
  };
}