diff --git a/packages/flutter_tools/lib/src/commands/config.dart b/packages/flutter_tools/lib/src/commands/config.dart index f67b9c995bc6..17cb578dac0c 100644 --- a/packages/flutter_tools/lib/src/commands/config.dart +++ b/packages/flutter_tools/lib/src/commands/config.dart @@ -101,6 +101,16 @@ class ConfigCommand extends FlutterCommand { @override Future runCommand() async { + final List rest = argResults?.rest ?? []; + if (rest.isNotEmpty) { + throwToolExit(exitCode: 2, + 'error: flutter config: Too many arguments.\n' + '\n' + 'If a value has a space in it, enclose in quotes on the command line\n' + 'to make a single argument. For example:\n' + ' flutter config --android-studio-dir "/opt/Android Studio"'); + } + if (boolArgDeprecated('machine')) { await handleMachine(); return FlutterCommandResult.success(); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart index 43a06e515aff..98f40c48f0b2 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart @@ -44,6 +44,19 @@ void main() { } group('config', () { + testUsingContext('throws error on excess arguments', () { + final ConfigCommand configCommand = ConfigCommand(); + final CommandRunner commandRunner = createTestCommandRunner(configCommand); + + expect(() => commandRunner.run([ + 'config', + '--android-studio-dir=/opt/My', 'Android', 'Studio', + ]), throwsToolExit()); + verifyNoAnalytics(); + }, overrides: { + Usage: () => testUsage, + }); + testUsingContext('machine flag', () async { final ConfigCommand command = ConfigCommand(); await command.handleMachine();