diff --git a/lib/services/file_loader/mobile/file_loader_native_ios.dart b/lib/services/file_loader/mobile/file_loader_native_ios.dart index 5f6cf830a7..b5f0bdf224 100644 --- a/lib/services/file_loader/mobile/file_loader_native_ios.dart +++ b/lib/services/file_loader/mobile/file_loader_native_ios.dart @@ -1,15 +1,27 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; +import 'package:flutter/material.dart'; import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; +import 'package:web_dex/app_config/app_config.dart'; import 'package:web_dex/services/file_loader/file_loader.dart'; import 'package:web_dex/shared/utils/zip.dart'; class FileLoaderNativeIOS implements FileLoader { const FileLoaderNativeIOS(); + Rect? _getSharePositionOrigin() { + final context = scaffoldKey.currentContext; + if (context == null) return null; + + final box = context.findRenderObject() as RenderBox?; + if (box == null) return null; + + return box.localToGlobal(Offset.zero) & box.size; + } + @override Future save({ required String fileName, @@ -19,8 +31,10 @@ class FileLoaderNativeIOS implements FileLoader { switch (type) { case LoadFileType.text: await _saveAsTextFile(fileName: fileName, data: data); + break; case LoadFileType.compressed: await _saveAsCompressedFile(fileName: fileName, data: data); + break; } } @@ -33,7 +47,18 @@ class FileLoaderNativeIOS implements FileLoader { final File file = File(filePath); await file.writeAsString(data); - await Share.shareXFiles([XFile(file.path)]); + await SharePlus.instance.share( + ShareParams( + files: [ + XFile( + file.path, + name: '$fileName.txt', + mimeType: 'text/plain', + ) + ], + sharePositionOrigin: _getSharePositionOrigin(), + ), + ); } Future _saveAsCompressedFile({ @@ -49,7 +74,18 @@ class FileLoaderNativeIOS implements FileLoader { final File compressedFile = File(filePath); await compressedFile.writeAsBytes(compressedBytes); - await Share.shareXFiles([XFile(compressedFile.path)]); + await SharePlus.instance.share( + ShareParams( + files: [ + XFile( + compressedFile.path, + name: '$fileName.zip', + mimeType: 'application/zip', + ) + ], + sharePositionOrigin: _getSharePositionOrigin(), + ), + ); } @override