@@ -9,13 +9,25 @@ import 'base/common.dart';
9
9
import 'base/file_system.dart' ;
10
10
import 'globals.dart' as globals;
11
11
12
+ /// Constant for 'pluginClass' key in plugin maps.
13
+ const String kPluginClass = 'pluginClass' ;
14
+
15
+ /// Constant for 'pluginClass' key in plugin maps.
16
+ const String kDartPluginClass = 'dartPluginClass' ;
17
+
12
18
/// Marker interface for all platform specific plugin config impls.
13
19
abstract class PluginPlatform {
14
20
const PluginPlatform ();
15
21
16
22
Map <String , dynamic > toMap ();
17
23
}
18
24
25
+ abstract class NativeOrDartPlugin {
26
+ /// Determines whether the plugin has a native implementation or if it's a
27
+ /// Dart-only plugin.
28
+ bool isNative ();
29
+ }
30
+
19
31
/// Contains parameters to template an Android plugin.
20
32
///
21
33
/// The required fields include: [name] of the plugin, [package] of the plugin and
@@ -191,119 +203,140 @@ class IOSPlugin extends PluginPlatform {
191
203
192
204
/// Contains the parameters to template a macOS plugin.
193
205
///
194
- /// The required fields include: [name] of the plugin, and [ pluginClass] that will
195
- /// be the entry point to the plugin's native code.
196
- class MacOSPlugin extends PluginPlatform {
206
+ /// The [name] of the plugin is required. Either [dartPluginClass] or [ pluginClass] are required.
207
+ /// [pluginClass] will be the entry point to the plugin's native code.
208
+ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
197
209
const MacOSPlugin ({
198
210
@required this .name,
199
- @required this .pluginClass,
211
+ this .pluginClass,
212
+ this .dartPluginClass,
200
213
});
201
214
202
215
factory MacOSPlugin .fromYaml (String name, YamlMap yaml) {
203
216
assert (validate (yaml));
204
217
return MacOSPlugin (
205
218
name: name,
206
- pluginClass: yaml['pluginClass' ] as String ,
219
+ pluginClass: yaml[kPluginClass] as String ,
220
+ dartPluginClass: yaml[kDartPluginClass] as String ,
207
221
);
208
222
}
209
223
210
224
static bool validate (YamlMap yaml) {
211
225
if (yaml == null ) {
212
226
return false ;
213
227
}
214
- return yaml['pluginClass' ] is String ;
228
+ return yaml[kPluginClass] is String || yaml[kDartPluginClass ] is String ;
215
229
}
216
230
217
231
static const String kConfigKey = 'macos' ;
218
232
219
233
final String name;
220
234
final String pluginClass;
235
+ final String dartPluginClass;
236
+
237
+ @override
238
+ bool isNative () => pluginClass != null ;
221
239
222
240
@override
223
241
Map <String , dynamic > toMap () {
224
242
return < String , dynamic > {
225
243
'name' : name,
226
- 'class' : pluginClass,
244
+ if (pluginClass != null ) 'class' : pluginClass,
245
+ if (dartPluginClass != null ) 'dartPluginClass' : dartPluginClass,
227
246
};
228
247
}
229
248
}
230
249
231
250
/// Contains the parameters to template a Windows plugin.
232
251
///
233
- /// The required fields include: [name] of the plugin, and [ pluginClass] that will
234
- /// be the entry point to the plugin's native code.
235
- class WindowsPlugin extends PluginPlatform {
252
+ /// The [name] of the plugin is required. Either [dartPluginClass] or [ pluginClass] are required.
253
+ /// [pluginClass] will be the entry point to the plugin's native code.
254
+ class WindowsPlugin extends PluginPlatform implements NativeOrDartPlugin {
236
255
const WindowsPlugin ({
237
256
@required this .name,
238
- @required this .pluginClass,
239
- });
257
+ this .pluginClass,
258
+ this .dartPluginClass,
259
+ }) : assert (pluginClass != null || dartPluginClass != null );
240
260
241
261
factory WindowsPlugin .fromYaml (String name, YamlMap yaml) {
242
262
assert (validate (yaml));
243
263
return WindowsPlugin (
244
264
name: name,
245
- pluginClass: yaml['pluginClass' ] as String ,
265
+ pluginClass: yaml[kPluginClass] as String ,
266
+ dartPluginClass: yaml[kDartPluginClass] as String ,
246
267
);
247
268
}
248
269
249
270
static bool validate (YamlMap yaml) {
250
271
if (yaml == null ) {
251
272
return false ;
252
273
}
253
- return yaml['pluginClass' ] is String ;
274
+ return yaml[kDartPluginClass] is String || yaml[kPluginClass ] is String ;
254
275
}
255
276
256
277
static const String kConfigKey = 'windows' ;
257
278
258
279
final String name;
259
280
final String pluginClass;
281
+ final String dartPluginClass;
282
+
283
+ @override
284
+ bool isNative () => pluginClass != null ;
260
285
261
286
@override
262
287
Map <String , dynamic > toMap () {
263
288
return < String , dynamic > {
264
289
'name' : name,
265
- 'class' : pluginClass,
266
- 'filename' : _filenameForCppClass (pluginClass),
290
+ if (pluginClass != null ) 'class' : pluginClass,
291
+ if (pluginClass != null ) 'filename' : _filenameForCppClass (pluginClass),
292
+ if (dartPluginClass != null ) 'dartPluginClass' : dartPluginClass,
267
293
};
268
294
}
269
295
}
270
296
271
297
/// Contains the parameters to template a Linux plugin.
272
298
///
273
- /// The required fields include: [name] of the plugin, and [ pluginClass] that will
274
- /// be the entry point to the plugin's native code.
275
- class LinuxPlugin extends PluginPlatform {
299
+ /// The [name] of the plugin is required. Either [dartPluginClass] or [ pluginClass] are required.
300
+ /// [pluginClass] will be the entry point to the plugin's native code.
301
+ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
276
302
const LinuxPlugin ({
277
303
@required this .name,
278
- @required this .pluginClass,
279
- });
304
+ this .pluginClass,
305
+ this .dartPluginClass,
306
+ }) : assert (pluginClass != null || dartPluginClass != null );
280
307
281
308
factory LinuxPlugin .fromYaml (String name, YamlMap yaml) {
282
309
assert (validate (yaml));
283
310
return LinuxPlugin (
284
311
name: name,
285
- pluginClass: yaml['pluginClass' ] as String ,
312
+ pluginClass: yaml[kPluginClass] as String ,
313
+ dartPluginClass: yaml[kDartPluginClass] as String ,
286
314
);
287
315
}
288
316
289
317
static bool validate (YamlMap yaml) {
290
318
if (yaml == null ) {
291
319
return false ;
292
320
}
293
- return yaml['pluginClass' ] is String ;
321
+ return yaml[kPluginClass] is String || yaml[kDartPluginClass ] is String ;
294
322
}
295
323
296
324
static const String kConfigKey = 'linux' ;
297
325
298
326
final String name;
299
327
final String pluginClass;
328
+ final String dartPluginClass;
329
+
330
+ @override
331
+ bool isNative () => pluginClass != null ;
300
332
301
333
@override
302
334
Map <String , dynamic > toMap () {
303
335
return < String , dynamic > {
304
336
'name' : name,
305
- 'class' : pluginClass,
306
- 'filename' : _filenameForCppClass (pluginClass),
337
+ if (pluginClass != null ) 'class' : pluginClass,
338
+ if (pluginClass != null ) 'filename' : _filenameForCppClass (pluginClass),
339
+ if (dartPluginClass != null ) 'dartPluginClass' : dartPluginClass,
307
340
};
308
341
}
309
342
}
0 commit comments