diff --git a/shell/platform/darwin/ios/framework/Headers/FlutterAppDelegate.h b/shell/platform/darwin/ios/framework/Headers/FlutterAppDelegate.h index 1e9066356e66a3e191ca625840adc4a74d78c63e..7084a02a534ed398c09f212a25831faca08d2cc9 100644 --- a/shell/platform/darwin/ios/framework/Headers/FlutterAppDelegate.h +++ b/shell/platform/darwin/ios/framework/Headers/FlutterAppDelegate.h @@ -29,6 +29,12 @@ FLUTTER_EXPORT @property(strong, nonatomic) UIWindow* window; +// Can be overriden by subclasses to provide a custom FlutterBinaryMessenger, +// typically a FlutterViewController, for plugin interop. +// +// Defaults to window's rootViewController. +- (NSObject*) binaryMessenger; + @end #endif // FLUTTER_FLUTTERDARTPROJECT_H_ diff --git a/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm b/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm index ad0bf10c9fccab35fb9005315d3dcc386f3a9467..25fa3f708d2e0ccf05ba7a74ed7f4497921fa131 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate.mm @@ -212,6 +212,11 @@ } } +// TODO(xster): move when doing https://github.com/flutter/flutter/issues/3671. +- (NSObject*)binaryMessenger { + return self.rootFlutterViewController; +} + - (NSObject*)registrarForPlugin:(NSString*)pluginKey { NSAssert(self.pluginPublications[pluginKey] == nil, @"Duplicate plugin key: %@", pluginKey); self.pluginPublications[pluginKey] = [NSNull null]; @@ -248,7 +253,7 @@ } - (NSObject*)messenger { - return (FlutterViewController*)_appDelegate.window.rootViewController; + return [_appDelegate binaryMessenger]; } - (void)publish:(NSObject*)value {