refactor pesantissimo dei Customer Files
This commit is contained in:
93
lib/features/customers/blocs/customer_files_bloc.dart
Normal file
93
lib/features/customers/blocs/customer_files_bloc.dart
Normal file
@@ -0,0 +1,93 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flux/features/customers/data/customer_repository.dart';
|
||||
import 'package:flux/features/customers/models/customer_file_model.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
|
||||
part 'customer_files_events.dart';
|
||||
part 'customer_files_state.dart';
|
||||
|
||||
class CustomerFilesBloc extends Bloc<CustomerFilesEvent, CustomerFilesState> {
|
||||
final CustomerRepository _repository = GetIt.I<CustomerRepository>();
|
||||
final String customerId;
|
||||
CustomerFilesBloc(this.customerId)
|
||||
: super(const CustomerFilesState(status: CustomerFilesStatus.initial)) {
|
||||
on<LoadCustomerFilesEvent>(_loadCustomerFiles);
|
||||
on<UploadCustomerFileEvent>(_uploadCustomerFile);
|
||||
on<DeleteCustomerFileEvent>(_deleteCustomerFile);
|
||||
on<ToggleCustomerFileSelectionEvent>(_toggleCustomerFileSelection);
|
||||
}
|
||||
void _loadCustomerFiles(
|
||||
LoadCustomerFilesEvent event,
|
||||
Emitter<CustomerFilesState> emit,
|
||||
) async {
|
||||
await emit.forEach<List<CustomerFileModel>>(
|
||||
_repository.getCustomerFilesStream(customerId),
|
||||
onData: (customerFiles) => CustomerFilesState(
|
||||
status: CustomerFilesStatus.success,
|
||||
customerFiles: customerFiles,
|
||||
),
|
||||
onError: (error, stackTrace) => CustomerFilesState(
|
||||
status: CustomerFilesStatus.failure,
|
||||
error: error.toString(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _uploadCustomerFile(
|
||||
UploadCustomerFileEvent event,
|
||||
Emitter<CustomerFilesState> emit,
|
||||
) async {
|
||||
emit(state.copyWith(status: CustomerFilesStatus.uploading));
|
||||
if (event.pickedFile != null) {
|
||||
try {
|
||||
await _repository.uploadAndRegisterFile(
|
||||
customerId: customerId,
|
||||
pickedFile: event.pickedFile!,
|
||||
);
|
||||
emit(state.copyWith(status: CustomerFilesStatus.success));
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CustomerFilesStatus.failure,
|
||||
error: e.toString(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _deleteCustomerFile(
|
||||
DeleteCustomerFileEvent event,
|
||||
Emitter<CustomerFilesState> emit,
|
||||
) async {
|
||||
emit(state.copyWith(status: CustomerFilesStatus.loading));
|
||||
try {
|
||||
await _repository.deleteDocument(event.file);
|
||||
emit(state.copyWith(status: CustomerFilesStatus.success));
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CustomerFilesStatus.failure,
|
||||
error: e.toString(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _toggleCustomerFileSelection(
|
||||
ToggleCustomerFileSelectionEvent event,
|
||||
Emitter<CustomerFilesState> emit,
|
||||
) {
|
||||
List<CustomerFileModel> selectedFiles = List.from(state.selectedFiles);
|
||||
if (selectedFiles.contains(event.file)) {
|
||||
selectedFiles.remove(event.file);
|
||||
} else {
|
||||
selectedFiles.add(event.file);
|
||||
}
|
||||
emit(state.copyWith(selectedFiles: selectedFiles));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user