twonly-app/lib/src/components/image_editor/layers_viewer.dart
2025-02-01 17:52:40 +01:00

77 lines
2.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:twonly/src/components/image_editor/data/layer.dart';
import 'package:twonly/src/components/image_editor/layers/background_blur_layer.dart';
import 'package:twonly/src/components/image_editor/layers/background_layer.dart';
import 'package:twonly/src/components/image_editor/layers/emoji_layer.dart';
import 'package:twonly/src/components/image_editor/layers/image_layer.dart';
import 'package:twonly/src/components/image_editor/layers/text_layer.dart';
/// View stacked layers (unbounded height, width)
class LayersViewer extends StatelessWidget {
final List<Layer> layers;
final Function()? onUpdate;
final bool editable;
const LayersViewer({
super.key,
required this.layers,
required this.editable,
this.onUpdate,
});
@override
Widget build(BuildContext context) {
return Stack(
alignment: Alignment.center,
children: layers.map((layerItem) {
// Background layer
if (layerItem is BackgroundLayerData) {
return BackgroundLayer(
layerData: layerItem,
onUpdate: onUpdate,
editable: editable,
);
}
// Image layer
if (layerItem is ImageLayerData) {
return ImageLayer(
layerData: layerItem,
onUpdate: onUpdate,
editable: editable,
);
}
// Background blur layer
if (layerItem is BackgroundBlurLayerData && layerItem.radius > 0) {
return BackgroundBlurLayer(
layerData: layerItem,
onUpdate: onUpdate,
editable: editable,
);
}
// Emoji layer
if (layerItem is EmojiLayerData) {
return EmojiLayer(
layerData: layerItem,
onUpdate: onUpdate,
editable: editable,
);
}
// Text layer
if (layerItem is TextLayerData) {
return TextLayer(
layerData: layerItem,
onUpdate: onUpdate,
editable: editable,
);
}
// Blank layer
return Container();
}).toList(),
);
}
}