diff --git a/packages/share/CHANGELOG.md b/packages/share/CHANGELOG.md index f13e819b8b74..dbd32e7bf10c 100644 --- a/packages/share/CHANGELOG.md +++ b/packages/share/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.5+3 + +* Ensure UIActivityViewController is presented on the view controller visible + ## 0.6.5+2 * Keep handling deprecated Android v1 classes for backward compatibility. diff --git a/packages/share/ios/Classes/FLTSharePlugin.m b/packages/share/ios/Classes/FLTSharePlugin.m index 837623a0119a..1622ca26edcc 100644 --- a/packages/share/ios/Classes/FLTSharePlugin.m +++ b/packages/share/ios/Classes/FLTSharePlugin.m @@ -6,6 +6,21 @@ static NSString *const PLATFORM_CHANNEL = @"plugins.flutter.io/share"; +static UIViewController *RootViewController() { + return [UIApplication sharedApplication].keyWindow.rootViewController; +} + +static UIViewController *TopViewControllerForViewController(UIViewController *viewController) { + if (viewController.presentedViewController) { + return TopViewControllerForViewController(viewController.presentedViewController); + } + if ([viewController isKindOfClass:[UINavigationController class]]) { + return TopViewControllerForViewController( + ((UINavigationController *)viewController).visibleViewController); + } + return viewController; +} + @interface ShareData : NSObject @property(readonly, nonatomic, copy) NSString *subject; @@ -122,9 +137,11 @@ + (void)registerWithRegistrar:(NSObject *)registrar { return; } + UIViewController *topViewController = + TopViewControllerForViewController(RootViewController()); [self shareText:shareText subject:shareSubject - withController:[UIApplication sharedApplication].keyWindow.rootViewController + withController:topViewController atSource:originRect]; result(nil); } else if ([@"shareFiles" isEqualToString:call.method]) { @@ -149,11 +166,13 @@ + (void)registerWithRegistrar:(NSObject *)registrar { } } + UIViewController *topViewController = + TopViewControllerForViewController(RootViewController()); [self shareFiles:paths withMimeType:mimeTypes withSubject:subject withText:text - withController:[UIApplication sharedApplication].keyWindow.rootViewController + withController:topViewController atSource:originRect]; result(nil); } else { diff --git a/packages/share/pubspec.yaml b/packages/share/pubspec.yaml index dc55ed765453..5a659019bda4 100644 --- a/packages/share/pubspec.yaml +++ b/packages/share/pubspec.yaml @@ -5,7 +5,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/share # 0.6.y+z is compatible with 1.0.0, if you land a breaking change bump # the version to 2.0.0. # See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 -version: 0.6.5+2 +version: 0.6.5+3 flutter: plugin: