Layer.fromMap constructor

Layer.fromMap(
  1. Map map,
  2. List<Uint8List> stickers
)

Implementation

factory Layer.fromMap(
  Map map,
  List<Uint8List> stickers,
) {
  Layer layer = Layer(
    flipX: map['flipX'] ?? false,
    flipY: map['flipY'] ?? false,
    offset: Offset(map['x'] ?? 0, map['y'] ?? 0),
    rotation: map['rotation'] ?? 0,
    scale: map['scale'] ?? 1,
  );

  switch (map['type']) {
    case 'text':
      return TextLayerData(
        flipX: layer.flipX,
        flipY: layer.flipY,
        offset: layer.offset,
        rotation: layer.rotation,
        scale: layer.scale,
        text: map['text'] ?? '-',
        fontScale: map['fontScale'] ?? 1.0,
        textStyle: map['fontFamily'] != null
            ? TextStyle(
                fontFamily: map['fontFamily'],
              )
            : null,
        colorMode: LayerBackgroundMode.values
            .firstWhere((element) => element.name == map['colorMode']),
        color: Color(map['color']),
        background: Color(map['background']),
        colorPickerPosition: map['colorPickerPosition'] ?? 0,
        align: TextAlign.values
            .firstWhere((element) => element.name == map['align']),
      );
    case 'emoji':
      return EmojiLayerData(
        flipX: layer.flipX,
        flipY: layer.flipY,
        offset: layer.offset,
        rotation: layer.rotation,
        scale: layer.scale,
        emoji: map['emoji'],
      );
    case 'painting':
      return PaintingLayerData(
        flipX: layer.flipX,
        flipY: layer.flipY,
        offset: layer.offset,
        rotation: layer.rotation,
        scale: layer.scale,
        rawSize: Size(
          map['rawSize']?['w'] ?? 0,
          map['rawSize']?['h'] ?? 0,
        ),
        item: PaintedModel.fromMap(map['item'] ?? {}),
      );
    case 'sticker':
      int stickerPosition = map['listPosition'] ?? -1;
      Widget sticker = kDebugMode
          ? Text(
              'Sticker $stickerPosition not found',
              style: const TextStyle(color: Colors.red, fontSize: 24),
            )
          : const SizedBox.shrink();
      if (stickers.isNotEmpty && stickers.length > stickerPosition) {
        sticker = ConstrainedBox(
          constraints: const BoxConstraints(minWidth: 1, minHeight: 1),
          child: Image.memory(
            stickers[stickerPosition],
          ),
        );
      }

      return StickerLayerData(
        flipX: layer.flipX,
        flipY: layer.flipY,
        offset: layer.offset,
        rotation: layer.rotation,
        scale: layer.scale,
        sticker: sticker,
      );
    default:
      return layer;
  }
}