diff --git a/mobile/lib/pages/common/app_log.page.dart b/mobile/lib/pages/common/app_log.page.dart index 58086cd8b9..8066835d84 100644 --- a/mobile/lib/pages/common/app_log.page.dart +++ b/mobile/lib/pages/common/app_log.page.dart @@ -91,15 +91,19 @@ class AppLogPage extends HookConsumerWidget { logMessages.value = []; }, ), - IconButton( - icon: Icon( - Icons.share_rounded, - color: context.primaryColor, - semanticLabel: "Share logs", - size: 20.0, - ), - onPressed: () { - immichLogger.shareLogs(); + Builder( + builder: (BuildContext iconContext) { + return IconButton( + icon: Icon( + Icons.share_rounded, + color: context.primaryColor, + semanticLabel: "Share logs", + size: 20.0, + ), + onPressed: () { + immichLogger.shareLogs(iconContext); + }, + ); }, ), ], diff --git a/mobile/lib/providers/asset_viewer/image_viewer_page_state.provider.dart b/mobile/lib/providers/asset_viewer/image_viewer_page_state.provider.dart index 9463d247ab..ee45e6bc5e 100644 --- a/mobile/lib/providers/asset_viewer/image_viewer_page_state.provider.dart +++ b/mobile/lib/providers/asset_viewer/image_viewer_page_state.provider.dart @@ -65,7 +65,7 @@ class ImageViewerStateNotifier extends StateNotifier { showDialog( context: context, builder: (BuildContext buildContext) { - _shareService.shareAsset(asset).then( + _shareService.shareAsset(asset, context).then( (bool status) { if (!status) { ImmichToast.show( diff --git a/mobile/lib/services/immich_logger.service.dart b/mobile/lib/services/immich_logger.service.dart index 5db14ece3b..c46fdc21d7 100644 --- a/mobile/lib/services/immich_logger.service.dart +++ b/mobile/lib/services/immich_logger.service.dart @@ -85,7 +85,7 @@ class ImmichLogger { _db.writeTxn(() => _db.loggerMessages.clear()); } - Future shareLogs() async { + Future shareLogs(BuildContext context) async { final tempDir = await getTemporaryDirectory(); final dateTime = DateTime.now().toIso8601String(); final filePath = '${tempDir.path}/Immich_log_$dateTime.log'; @@ -107,11 +107,13 @@ class ImmichLogger { await io.close(); } + final box = context.findRenderObject() as RenderBox?; + // Share file await Share.shareXFiles( [XFile(filePath)], subject: "Immich logs $dateTime", - sharePositionOrigin: Rect.zero, + sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, ).then( (value) => logFile.delete(), ); diff --git a/mobile/lib/services/share.service.dart b/mobile/lib/services/share.service.dart index d5bc31783b..40a2e0402b 100644 --- a/mobile/lib/services/share.service.dart +++ b/mobile/lib/services/share.service.dart @@ -19,11 +19,11 @@ class ShareService { ShareService(this._apiService); - Future shareAsset(Asset asset) async { - return await shareAssets([asset]); + Future shareAsset(Asset asset, BuildContext context) async { + return await shareAssets([asset], context); } - Future shareAssets(List assets) async { + Future shareAssets(List assets, BuildContext context) async { try { final downloadedXFiles = []; @@ -64,9 +64,10 @@ class ShareService { ); } + final box = context.findRenderObject() as RenderBox?; Share.shareXFiles( downloadedXFiles, - sharePositionOrigin: Rect.zero, + sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size, ); return true; } catch (error) { diff --git a/mobile/lib/utils/selection_handlers.dart b/mobile/lib/utils/selection_handlers.dart index 2bf0c276c7..6d11923fd8 100644 --- a/mobile/lib/utils/selection_handlers.dart +++ b/mobile/lib/utils/selection_handlers.dart @@ -22,7 +22,10 @@ void handleShareAssets( showDialog( context: context, builder: (BuildContext buildContext) { - ref.watch(shareServiceProvider).shareAssets(selection.toList()).then( + ref + .watch(shareServiceProvider) + .shareAssets(selection.toList(), context) + .then( (bool status) { if (!status) { ImmichToast.show(