Improve camera image processing with overlay and error handling

This commit is contained in:
2026-05-09 11:07:38 +02:00
parent fbb21dd8a4
commit 1ee2758756

View File

@@ -276,23 +276,41 @@ class _SharedMobileUploadScreenState extends State<SharedMobileUploadScreen> {
// --- LOGICA FOTOCAMERA E LIBRERIA --- // --- LOGICA FOTOCAMERA E LIBRERIA ---
Future<void> _handleCamera() async { Future<void> _handleCamera() async {
final picker = ImagePicker(); final picker = ImagePicker();
// Apriamo la fotocamera. Qui NON mettiamo il loader perché
// l'utente sta guardando l'app nativa del telefono.
final photo = await picker.pickImage( final photo = await picker.pickImage(
source: ImageSource.camera, source: ImageSource.camera,
imageQuality: 80, imageQuality: 80,
); );
if (photo != null) {
final photoBytes = await photo.readAsBytes();
final photoSize = await photo.length();
final platformFile = PlatformFile( if (photo != null) {
name: photo.name, // 1. Accendiamo l'overlay "Elaborazione foto..."
size: photoSize, setState(() => _isProcessingLocal = true);
path: photo.path,
bytes: photoBytes, // I bytes ci salvano la vita su Supabase! // 2. TRUCCO NINJA: Lasciamo "respirare" Flutter per 50ms
); // in modo che faccia in tempo a disegnare l'overlay grigio sullo schermo
setState(() { // prima che readAsBytes() blocchi il processore!
_stagedFiles.add(platformFile); await Future.delayed(const Duration(milliseconds: 50));
});
try {
// 3. Ora facciamo il lavoro pesante
final photoBytes = await photo.readAsBytes();
final photoSize = await photo.length();
final platformFile = PlatformFile(
name: photo.name,
size: photoSize,
path: photo.path,
bytes: photoBytes,
);
setState(() {
_stagedFiles.add(platformFile);
});
} finally {
// 4. Spegniamo l'overlay, sia che vada a buon fine, sia che ci sia un errore
setState(() => _isProcessingLocal = false);
}
} }
} }