@@ -13,6 +13,9 @@ const String kPluginClass = 'pluginClass';
13
13
/// Constant for 'dartPluginClass' key in plugin maps.
14
14
const String kDartPluginClass = 'dartPluginClass' ;
15
15
16
+ /// Constant for 'dartPluginFile' key in plugin maps.
17
+ const String kDartFileName = 'dartFileName' ;
18
+
16
19
/// Constant for 'ffiPlugin' key in plugin maps.
17
20
const String kFfiPlugin = 'ffiPlugin' ;
18
21
@@ -68,8 +71,8 @@ abstract class DarwinPlugin {
68
71
/// - an implementation consisting of:
69
72
/// - the [package] and [pluginClass] that will be the entry point to the
70
73
/// plugin's native code, and/or
71
- /// - the [dartPluginClass] that will be the entry point for the plugin's
72
- /// Dart code
74
+ /// - the [dartPluginClass] with optional [dartFileName] that will be
75
+ /// the entry point for the plugin's Dart code
73
76
/// is required.
74
77
class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin {
75
78
AndroidPlugin ({
@@ -78,20 +81,40 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin {
78
81
this .package,
79
82
this .pluginClass,
80
83
this .dartPluginClass,
84
+ this .dartFileName,
81
85
bool ? ffiPlugin,
82
86
this .defaultPackage,
83
87
required FileSystem fileSystem,
84
88
}) : _fileSystem = fileSystem,
85
89
ffiPlugin = ffiPlugin ?? false ;
86
90
87
- AndroidPlugin .fromYaml (this .name, YamlMap yaml, this .pluginPath, FileSystem fileSystem)
88
- : assert (validate (yaml)),
89
- package = yaml['package' ] as String ? ,
90
- pluginClass = yaml[kPluginClass] as String ? ,
91
- dartPluginClass = yaml[kDartPluginClass] as String ? ,
92
- ffiPlugin = yaml[kFfiPlugin] as bool ? ?? false ,
93
- defaultPackage = yaml[kDefaultPackage] as String ? ,
94
- _fileSystem = fileSystem;
91
+ factory AndroidPlugin .fromYaml (
92
+ String name,
93
+ YamlMap yaml,
94
+ String pluginPath,
95
+ FileSystem fileSystem,
96
+ ) {
97
+ assert (validate (yaml));
98
+
99
+ final String ? dartPluginClass = yaml[kDartPluginClass] as String ? ;
100
+ final String ? dartFileName = yaml[kDartFileName] as String ? ;
101
+
102
+ if (dartPluginClass == null && dartFileName != null ) {
103
+ throw throwToolExit ('"dartFileName" cannot be specified without "dartPluginClass" in Android platform of plugin "$name "' );
104
+ }
105
+
106
+ return AndroidPlugin (
107
+ name: name,
108
+ package: yaml['package' ] as String ? ,
109
+ pluginClass: yaml[kPluginClass] as String ? ,
110
+ dartPluginClass: dartPluginClass,
111
+ dartFileName: dartFileName,
112
+ ffiPlugin: yaml[kFfiPlugin] as bool ? ?? false ,
113
+ defaultPackage: yaml[kDefaultPackage] as String ? ,
114
+ pluginPath: pluginPath,
115
+ fileSystem: fileSystem,
116
+ );
117
+ }
95
118
96
119
final FileSystem _fileSystem;
97
120
@@ -125,6 +148,9 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin {
125
148
/// The Dart plugin main class defined in pubspec.yaml, if any.
126
149
final String ? dartPluginClass;
127
150
151
+ /// Path to file in which dartPluginClass defined, if any.
152
+ final String ? dartFileName;
153
+
128
154
/// Is FFI plugin defined in pubspec.yaml.
129
155
final bool ffiPlugin;
130
156
@@ -141,6 +167,7 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin {
141
167
if (package != null ) 'package' : package,
142
168
if (pluginClass != null ) 'class' : pluginClass,
143
169
if (dartPluginClass != null ) kDartPluginClass : dartPluginClass,
170
+ if (dartFileName != null ) kDartFileName: dartFileName,
144
171
if (ffiPlugin) kFfiPlugin: true ,
145
172
if (defaultPackage != null ) kDefaultPackage : defaultPackage,
146
173
// Mustache doesn't support complex types.
@@ -224,29 +251,43 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin {
224
251
/// - an implementation consisting of:
225
252
/// - the [pluginClass] (with optional [classPrefix] ) that will be the entry
226
253
/// point to the plugin's native code, and/or
227
- /// - the [dartPluginClass] that will be the entry point for the plugin's
228
- /// Dart code
254
+ /// - the [dartPluginClass] with optional [dartFileName] that will be
255
+ /// the entry point for the plugin's Dart code
229
256
/// is required.
230
257
class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin , DarwinPlugin {
231
258
const IOSPlugin ({
232
259
required this .name,
233
260
required this .classPrefix,
234
261
this .pluginClass,
235
262
this .dartPluginClass,
263
+ this .dartFileName,
236
264
bool ? ffiPlugin,
237
265
this .defaultPackage,
238
266
bool ? sharedDarwinSource,
239
267
}) : ffiPlugin = ffiPlugin ?? false ,
240
268
sharedDarwinSource = sharedDarwinSource ?? false ;
241
269
242
- IOSPlugin .fromYaml (this .name, YamlMap yaml)
243
- : assert (validate (yaml)), // TODO(zanderso): https://github.com/flutter/flutter/issues/67241
244
- classPrefix = '' ,
245
- pluginClass = yaml[kPluginClass] as String ? ,
246
- dartPluginClass = yaml[kDartPluginClass] as String ? ,
247
- ffiPlugin = yaml[kFfiPlugin] as bool ? ?? false ,
248
- defaultPackage = yaml[kDefaultPackage] as String ? ,
249
- sharedDarwinSource = yaml[kSharedDarwinSource] as bool ? ?? false ;
270
+ factory IOSPlugin .fromYaml (String name, YamlMap yaml) {
271
+ assert (validate (yaml)); // TODO(zanderso): https://github.com/flutter/flutter/issues/67241
272
+
273
+ final String ? dartPluginClass = yaml[kDartPluginClass] as String ? ;
274
+ final String ? dartFileName = yaml[kDartFileName] as String ? ;
275
+
276
+ if (dartPluginClass == null && dartFileName != null ) {
277
+ throwToolExit ('"dartFileName" cannot be specified without "dartPluginClass" in iOS platform of plugin "$name "' );
278
+ }
279
+
280
+ return IOSPlugin (
281
+ name: name,
282
+ classPrefix: '' ,
283
+ pluginClass: yaml[kPluginClass] as String ? ,
284
+ dartPluginClass: dartPluginClass,
285
+ dartFileName: dartFileName,
286
+ ffiPlugin: yaml[kFfiPlugin] as bool ? ?? false ,
287
+ defaultPackage: yaml[kDefaultPackage] as String ? ,
288
+ sharedDarwinSource: yaml[kSharedDarwinSource] as bool ? ?? false ,
289
+ );
290
+ }
250
291
251
292
static bool validate (YamlMap yaml) {
252
293
return yaml[kPluginClass] is String ||
@@ -265,6 +306,7 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin, DarwinPlug
265
306
final String classPrefix;
266
307
final String ? pluginClass;
267
308
final String ? dartPluginClass;
309
+ final String ? dartFileName;
268
310
final bool ffiPlugin;
269
311
final String ? defaultPackage;
270
312
@@ -289,6 +331,7 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin, DarwinPlug
289
331
'prefix' : classPrefix,
290
332
if (pluginClass != null ) 'class' : pluginClass,
291
333
if (dartPluginClass != null ) kDartPluginClass : dartPluginClass,
334
+ if (dartFileName != null ) kDartFileName : dartFileName,
292
335
if (ffiPlugin) kFfiPlugin: true ,
293
336
if (sharedDarwinSource) kSharedDarwinSource: true ,
294
337
if (defaultPackage != null ) kDefaultPackage : defaultPackage,
@@ -301,25 +344,43 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin, DarwinPlug
301
344
/// The [name] of the plugin is required. Either [dartPluginClass] or
302
345
/// [pluginClass] or [ffiPlugin] are required.
303
346
/// [pluginClass] will be the entry point to the plugin's native code.
347
+ /// [dartFileName] is not required and will be used only if [dartPluginClass]
348
+ /// provided.
304
349
class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin , DarwinPlugin {
305
350
const MacOSPlugin ({
306
351
required this .name,
307
352
this .pluginClass,
308
353
this .dartPluginClass,
354
+ this .dartFileName,
309
355
bool ? ffiPlugin,
310
356
this .defaultPackage,
311
357
bool ? sharedDarwinSource,
312
358
}) : ffiPlugin = ffiPlugin ?? false ,
313
359
sharedDarwinSource = sharedDarwinSource ?? false ;
314
360
315
- MacOSPlugin .fromYaml (this .name, YamlMap yaml)
316
- : assert (validate (yaml)),
317
- // Treat 'none' as not present. See https://github.com/flutter/flutter/issues/57497.
318
- pluginClass = yaml[kPluginClass] == 'none' ? null : yaml[kPluginClass] as String ? ,
319
- dartPluginClass = yaml[kDartPluginClass] as String ? ,
320
- ffiPlugin = yaml[kFfiPlugin] as bool ? ?? false ,
321
- defaultPackage = yaml[kDefaultPackage] as String ? ,
322
- sharedDarwinSource = yaml[kSharedDarwinSource] as bool ? ?? false ;
361
+ factory MacOSPlugin .fromYaml (String name, YamlMap yaml) {
362
+ assert (validate (yaml));
363
+
364
+ final String ? dartPluginClass = yaml[kDartPluginClass] as String ? ;
365
+ final String ? dartFileName = yaml[kDartFileName] as String ? ;
366
+
367
+ if (dartPluginClass == null && dartFileName != null ) {
368
+ throwToolExit ('"dartFileName" cannot be specified without "dartPluginClass" in macOS platform of plugin "$name "' );
369
+ }
370
+
371
+ // Treat 'none' as not present. See https://github.com/flutter/flutter/issues/57497.
372
+ final String ? pluginClass = yaml[kPluginClass] == 'none' ? null : yaml[kPluginClass] as String ? ;
373
+
374
+ return MacOSPlugin (
375
+ name: name,
376
+ pluginClass: pluginClass,
377
+ dartPluginClass: dartPluginClass,
378
+ dartFileName: dartFileName,
379
+ ffiPlugin: yaml[kFfiPlugin] as bool ? ,
380
+ defaultPackage: yaml[kDefaultPackage] as String ? ,
381
+ sharedDarwinSource: yaml[kSharedDarwinSource] as bool ? ,
382
+ );
383
+ }
323
384
324
385
static bool validate (YamlMap yaml) {
325
386
return yaml[kPluginClass] is String ||
@@ -334,6 +395,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin, DarwinPl
334
395
final String name;
335
396
final String ? pluginClass;
336
397
final String ? dartPluginClass;
398
+ final String ? dartFileName;
337
399
final bool ffiPlugin;
338
400
final String ? defaultPackage;
339
401
@@ -357,6 +419,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin, DarwinPl
357
419
'name' : name,
358
420
if (pluginClass != null ) 'class' : pluginClass,
359
421
if (dartPluginClass != null ) kDartPluginClass: dartPluginClass,
422
+ if (dartFileName != null ) kDartFileName: dartFileName,
360
423
if (ffiPlugin) kFfiPlugin: true ,
361
424
if (sharedDarwinSource) kSharedDarwinSource: true ,
362
425
if (defaultPackage != null ) kDefaultPackage: defaultPackage,
@@ -368,12 +431,15 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin, DarwinPl
368
431
///
369
432
/// The [name] of the plugin is required. Either [dartPluginClass] or [pluginClass] are required.
370
433
/// [pluginClass] will be the entry point to the plugin's native code.
434
+ /// [dartFileName] is not required and will be used only if [dartPluginClass]
435
+ /// provided.
371
436
class WindowsPlugin extends PluginPlatform
372
437
implements NativeOrDartPlugin , VariantPlatformPlugin {
373
438
const WindowsPlugin ({
374
439
required this .name,
375
440
this .pluginClass,
376
441
this .dartPluginClass,
442
+ this .dartFileName,
377
443
bool ? ffiPlugin,
378
444
this .defaultPackage,
379
445
this .variants = const < PluginPlatformVariant > {},
@@ -405,10 +471,18 @@ class WindowsPlugin extends PluginPlatform
405
471
// future non-breaking.
406
472
}
407
473
}
474
+
475
+ final String ? dartPluginClass = yaml[kDartPluginClass] as String ? ;
476
+ final String ? dartFileName = yaml[kDartFileName] as String ? ;
477
+
478
+ if (dartPluginClass == null && dartFileName != null ) {
479
+ throwToolExit ('"dartFileName" cannot be specified without "dartPluginClass" in Windows platform of plugin "$name "' );
480
+ }
408
481
return WindowsPlugin (
409
482
name: name,
410
483
pluginClass: pluginClass,
411
- dartPluginClass: yaml[kDartPluginClass] as String ? ,
484
+ dartPluginClass: dartPluginClass,
485
+ dartFileName: dartFileName,
412
486
ffiPlugin: yaml[kFfiPlugin] as bool ? ,
413
487
defaultPackage: yaml[kDefaultPackage] as String ? ,
414
488
variants: variants,
@@ -427,6 +501,7 @@ class WindowsPlugin extends PluginPlatform
427
501
final String name;
428
502
final String ? pluginClass;
429
503
final String ? dartPluginClass;
504
+ final String ? dartFileName;
430
505
final bool ffiPlugin;
431
506
final String ? defaultPackage;
432
507
final Set <PluginPlatformVariant > variants;
@@ -450,6 +525,7 @@ class WindowsPlugin extends PluginPlatform
450
525
if (pluginClass != null ) 'class' : pluginClass,
451
526
if (pluginClass != null ) 'filename' : _filenameForCppClass (pluginClass! ),
452
527
if (dartPluginClass != null ) kDartPluginClass: dartPluginClass,
528
+ if (dartFileName != null ) kDartFileName: dartFileName,
453
529
if (ffiPlugin) kFfiPlugin: true ,
454
530
if (defaultPackage != null ) kDefaultPackage: defaultPackage,
455
531
};
@@ -460,23 +536,39 @@ class WindowsPlugin extends PluginPlatform
460
536
///
461
537
/// The [name] of the plugin is required. Either [dartPluginClass] or [pluginClass] are required.
462
538
/// [pluginClass] will be the entry point to the plugin's native code.
539
+ /// [dartFileName] is not required and will be used only if [dartPluginClass]
540
+ /// provided.
463
541
class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
464
542
const LinuxPlugin ({
465
543
required this .name,
466
544
this .pluginClass,
467
545
this .dartPluginClass,
546
+ this .dartFileName,
468
547
bool ? ffiPlugin,
469
548
this .defaultPackage,
470
549
}) : ffiPlugin = ffiPlugin ?? false ,
471
550
assert (pluginClass != null || dartPluginClass != null || (ffiPlugin ?? false ) || defaultPackage != null );
472
551
473
- LinuxPlugin .fromYaml (this .name, YamlMap yaml)
474
- : assert (validate (yaml)),
475
- // Treat 'none' as not present. See https://github.com/flutter/flutter/issues/57497.
476
- pluginClass = yaml[kPluginClass] == 'none' ? null : yaml[kPluginClass] as String ? ,
477
- dartPluginClass = yaml[kDartPluginClass] as String ? ,
478
- ffiPlugin = yaml[kFfiPlugin] as bool ? ?? false ,
479
- defaultPackage = yaml[kDefaultPackage] as String ? ;
552
+ factory LinuxPlugin .fromYaml (String name, YamlMap yaml) {
553
+ assert (validate (yaml));
554
+
555
+ final String ? dartPluginClass = yaml[kDartPluginClass] as String ? ;
556
+ final String ? dartFileName = yaml[kDartFileName] as String ? ;
557
+
558
+ if (dartPluginClass == null && dartFileName != null ) {
559
+ throwToolExit ('"dartFileName" cannot be specified without "dartPluginClass" in Linux platform of plugin "$name "' );
560
+ }
561
+
562
+ return LinuxPlugin (
563
+ name: name,
564
+ // Treat 'none' as not present. See https://github.com/flutter/flutter/issues/57497.
565
+ pluginClass: yaml[kPluginClass] == 'none' ? null : yaml[kPluginClass] as String ? ,
566
+ dartPluginClass: dartPluginClass,
567
+ dartFileName: dartFileName,
568
+ ffiPlugin: yaml[kFfiPlugin] as bool ? ?? false ,
569
+ defaultPackage: yaml[kDefaultPackage] as String ? ,
570
+ );
571
+ }
480
572
481
573
static bool validate (YamlMap yaml) {
482
574
return yaml[kPluginClass] is String ||
@@ -490,6 +582,7 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
490
582
final String name;
491
583
final String ? pluginClass;
492
584
final String ? dartPluginClass;
585
+ final String ? dartFileName;
493
586
final bool ffiPlugin;
494
587
final String ? defaultPackage;
495
588
@@ -509,6 +602,7 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
509
602
if (pluginClass != null ) 'class' : pluginClass,
510
603
if (pluginClass != null ) 'filename' : _filenameForCppClass (pluginClass! ),
511
604
if (dartPluginClass != null ) kDartPluginClass: dartPluginClass,
605
+ if (dartFileName != null ) kDartFileName: dartFileName,
512
606
if (ffiPlugin) kFfiPlugin: true ,
513
607
if (defaultPackage != null ) kDefaultPackage: defaultPackage,
514
608
};
0 commit comments