From 6aaa8f93d36ea0ac98af1cc0ae21f92f79184404 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 17 Sep 2021 18:01:50 +0700 Subject: [PATCH] TF-56 Implement local file picker --- .../domain/state/local_file_picker_state.dart | 26 ++++++++++++++++ .../local_file_picker_interactor.dart | 30 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 lib/features/upload/domain/state/local_file_picker_state.dart create mode 100644 lib/features/upload/domain/usecases/local_file_picker_interactor.dart diff --git a/lib/features/upload/domain/state/local_file_picker_state.dart b/lib/features/upload/domain/state/local_file_picker_state.dart new file mode 100644 index 000000000..91cd536d1 --- /dev/null +++ b/lib/features/upload/domain/state/local_file_picker_state.dart @@ -0,0 +1,26 @@ + +import 'package:core/core.dart'; +import 'package:model/model.dart'; + +class LocalFilePickerSuccess extends UIState { + final FileInfo fileInfo; + + LocalFilePickerSuccess(this.fileInfo); + + @override + List get props => [fileInfo]; +} + +class LocalFilePickerFailure extends FeatureFailure { + final exception; + + LocalFilePickerFailure(this.exception); + + @override + List get props => [exception]; +} + +class LocalFilePickerCancel extends FeatureFailure { + @override + List get props => []; +} \ No newline at end of file diff --git a/lib/features/upload/domain/usecases/local_file_picker_interactor.dart b/lib/features/upload/domain/usecases/local_file_picker_interactor.dart new file mode 100644 index 000000000..742d682ab --- /dev/null +++ b/lib/features/upload/domain/usecases/local_file_picker_interactor.dart @@ -0,0 +1,30 @@ + +import 'package:core/core.dart'; +import 'package:dartz/dartz.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/upload/domain/state/local_file_picker_state.dart'; + +class LocalFilePickerInteractor { + + LocalFilePickerInteractor(); + + Stream> execute({FileType fileType = FileType.any}) async* { + try { + final filesResult = await FilePicker.platform.pickFiles(type: fileType); + if (filesResult != null && filesResult.files.isNotEmpty) { + final platformFile = filesResult.files.first; + final fileInfoResult = FileInfo( + platformFile.name, + platformFile.path ?? '', + platformFile.size, + ); + yield Right(LocalFilePickerSuccess(fileInfoResult)); + } else { + yield Left(LocalFilePickerCancel()); + } + } catch (exception) { + yield Left(LocalFilePickerFailure(exception)); + } + } +} \ No newline at end of file