Reland: Always use new plugin schema for plugin template (#49832)
Now that the new schema is supported on the stable channel, and the old
schema is considered legacy, the template should always create plugins
using the new schema.
diff --git a/dev/devicelab/bin/tasks/gradle_non_android_plugin_test.dart b/dev/devicelab/bin/tasks/gradle_non_android_plugin_test.dart
index 16a6035..e993768 100644
--- a/dev/devicelab/bin/tasks/gradle_non_android_plugin_test.dart
+++ b/dev/devicelab/bin/tasks/gradle_non_android_plugin_test.dart
@@ -50,15 +50,20 @@
final String pubspecString = pubspecFile.readAsStringSync();
final StringBuffer iosOnlyPubspec = StringBuffer();
+ bool inAndroidSection = false;
+ const String pluginPlatformIndentation = ' ';
for (final String line in pubspecString.split('\n')) {
- if (line.startsWith(' androidPackage:')) {
+ // Skip everything in the Android section of the plugin platforms list.
+ if (line.startsWith('${pluginPlatformIndentation}android:')) {
+ inAndroidSection = true;
continue;
}
- if (line.startsWith(' pluginClass:')) {
- iosOnlyPubspec.write(' platforms:\n');
- iosOnlyPubspec.write(' ios:\n');
- iosOnlyPubspec.write(' pluginClass: IosOnlyPlugin\n');
- continue;
+ if (inAndroidSection) {
+ if (line.startsWith('$pluginPlatformIndentation ')) {
+ continue;
+ } else {
+ inAndroidSection = false;
+ }
}
iosOnlyPubspec.write('$line\n');
}
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 71a3973..095d1db 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -642,10 +642,6 @@
'web': web,
'macos': macos,
'year': DateTime.now().year,
- // For now, the new plugin schema is only used when a desktop plugin is
- // enabled. Once the new schema is supported on stable, this should be
- // removed, and the new schema should always be used.
- 'useNewPluginSchema': macos,
// If a desktop platform is included, add a workaround for #31366.
// When Linux and Windows are added, we will need this workaround again.
'includeTargetPlatformWorkaround': false,
diff --git a/packages/flutter_tools/templates/plugin/pubspec.yaml.tmpl b/packages/flutter_tools/templates/plugin/pubspec.yaml.tmpl
index 9408d34..9551c9c 100644
--- a/packages/flutter_tools/templates/plugin/pubspec.yaml.tmpl
+++ b/packages/flutter_tools/templates/plugin/pubspec.yaml.tmpl
@@ -6,6 +6,7 @@
environment:
sdk: ">=2.1.0 <3.0.0"
+ flutter: ">=1.10.0"
dependencies:
flutter:
@@ -21,23 +22,9 @@
# The following section is specific to Flutter.
flutter:
# This section identifies this Flutter project as a plugin project.
-{{^useNewPluginSchema}}
- # The androidPackage and pluginClass identifiers should not ordinarily
- # be modified. They are used by the tooling to maintain consistency when
- # adding or updating assets for this project.
- plugin:
- androidPackage: {{androidIdentifier}}
- pluginClass: {{pluginClass}}
-{{/useNewPluginSchema}}
-{{#useNewPluginSchema}}
# The 'pluginClass' and Android 'package' identifiers should not ordinarily
# be modified. They are used by the tooling to maintain consistency when
# adding or updating assets for this project.
- #
- # NOTE: This new plugin description format is not supported on Flutter's
- # stable channel as of 1.9.1. A plugin published using this format will not
- # work for most clients until the next major stable release.
- # However, it is required in order to declare macOS support.
plugin:
platforms:
android:
@@ -45,9 +32,10 @@
pluginClass: {{pluginClass}}
ios:
pluginClass: {{pluginClass}}
+{{#macos}}
macos:
pluginClass: {{pluginClass}}
-{{/useNewPluginSchema}}
+{{/macos}}
# To add assets to your plugin package, add an assets section, like this:
# assets:
diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
index d80fdbf..ed086f5 100644
--- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
+++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
@@ -645,6 +645,21 @@
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: false),
});
+ testUsingContext('plugin uses new platform schema', () async {
+ Cache.flutterRoot = '../..';
+ when(mockFlutterVersion.frameworkRevision).thenReturn(frameworkRevision);
+ when(mockFlutterVersion.channel).thenReturn(frameworkChannel);
+
+ final CreateCommand command = CreateCommand();
+ final CommandRunner<void> runner = createTestCommandRunner(command);
+
+ await runner.run(<String>['create', '--no-pub', '--template=plugin', projectDir.path]);
+
+ final String pubspecContents = await globals.fs.directory(projectDir.path).childFile('pubspec.yaml').readAsString();
+
+ expect(pubspecContents.contains('platforms:'), true);
+ });
+
testUsingContext('has correct content and formatting with module template', () async {
Cache.flutterRoot = '../..';
when(mockFlutterVersion.frameworkRevision).thenReturn(frameworkRevision);