photo_validation_and_enhancement 0.0.7
photo_validation_and_enhancement: ^0.0.7 copied to clipboard
A comprehensive Flutter package for photo quality validation, face analysis, and image enhancement.
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:photo_validation_and_enhancement/photo_validation_and_enhancement.dart';
void main() {
runApp(const PhotoEnhancementExampleApp());
}
class PhotoEnhancementExampleApp extends StatelessWidget {
const PhotoEnhancementExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Photo Validation Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const PhotoEnhancementHomeScreen(),
);
}
}
class PhotoEnhancementHomeScreen extends StatefulWidget {
const PhotoEnhancementHomeScreen({super.key});
@override
State<PhotoEnhancementHomeScreen> createState() =>
_PhotoEnhancementHomeScreenState();
}
class _PhotoEnhancementHomeScreenState
extends State<PhotoEnhancementHomeScreen> {
final ImageQualityGateService _qualityGate = ImageQualityGateService();
final ImageEnhancementService _enhancer = ImageEnhancementService();
File? _processedImage;
String? _statusText;
bool _isLoading = false;
Future<void> _processImage(File imageFile) async {
setState(() {
_isLoading = true;
_statusText = 'Validating...';
});
try {
final validationResult = await _qualityGate.validate(imageFile);
if (!validationResult.isAccepted) {
setState(() {
_statusText = 'Rejected: ${validationResult.rejectionReason}';
_isLoading = false;
});
return;
}
setState(() {
_statusText = 'Enhancing...';
});
final enhancedFile = await _enhancer.enhanceImage(imageFile);
setState(() {
_processedImage = enhancedFile;
_statusText = 'Photo processed successfully!';
_isLoading = false;
});
} catch (e) {
setState(() {
_statusText = 'Error: $e';
_isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Photo Validation & Enhancement'),
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (_processedImage != null)
Expanded(
child: Image.file(_processedImage!),
)
else
const Icon(Icons.image, size: 100, color: Colors.grey),
if (_isLoading)
const CircularProgressIndicator()
else if (_statusText != null)
Padding(
padding: const EdgeInsets.symmetric(vertical: 20.0),
child: Text(
_statusText!,
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 16, fontWeight: FontWeight.bold),
),
),
const SizedBox(height: 20),
ElevatedButton.icon(
onPressed: () {
// In a real app, use image_picker to select a file
// exampleImageFile = File(path);
// _processImage(exampleImageFile);
},
icon: const Icon(Icons.photo_camera),
label: const Text('Pick and Process Photo'),
),
const Padding(
padding: EdgeInsets.only(top: 10.0),
child: Text(
'Note: Add image_picker in real use-case.',
style: TextStyle(fontSize: 12, color: Colors.grey),
),
),
],
),
),
),
);
}
}