@@ -19,6 +19,10 @@ const String kFfiPlugin = 'ffiPlugin';
1919// Constant for 'defaultPackage' key in plugin maps.
2020const String kDefaultPackage = 'default_package' ;
2121
22+ /// Constant for 'sharedDarwinSource' key in plugin maps.
23+ /// Can be set for iOS and macOS plugins.
24+ const String kSharedDarwinSource = 'sharedDarwinSource' ;
25+
2226/// Constant for 'supportedVariants' key in plugin maps.
2327const String kSupportedVariants = 'supportedVariants' ;
2428
@@ -52,6 +56,11 @@ abstract class NativeOrDartPlugin {
5256 bool hasMethodChannel ();
5357}
5458
59+ abstract class DarwinPlugin {
60+ /// Indicates the iOS and macOS native code is shareable the subdirectory "darwin",
61+ bool get sharedDarwinSource;
62+ }
63+
5564/// Contains parameters to template an Android plugin.
5665///
5766/// The [name] of the plugin is required. Additionally, either:
@@ -227,15 +236,17 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin {
227236/// - the [dartPluginClass] that will be the entry point for the plugin's
228237/// Dart code
229238/// is required.
230- class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
239+ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin , DarwinPlugin {
231240 const IOSPlugin ({
232241 required this .name,
233242 required this .classPrefix,
234243 this .pluginClass,
235244 this .dartPluginClass,
236245 bool ? ffiPlugin,
237246 this .defaultPackage,
238- }) : ffiPlugin = ffiPlugin ?? false ;
247+ bool ? sharedDarwinSource,
248+ }) : ffiPlugin = ffiPlugin ?? false ,
249+ sharedDarwinSource = sharedDarwinSource ?? false ;
239250
240251 factory IOSPlugin .fromYaml (String name, YamlMap yaml) {
241252 assert (validate (yaml)); // TODO(zanderso): https://github.com/flutter/flutter/issues/67241
@@ -246,6 +257,7 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
246257 dartPluginClass: yaml[kDartPluginClass] as String ? ,
247258 ffiPlugin: yaml[kFfiPlugin] as bool ? ,
248259 defaultPackage: yaml[kDefaultPackage] as String ? ,
260+ sharedDarwinSource: yaml[kSharedDarwinSource] as bool ? ,
249261 );
250262 }
251263
@@ -256,6 +268,7 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
256268 return yaml[kPluginClass] is String ||
257269 yaml[kDartPluginClass] is String ||
258270 yaml[kFfiPlugin] == true ||
271+ yaml[kSharedDarwinSource] == true ||
259272 yaml[kDefaultPackage] is String ;
260273 }
261274
@@ -271,6 +284,11 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
271284 final bool ffiPlugin;
272285 final String ? defaultPackage;
273286
287+ /// Indicates the iOS native code is shareable with macOS in
288+ /// the subdirectory "darwin", otherwise in the subdirectory "ios".
289+ @override
290+ final bool sharedDarwinSource;
291+
274292 @override
275293 bool hasMethodChannel () => pluginClass != null ;
276294
@@ -288,6 +306,7 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
288306 if (pluginClass != null ) 'class' : pluginClass,
289307 if (dartPluginClass != null ) kDartPluginClass : dartPluginClass,
290308 if (ffiPlugin) kFfiPlugin: true ,
309+ if (sharedDarwinSource) kSharedDarwinSource: true ,
291310 if (defaultPackage != null ) kDefaultPackage : defaultPackage,
292311 };
293312 }
@@ -298,14 +317,16 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
298317/// The [name] of the plugin is required. Either [dartPluginClass] or
299318/// [pluginClass] or [ffiPlugin] are required.
300319/// [pluginClass] will be the entry point to the plugin's native code.
301- class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
320+ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin , DarwinPlugin {
302321 const MacOSPlugin ({
303322 required this .name,
304323 this .pluginClass,
305324 this .dartPluginClass,
306325 bool ? ffiPlugin,
307326 this .defaultPackage,
308- }) : ffiPlugin = ffiPlugin ?? false ;
327+ bool ? sharedDarwinSource,
328+ }) : ffiPlugin = ffiPlugin ?? false ,
329+ sharedDarwinSource = sharedDarwinSource ?? false ;
309330
310331 factory MacOSPlugin .fromYaml (String name, YamlMap yaml) {
311332 assert (validate (yaml));
@@ -320,6 +341,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
320341 dartPluginClass: yaml[kDartPluginClass] as String ? ,
321342 ffiPlugin: yaml[kFfiPlugin] as bool ? ,
322343 defaultPackage: yaml[kDefaultPackage] as String ? ,
344+ sharedDarwinSource: yaml[kSharedDarwinSource] as bool ? ,
323345 );
324346 }
325347
@@ -330,6 +352,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
330352 return yaml[kPluginClass] is String ||
331353 yaml[kDartPluginClass] is String ||
332354 yaml[kFfiPlugin] == true ||
355+ yaml[kSharedDarwinSource] == true ||
333356 yaml[kDefaultPackage] is String ;
334357 }
335358
@@ -341,6 +364,11 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
341364 final bool ffiPlugin;
342365 final String ? defaultPackage;
343366
367+ /// Indicates the macOS native code is shareable with iOS in
368+ /// the subdirectory "darwin", otherwise in the subdirectory "macos".
369+ @override
370+ final bool sharedDarwinSource;
371+
344372 @override
345373 bool hasMethodChannel () => pluginClass != null ;
346374
@@ -357,6 +385,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
357385 if (pluginClass != null ) 'class' : pluginClass,
358386 if (dartPluginClass != null ) kDartPluginClass: dartPluginClass,
359387 if (ffiPlugin) kFfiPlugin: true ,
388+ if (sharedDarwinSource) kSharedDarwinSource: true ,
360389 if (defaultPackage != null ) kDefaultPackage: defaultPackage,
361390 };
362391 }
0 commit comments