@@ -1,3 +1,4 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
@@ -17,6 +18,7 @@ class CustomerFilesBloc extends Bloc<CustomerFilesEvent, CustomerFilesState> {
|
||||
: super(const CustomerFilesState(status: CustomerFilesStatus.initial)) {
|
||||
on<LoadCustomerFilesEvent>(_loadCustomerFiles);
|
||||
on<UploadCustomerFileEvent>(_uploadCustomerFile);
|
||||
on<UploadMultipleCustomerFilesEvent>(_uploadMultipleCustomerFiles);
|
||||
on<DeleteCustomerFilesEvent>(_deleteCustomerFiles);
|
||||
on<ToggleCustomerFileSelectionEvent>(_toggleCustomerFileSelection);
|
||||
}
|
||||
@@ -60,6 +62,48 @@ class CustomerFilesBloc extends Bloc<CustomerFilesEvent, CustomerFilesState> {
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _uploadMultipleCustomerFiles(
|
||||
UploadMultipleCustomerFilesEvent event,
|
||||
Emitter<CustomerFilesState> emit,
|
||||
) async {
|
||||
if (event.files.isEmpty) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CustomerFilesStatus.failure,
|
||||
error: "Nessun file selezionato",
|
||||
),
|
||||
);
|
||||
return;
|
||||
}
|
||||
emit(state.copyWith(status: CustomerFilesStatus.uploading, error: null));
|
||||
try {
|
||||
// 2. Creiamo una lista di "Promesse" (Futures) per il repository
|
||||
final List<Future<void>> uploadTasks = [];
|
||||
for (var file in event.files) {
|
||||
// Aggiungiamo il task alla lista, ma NON usiamo await qui dentro!
|
||||
uploadTasks.add(
|
||||
_repository.uploadAndRegisterFile(
|
||||
customerId: customerId,
|
||||
pickedFile: file,
|
||||
),
|
||||
);
|
||||
}
|
||||
// 3. ESECUZIONE PARALLELA!
|
||||
// Aspettiamo che tutti i file siano caricati contemporaneamente.
|
||||
await Future.wait(uploadTasks);
|
||||
// 4. GRAN FINALE: Tutto caricato, emettiamo il success!
|
||||
emit(state.copyWith(status: CustomerFilesStatus.success));
|
||||
} catch (e) {
|
||||
// Se anche un solo file fallisce, catturiamo l'errore
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CustomerFilesStatus.failure,
|
||||
error: "Errore durante l'upload multiplo: $e",
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _deleteCustomerFiles(
|
||||
DeleteCustomerFilesEvent event,
|
||||
Emitter<CustomerFilesState> emit,
|
||||
|
||||
Reference in New Issue
Block a user