diff --git a/lib/features/upload/data/datasource_impl/attachment_upload_datasource_impl.dart b/lib/features/upload/data/datasource_impl/attachment_upload_datasource_impl.dart index f57f0262b..351af6c37 100644 --- a/lib/features/upload/data/datasource_impl/attachment_upload_datasource_impl.dart +++ b/lib/features/upload/data/datasource_impl/attachment_upload_datasource_impl.dart @@ -24,6 +24,7 @@ class AttachmentUploadDataSourceImpl extends AttachmentUploadDataSource { fileInfo, uploadUri, _fileUploader, + _exceptionThrower, cancelToken: cancelToken )..upload(); }).catchError(_exceptionThrower.throwException); diff --git a/lib/features/upload/domain/model/upload_attachment.dart b/lib/features/upload/domain/model/upload_attachment.dart index 7088c88c0..150b8e289 100644 --- a/lib/features/upload/domain/model/upload_attachment.dart +++ b/lib/features/upload/domain/model/upload_attachment.dart @@ -11,6 +11,7 @@ import 'package:model/upload/file_info.dart'; import 'package:tmail_ui_user/features/upload/data/network/file_uploader.dart'; import 'package:tmail_ui_user/features/upload/domain/model/upload_task_id.dart'; import 'package:tmail_ui_user/features/upload/domain/state/attachment_upload_state.dart'; +import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; class UploadAttachment with EquatableMixin { @@ -19,6 +20,7 @@ class UploadAttachment with EquatableMixin { final Uri uploadUri; final FileUploader fileUploader; final CancelToken? cancelToken; + final ExceptionThrower exceptionThrower; final StreamController> _progressStateController = StreamController>.broadcast(); @@ -29,6 +31,7 @@ class UploadAttachment with EquatableMixin { this.fileInfo, this.uploadUri, this.fileUploader, + this.exceptionThrower, {this.cancelToken}); void _updateEvent(Either flowUploadState) { @@ -57,12 +60,16 @@ class UploadAttachment with EquatableMixin { } _updateEvent(Right(SuccessAttachmentUploadState(uploadTaskId, attachment, fileInfo))); - } catch (e) { - logError('UploadAttachment::upload():ERROR: $e'); - if (e is DioError && e.type == DioErrorType.cancel) { + } catch (error, stackTrace) { + logError('UploadAttachment::upload():ERROR: $error'); + if (error is DioError && error.type == DioErrorType.cancel) { _updateEvent(Left(CancelAttachmentUploadState(uploadTaskId))); } else { - _updateEvent(Left(ErrorAttachmentUploadState(uploadId: uploadTaskId))); + try { + exceptionThrower.throwException(error, stackTrace); + } catch (e) { + _updateEvent(Left(ErrorAttachmentUploadState(uploadId: uploadTaskId, exception: e))); + } } } finally { await _progressStateController.close(); diff --git a/lib/features/upload/presentation/controller/upload_controller.dart b/lib/features/upload/presentation/controller/upload_controller.dart index 553590707..f8dc8c37f 100644 --- a/lib/features/upload/presentation/controller/upload_controller.dart +++ b/lib/features/upload/presentation/controller/upload_controller.dart @@ -88,6 +88,7 @@ class UploadController extends BaseController { (currentState) => currentState?.copyWith(uploadStatus: UploadFileStatus.uploadFailed)); deleteFileUploaded(failure.uploadId); _showToastMessageWhenUploadAttachmentsFailure(failure); + consumeState(Stream.value((Left(failure)))); } }, (success) { @@ -143,6 +144,7 @@ class UploadController extends BaseController { leadingSVGIconColor: Colors.white, leadingSVGIcon: imagePaths.icInsertImage); } + consumeState(Stream.value((Left(failure)))); } }, (success) {