import 'package:auto_size_text/auto_size_text.dart'; import 'package:camerawesome/camerawesome_plugin.dart'; import 'package:flutter/material.dart'; import 'package:gascom/constants/app_theme.dart'; import 'package:gascom/widgets/custom_app_bar.dart'; class NationalIdCameraScreen extends StatefulWidget { const NationalIdCameraScreen({ super.key, required this.title, required this.subtitle, required this.description, required this.onScanComplete, }); final String title; final String subtitle; final String description; final void Function() onScanComplete; @override State createState() => _NationalIdCameraScreenState(); } class _NationalIdCameraScreenState extends State { String? error; @override Widget build(BuildContext context) { return Scaffold( appBar: const CustomAppBar(), body: SafeArea( child: CameraAwesomeBuilder.custom( sensorConfig: SensorConfig.single( aspectRatio: CameraAspectRatios.ratio_16_9, flashMode: FlashMode.none, sensor: Sensor.position(SensorPosition.back), zoom: 0.0, ), saveConfig: SaveConfig.photo( ), builder: (state, previewSize) { return Stack( children: [ Center( child: ClipPath( clipper: HoleClipper(), child: Container( color: AppTheme.primaryColor, ), ), ), Positioned( top: 30, left: 20, right: 20, child: AutoSizeText( widget.title, style: Theme.of(context).textTheme.bodyLarge?.copyWith( fontWeight: FontWeight.w500, ), textAlign: TextAlign.center, maxLines: 2, ) ), Positioned( top: 100, left: 20, right: 20, child: AutoSizeText( widget.subtitle, style: Theme.of(context).textTheme.bodySmall, textAlign: TextAlign.center, maxLines: 1, ) ), Positioned( bottom: 200, left: 20, right: 20, child: AutoSizeText( error ?? widget.description, style: Theme.of(context).textTheme.bodySmall, textAlign: TextAlign.center, maxLines: 2, ) ), ], ); } ), ), ); } } class HoleClipper extends CustomClipper { @override Path getClip(Size size) { final path = Path() ..addRect(Rect.fromLTWH(0, 0, size.width, size.height)) ..addRRect(RRect.fromRectAndRadius( Rect.fromCenter( center: Offset(size.width / 2, size.height * 0.38), width: size.width - (size.width * 0.1), // Adjust the width of the square height: size.height - (size.height * 0.7), // Adjust the height of the square to match the width for a square shape ), const Radius.circular(20), // Adjust the border radius as needed )) ..fillType = PathFillType.evenOdd; return path; } @override bool shouldReclip(covariant CustomClipper oldClipper) { return false; } }