pdf_signature/lib/ui/features/pdf/widgets/signature_overlay.dart

60 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../../domain/models/model.dart';
import '../../signature/widgets/rotated_signature_image.dart';
import '../../signature/view_model/signature_view_model.dart';
/// Minimal overlay widget for rendering a placed signature.
class SignatureOverlay extends ConsumerWidget {
const SignatureOverlay({
super.key,
required this.pageSize,
required this.rect,
required this.placement,
required this.placedIndex,
});
final Size pageSize; // not used directly, kept for API symmetry
final Rect rect; // normalized 0..1 values (left, top, width, height)
final SignaturePlacement placement;
final int placedIndex;
@override
Widget build(BuildContext context, WidgetRef ref) {
final processedBytes = ref
.watch(signatureViewModelProvider)
.getProcessedBytes(placement.asset, placement.graphicAdjust);
return LayoutBuilder(
builder: (context, constraints) {
final left = rect.left * constraints.maxWidth;
final top = rect.top * constraints.maxHeight;
final width = rect.width * constraints.maxWidth;
final height = rect.height * constraints.maxHeight;
return Stack(
children: [
Positioned(
key: Key('placed_signature_$placedIndex'),
left: left,
top: top,
width: width,
height: height,
child: DecoratedBox(
decoration: BoxDecoration(
border: Border.all(color: Colors.red, width: 2),
),
child: FittedBox(
fit: BoxFit.contain,
child: RotatedSignatureImage(
bytes: processedBytes,
rotationDeg: placement.rotationDeg,
),
),
),
),
],
);
},
);
}
}