@@ -19,6 +19,10 @@ const String kFfiPlugin = 'ffiPlugin';
19
19
// Constant for 'defaultPackage' key in plugin maps.
20
20
const String kDefaultPackage = 'default_package' ;
21
21
22
+ /// Constant for 'sharedDarwinSource' key in plugin maps.
23
+ /// Can be set for iOS and macOS plugins.
24
+ const String kSharedDarwinSource = 'sharedDarwinSource' ;
25
+
22
26
/// Constant for 'supportedVariants' key in plugin maps.
23
27
const String kSupportedVariants = 'supportedVariants' ;
24
28
@@ -52,6 +56,11 @@ abstract class NativeOrDartPlugin {
52
56
bool hasMethodChannel ();
53
57
}
54
58
59
+ abstract class DarwinPlugin {
60
+ /// Indicates the iOS and macOS native code is shareable the subdirectory "darwin",
61
+ bool get sharedDarwinSource;
62
+ }
63
+
55
64
/// Contains parameters to template an Android plugin.
56
65
///
57
66
/// The [name] of the plugin is required. Additionally, either:
@@ -227,15 +236,17 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin {
227
236
/// - the [dartPluginClass] that will be the entry point for the plugin's
228
237
/// Dart code
229
238
/// is required.
230
- class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
239
+ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin , DarwinPlugin {
231
240
const IOSPlugin ({
232
241
required this .name,
233
242
required this .classPrefix,
234
243
this .pluginClass,
235
244
this .dartPluginClass,
236
245
bool ? ffiPlugin,
237
246
this .defaultPackage,
238
- }) : ffiPlugin = ffiPlugin ?? false ;
247
+ bool ? sharedDarwinSource,
248
+ }) : ffiPlugin = ffiPlugin ?? false ,
249
+ sharedDarwinSource = sharedDarwinSource ?? false ;
239
250
240
251
factory IOSPlugin .fromYaml (String name, YamlMap yaml) {
241
252
assert (validate (yaml)); // TODO(zanderso): https://github.com/flutter/flutter/issues/67241
@@ -246,6 +257,7 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
246
257
dartPluginClass: yaml[kDartPluginClass] as String ? ,
247
258
ffiPlugin: yaml[kFfiPlugin] as bool ? ,
248
259
defaultPackage: yaml[kDefaultPackage] as String ? ,
260
+ sharedDarwinSource: yaml[kSharedDarwinSource] as bool ? ,
249
261
);
250
262
}
251
263
@@ -256,6 +268,7 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
256
268
return yaml[kPluginClass] is String ||
257
269
yaml[kDartPluginClass] is String ||
258
270
yaml[kFfiPlugin] == true ||
271
+ yaml[kSharedDarwinSource] == true ||
259
272
yaml[kDefaultPackage] is String ;
260
273
}
261
274
@@ -271,6 +284,11 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
271
284
final bool ffiPlugin;
272
285
final String ? defaultPackage;
273
286
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
+
274
292
@override
275
293
bool hasMethodChannel () => pluginClass != null ;
276
294
@@ -288,6 +306,7 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
288
306
if (pluginClass != null ) 'class' : pluginClass,
289
307
if (dartPluginClass != null ) kDartPluginClass : dartPluginClass,
290
308
if (ffiPlugin) kFfiPlugin: true ,
309
+ if (sharedDarwinSource) kSharedDarwinSource: true ,
291
310
if (defaultPackage != null ) kDefaultPackage : defaultPackage,
292
311
};
293
312
}
@@ -298,14 +317,16 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
298
317
/// The [name] of the plugin is required. Either [dartPluginClass] or
299
318
/// [pluginClass] or [ffiPlugin] are required.
300
319
/// [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 {
302
321
const MacOSPlugin ({
303
322
required this .name,
304
323
this .pluginClass,
305
324
this .dartPluginClass,
306
325
bool ? ffiPlugin,
307
326
this .defaultPackage,
308
- }) : ffiPlugin = ffiPlugin ?? false ;
327
+ bool ? sharedDarwinSource,
328
+ }) : ffiPlugin = ffiPlugin ?? false ,
329
+ sharedDarwinSource = sharedDarwinSource ?? false ;
309
330
310
331
factory MacOSPlugin .fromYaml (String name, YamlMap yaml) {
311
332
assert (validate (yaml));
@@ -320,6 +341,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
320
341
dartPluginClass: yaml[kDartPluginClass] as String ? ,
321
342
ffiPlugin: yaml[kFfiPlugin] as bool ? ,
322
343
defaultPackage: yaml[kDefaultPackage] as String ? ,
344
+ sharedDarwinSource: yaml[kSharedDarwinSource] as bool ? ,
323
345
);
324
346
}
325
347
@@ -330,6 +352,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
330
352
return yaml[kPluginClass] is String ||
331
353
yaml[kDartPluginClass] is String ||
332
354
yaml[kFfiPlugin] == true ||
355
+ yaml[kSharedDarwinSource] == true ||
333
356
yaml[kDefaultPackage] is String ;
334
357
}
335
358
@@ -341,6 +364,11 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
341
364
final bool ffiPlugin;
342
365
final String ? defaultPackage;
343
366
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
+
344
372
@override
345
373
bool hasMethodChannel () => pluginClass != null ;
346
374
@@ -357,6 +385,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
357
385
if (pluginClass != null ) 'class' : pluginClass,
358
386
if (dartPluginClass != null ) kDartPluginClass: dartPluginClass,
359
387
if (ffiPlugin) kFfiPlugin: true ,
388
+ if (sharedDarwinSource) kSharedDarwinSource: true ,
360
389
if (defaultPackage != null ) kDefaultPackage: defaultPackage,
361
390
};
362
391
}
0 commit comments