import 'package:google_mlkit_document_scanner/google_mlkit_document_scanner.dart'; /// Résultat du scan de document. class DocumentScanResult { /// Chemin de l'image redressée (de face), ou null si l'utilisateur a annulé. final String? imagePath; /// true si un scan a bien été produit. bool get success => imagePath != null; const DocumentScanResult(this.imagePath); } /// Service qui lance le scanner de documents Google ML Kit. /// /// Le scanner ouvre une UI plein écran fournie par Google Play Services : /// caméra, détection des bords de la feuille en direct, recadrage manuel des /// 4 coins, puis renvoie l'image REDRESSÉE de face. Idéal pour une cible de /// tir, qui est imprimée sur un carton/feuille rectangulaire. /// /// NOTE : disponible uniquement sur Android (fonctionnalité ML Kit en bêta). class DocumentScannerService { /// Lance le scanner et renvoie le chemin de l'image redressée. /// /// [pageLimit] est fixé à 1 (une seule cible par scan). /// On désactive l'import galerie ici car la caméra custom gère déjà ce flux. Future scanTarget() async { final options = DocumentScannerOptions( mode: ScannerMode.full, // recadrage + filtres + redressement complets pageLimit: 1, isGalleryImport: false, ); final scanner = DocumentScanner(options: options); try { final DocumentScanningResult result = await scanner.scanDocument(); final images = result.images; if (images.isEmpty) { return const DocumentScanResult(null); } return DocumentScanResult(images.first); } finally { // Libère les ressources natives du scanner. await scanner.close(); } } }