diff --git a/packages/flutter_tools/lib/src/platform_plugins.dart b/packages/flutter_tools/lib/src/platform_plugins.dart index b98b5ee26176..382771825394 100644 --- a/packages/flutter_tools/lib/src/platform_plugins.dart +++ b/packages/flutter_tools/lib/src/platform_plugins.dart @@ -214,9 +214,14 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin { factory MacOSPlugin.fromYaml(String name, YamlMap yaml) { assert(validate(yaml)); + // Treat 'none' as not present. See https://github.com/flutter/flutter/issues/57497. + String pluginClass = yaml[kPluginClass] as String; + if (pluginClass == 'none') { + pluginClass = null; + } return MacOSPlugin( name: name, - pluginClass: yaml[kPluginClass] as String, + pluginClass: pluginClass, dartPluginClass: yaml[kDartPluginClass] as String, ); } @@ -260,9 +265,14 @@ class WindowsPlugin extends PluginPlatform implements NativeOrDartPlugin{ factory WindowsPlugin.fromYaml(String name, YamlMap yaml) { assert(validate(yaml)); + // Treat 'none' as not present. See https://github.com/flutter/flutter/issues/57497. + String pluginClass = yaml[kPluginClass] as String; + if (pluginClass == 'none') { + pluginClass = null; + } return WindowsPlugin( name: name, - pluginClass: yaml[kPluginClass] as String, + pluginClass: pluginClass, dartPluginClass: yaml[kDartPluginClass] as String, ); } @@ -307,9 +317,14 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin { factory LinuxPlugin.fromYaml(String name, YamlMap yaml) { assert(validate(yaml)); + // Treat 'none' as not present. See https://github.com/flutter/flutter/issues/57497. + String pluginClass = yaml[kPluginClass] as String; + if (pluginClass == 'none') { + pluginClass = null; + } return LinuxPlugin( name: name, - pluginClass: yaml[kPluginClass] as String, + pluginClass: pluginClass, dartPluginClass: yaml[kDartPluginClass] as String, ); } diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index 4c2aecd486bd..a2674ca3a957 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -914,6 +914,35 @@ flutter: FeatureFlags: () => featureFlags, }); + testUsingContext('pluginClass: none doesn\'t trigger registrant entry on macOS', () async { + when(macosProject.existsSync()).thenReturn(true); + when(featureFlags.isMacOSEnabled).thenReturn(true); + when(flutterProject.isModule).thenReturn(true); + // Create a plugin without a pluginClass. + dummyPackageDirectory.parent.childFile('pubspec.yaml') + ..createSync(recursive: true) + ..writeAsStringSync(''' +flutter: + plugin: + platforms: + macos: + pluginClass: none + dartPluginClass: SomePlugin + '''); + + await injectPlugins(flutterProject, checkProjects: true); + + final File registrantFile = macosProject.managedDirectory.childFile('GeneratedPluginRegistrant.swift'); + + expect(registrantFile, exists); + expect(registrantFile, isNot(contains('SomePlugin'))); + expect(registrantFile, isNot(contains('none'))); + }, overrides: { + FileSystem: () => fs, + ProcessManager: () => FakeProcessManager.any(), + FeatureFlags: () => featureFlags, + }); + testUsingContext('Injecting creates generated Linux registrant', () async { when(linuxProject.existsSync()).thenReturn(true); when(featureFlags.isLinuxEnabled).thenReturn(true); @@ -961,6 +990,35 @@ flutter: FeatureFlags: () => featureFlags, }); + testUsingContext('pluginClass: none doesn\'t trigger registrant entry on Linux', () async { + when(linuxProject.existsSync()).thenReturn(true); + when(featureFlags.isLinuxEnabled).thenReturn(true); + when(flutterProject.isModule).thenReturn(false); + // Create a plugin without a pluginClass. + dummyPackageDirectory.parent.childFile('pubspec.yaml') + ..createSync(recursive: true) + ..writeAsStringSync(''' +flutter: + plugin: + platforms: + linux: + pluginClass: none + dartPluginClass: SomePlugin + '''); + + await injectPlugins(flutterProject, checkProjects: true); + + final File registrantImpl = linuxProject.managedDirectory.childFile('generated_plugin_registrant.cc'); + + expect(registrantImpl, exists); + expect(registrantImpl, isNot(contains('SomePlugin'))); + expect(registrantImpl, isNot(contains('none'))); + }, overrides: { + FileSystem: () => fs, + ProcessManager: () => FakeProcessManager.any(), + FeatureFlags: () => featureFlags, + }); + testUsingContext('Injecting creates generated Linux plugin Cmake file', () async { when(linuxProject.existsSync()).thenReturn(true); when(featureFlags.isLinuxEnabled).thenReturn(true); @@ -1034,6 +1092,38 @@ flutter: FeatureFlags: () => featureFlags, }); + testUsingContext('pluginClass: none doesn\'t trigger registrant entry on Windows', () async { + when(windowsProject.existsSync()).thenReturn(true); + when(featureFlags.isWindowsEnabled).thenReturn(true); + when(flutterProject.isModule).thenReturn(false); + // Create a plugin without a pluginClass. + dummyPackageDirectory.parent.childFile('pubspec.yaml') + ..createSync(recursive: true) + ..writeAsStringSync(''' +flutter: + plugin: + platforms: + windows: + pluginClass: none + dartPluginClass: SomePlugin + '''); + + createDummyWindowsSolutionFile(); + createDummyPluginWindowsProjectFile(); + + await injectPlugins(flutterProject, checkProjects: true); + + final File registrantImpl = windowsProject.managedDirectory.childFile('generated_plugin_registrant.cc'); + + expect(registrantImpl, exists); + expect(registrantImpl, isNot(contains('SomePlugin'))); + expect(registrantImpl, isNot(contains('none'))); + }, overrides: { + FileSystem: () => fs, + ProcessManager: () => FakeProcessManager.any(), + FeatureFlags: () => featureFlags, + }); + testUsingContext('Injecting creates generated Windows plugin properties', () async { when(windowsProject.existsSync()).thenReturn(true); when(featureFlags.isWindowsEnabled).thenReturn(true);