diff --git a/packages/flutter_tools/lib/src/flutter_plugins.dart b/packages/flutter_tools/lib/src/flutter_plugins.dart index 6d4c0eb057..524a84a5c1 100644 --- a/packages/flutter_tools/lib/src/flutter_plugins.dart +++ b/packages/flutter_tools/lib/src/flutter_plugins.dart @@ -1250,37 +1250,51 @@ Future injectPlugins( bool windowsPlatform = false, DarwinDependencyManagement? darwinDependencyManagement, }) async { - List plugins = await findPlugins(project); + final List plugins = await findPlugins(project); + // Filter out dev dependencies for release builds. + final List filteredPlugins; if (releaseMode) { - plugins = plugins.where((Plugin p) => !p.isDevDependency).toList(); + filteredPlugins = plugins.where((Plugin p) => !p.isDevDependency).toList(); + } else { + filteredPlugins = plugins; } - final Map> pluginsByPlatform = _resolvePluginImplementations( - plugins, + final Map> filteredPluginsByPlatform = _resolvePluginImplementations( + filteredPlugins, pluginResolutionType: _PluginResolutionType.nativeOrDart, ); if (androidPlatform) { - await _writeAndroidPluginRegistrant(project, pluginsByPlatform[AndroidPlugin.kConfigKey]!); - } - if (iosPlatform) { - await _writeIOSPluginRegistrant(project, pluginsByPlatform[IOSPlugin.kConfigKey]!); + await _writeAndroidPluginRegistrant( + project, + filteredPluginsByPlatform[AndroidPlugin.kConfigKey]!, + ); } if (linuxPlatform) { - await _writeLinuxPluginFiles(project, pluginsByPlatform[LinuxPlugin.kConfigKey]!); - } - if (macOSPlatform) { - await _writeMacOSPluginRegistrant(project, pluginsByPlatform[MacOSPlugin.kConfigKey]!); + await _writeLinuxPluginFiles(project, filteredPluginsByPlatform[LinuxPlugin.kConfigKey]!); } if (windowsPlatform) { await writeWindowsPluginFiles( project, - pluginsByPlatform[WindowsPlugin.kConfigKey]!, + filteredPluginsByPlatform[WindowsPlugin.kConfigKey]!, globals.templateRenderer, ); } + if (iosPlatform || macOSPlatform) { + // iOS and macOS doesn't yet support filtering out dev dependencies. + // See https://github.com/flutter/flutter/issues/163874. + final Map> pluginsByPlatform = _resolvePluginImplementations( + plugins, + pluginResolutionType: _PluginResolutionType.nativeOrDart, + ); + if (iosPlatform) { + await _writeIOSPluginRegistrant(project, pluginsByPlatform[IOSPlugin.kConfigKey]!); + } + if (macOSPlatform) { + await _writeMacOSPluginRegistrant(project, pluginsByPlatform[MacOSPlugin.kConfigKey]!); + } final DarwinDependencyManagement darwinDependencyManagerSetup = darwinDependencyManagement ?? DarwinDependencyManagement( diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index f46164129a..f186c49c69 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -2649,7 +2649,7 @@ flutter: ); testUsingContext( - 'excludes dev dependencies from iOS plugin registrant', + 'includes dev dependencies from iOS plugin registrant', () async { createPlugin( name: testPluginName, @@ -2682,7 +2682,7 @@ flutter: releaseMode: true, ); expect(generatedPluginRegistrantImpl, exists); - expect(generatedPluginRegistrantImpl.readAsStringSync(), isNot(contains(devDepImport))); + expect(generatedPluginRegistrantImpl.readAsStringSync(), contains(devDepImport)); }, overrides: { FileSystem: () => fs, @@ -2729,7 +2729,7 @@ flutter: ); testUsingContext( - 'excludes dev dependencies from MacOS plugin registrant', + 'includes dev dependencies from MacOS plugin registrant', () async { createPlugin( name: testPluginName, @@ -2767,7 +2767,7 @@ flutter: expect(generatedPluginRegistrant, exists); expect( generatedPluginRegistrant.readAsStringSync(), - isNot(contains(expectedDevDepRegistration)), + contains(expectedDevDepRegistration), ); }, overrides: {