diff --git a/lib/features/upload/data/model/upload_file_arguments.dart b/lib/features/upload/data/model/upload_file_arguments.dart index fc4ad2b6d..b9d2824f3 100644 --- a/lib/features/upload/data/model/upload_file_arguments.dart +++ b/lib/features/upload/data/model/upload_file_arguments.dart @@ -1,6 +1,7 @@ import 'package:core/data/network/dio_client.dart'; import 'package:equatable/equatable.dart'; +import 'package:flutter/services.dart'; import 'package:tmail_ui_user/features/upload/domain/model/mobile_file_upload.dart'; import 'package:tmail_ui_user/features/upload/domain/model/upload_task_id.dart'; @@ -10,12 +11,14 @@ class UploadFileArguments with EquatableMixin { final UploadTaskId uploadId; final MobileFileUpload mobileFileUpload; final Uri uploadUri; + final RootIsolateToken isolateToken; UploadFileArguments( this.dioClient, this.uploadId, this.mobileFileUpload, - this.uploadUri + this.uploadUri, + this.isolateToken, ); @override @@ -23,6 +26,7 @@ class UploadFileArguments with EquatableMixin { dioClient, uploadId, mobileFileUpload, - uploadUri + uploadUri, + isolateToken, ]; } \ No newline at end of file diff --git a/lib/features/upload/data/network/file_uploader.dart b/lib/features/upload/data/network/file_uploader.dart index 7f71a308f..142f7832e 100644 --- a/lib/features/upload/data/network/file_uploader.dart +++ b/lib/features/upload/data/network/file_uploader.dart @@ -10,15 +10,18 @@ import 'package:core/utils/app_logger.dart'; import 'package:core/utils/platform_info.dart'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; +import 'package:flutter/services.dart'; import 'package:get/get_connect/http/src/request/request.dart'; import 'package:model/email/attachment.dart'; import 'package:model/upload/file_info.dart'; import 'package:model/upload/upload_response.dart'; +import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart'; import 'package:tmail_ui_user/features/upload/data/model/upload_file_arguments.dart'; import 'package:tmail_ui_user/features/upload/domain/exceptions/upload_exception.dart'; import 'package:tmail_ui_user/features/upload/domain/extensions/file_info_extension.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/isolate_exception.dart'; import 'package:worker_manager/worker_manager.dart' as worker; class FileUploader { @@ -50,13 +53,19 @@ class FileUploader { uploadUri, cancelToken: cancelToken); } else { + final rootIsolateToken = RootIsolateToken.instance; + if (rootIsolateToken == null) { + throw CanNotGetRootIsolateToken(); + } + final mobileFileUpload = fileInfo.toMobileFileUpload(); return await _isolateExecutor.execute( arg1: UploadFileArguments( _dioClient, uploadId, mobileFileUpload, - uploadUri + uploadUri, + rootIsolateToken, ), fun1: _handleUploadAttachmentAction, notification: (value) { @@ -75,6 +84,10 @@ class FileUploader { UploadFileArguments argsUpload, worker.TypeSendPort sendPort ) async { + final rootIsolateToken = argsUpload.isolateToken; + BackgroundIsolateBinaryMessenger.ensureInitialized(rootIsolateToken); + await HiveCacheConfig().setUp(); + final headerParam = argsUpload.dioClient.getHeaders(); headerParam[HttpHeaders.contentTypeHeader] = argsUpload.mobileFileUpload.mimeType; headerParam[HttpHeaders.contentLengthHeader] = argsUpload.mobileFileUpload.fileSize; @@ -88,7 +101,6 @@ class FileUploader { } }; - final resultJson = await argsUpload.dioClient.post( Uri.decodeFull(argsUpload.uploadUri.toString()), options: Options(