mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 10:38:41 +00:00
77 lines
2.1 KiB
Dart
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(),
|
|
);
|
|
}
|
|
}
|