changed image upload screen from mobile upload screen
This commit is contained in:
60
lib/core/widgets/image_upload/blocs/image_upload_cubit.dart
Normal file
60
lib/core/widgets/image_upload/blocs/image_upload_cubit.dart
Normal file
@@ -0,0 +1,60 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
|
||||
part 'image_upload_state.dart';
|
||||
|
||||
class ImageUploadCubit extends Cubit<ImageUploadState> {
|
||||
ImageUploadCubit() : super(const ImageUploadState());
|
||||
|
||||
void setStatus(ImageUploadStatus status) {
|
||||
emit(state.copyWith(status: status));
|
||||
}
|
||||
|
||||
void setError(String? message) {
|
||||
emit(
|
||||
state.copyWith(status: ImageUploadStatus.failure, errorMessage: message),
|
||||
);
|
||||
}
|
||||
|
||||
void addFiles(List<PlatformFile> files) {
|
||||
List<PlatformFile> newFiles = List.from(state.stagedFiles);
|
||||
newFiles.addAll(files);
|
||||
emit(
|
||||
state.copyWith(status: ImageUploadStatus.success, stagedFiles: newFiles),
|
||||
);
|
||||
}
|
||||
|
||||
void removeFile(PlatformFile file) {
|
||||
List<PlatformFile> newFiles = List.from(state.stagedFiles);
|
||||
newFiles.remove(file);
|
||||
emit(
|
||||
state.copyWith(status: ImageUploadStatus.success, stagedFiles: newFiles),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> addPhoto(XFile photo) async {
|
||||
final List<PlatformFile> files = List.from(state.stagedFiles);
|
||||
files.add(PlatformFile(name: photo.name, size: 0));
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: ImageUploadStatus.addingPicture,
|
||||
stagedFiles: files,
|
||||
),
|
||||
);
|
||||
final List<PlatformFile> newFiles = List.from(files);
|
||||
newFiles.removeLast();
|
||||
final PlatformFile loadedFile = PlatformFile(
|
||||
name: photo.name,
|
||||
size: await photo.length(),
|
||||
bytes: await photo.readAsBytes(),
|
||||
path: photo.path,
|
||||
);
|
||||
newFiles.add(loadedFile);
|
||||
|
||||
emit(
|
||||
state.copyWith(status: ImageUploadStatus.success, stagedFiles: newFiles),
|
||||
);
|
||||
}
|
||||
}
|
||||
29
lib/core/widgets/image_upload/blocs/image_upload_state.dart
Normal file
29
lib/core/widgets/image_upload/blocs/image_upload_state.dart
Normal file
@@ -0,0 +1,29 @@
|
||||
part of 'image_upload_cubit.dart';
|
||||
|
||||
enum ImageUploadStatus { initial, addingPicture, uploading, success, failure }
|
||||
|
||||
class ImageUploadState extends Equatable {
|
||||
final ImageUploadStatus status;
|
||||
final String? errorMessage;
|
||||
final List<PlatformFile> stagedFiles;
|
||||
|
||||
const ImageUploadState({
|
||||
this.status = ImageUploadStatus.initial,
|
||||
this.errorMessage,
|
||||
this.stagedFiles = const [],
|
||||
});
|
||||
ImageUploadState copyWith({
|
||||
ImageUploadStatus? status,
|
||||
String? errorMessage,
|
||||
List<PlatformFile>? stagedFiles,
|
||||
}) {
|
||||
return ImageUploadState(
|
||||
status: status ?? this.status,
|
||||
errorMessage: errorMessage,
|
||||
stagedFiles: stagedFiles ?? this.stagedFiles,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [status, errorMessage, stagedFiles];
|
||||
}
|
||||
Reference in New Issue
Block a user