coin-recog-demo/lib/widgets/guide_overlay.dart

51 lines
1.3 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
import 'guide_frame.dart';
/// Circular shooting guide overlay.
class GuideOverlay extends StatelessWidget {
const GuideOverlay({super.key, required this.size});
final Size size;
@override
Widget build(BuildContext context) {
return CustomPaint(
size: size,
painter: _GuidePainter(),
);
}
}
class _GuidePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final rect = GuideFrame.inViewport(size);
final dim = Paint()..color = Colors.black.withOpacity(0.45);
final path = Path()
..addRect(Offset.zero & size)
..addOval(rect)
..fillType = PathFillType.evenOdd;
canvas.drawPath(path, dim);
final border = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 2
..color = Colors.white70;
canvas.drawOval(rect, border);
// Crosshair ticks
final tick = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 2
..color = const Color(0xFFEAB308);
final c = rect.center;
const len = 14.0;
canvas.drawLine(Offset(c.dx - len, c.dy), Offset(c.dx + len, c.dy), tick);
canvas.drawLine(Offset(c.dx, c.dy - len), Offset(c.dx, c.dy + len), tick);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}