diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart index 8a28411340..8a1a1e29da 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart @@ -317,7 +317,11 @@ class FlutterCommandRunner extends CommandRunner { globals.flutterVersion.fetchTagsAndUpdate(); String status; if (machineFlag) { - status = const JsonEncoder.withIndent(' ').convert(globals.flutterVersion.toJson()); + final Map jsonOut = globals.flutterVersion.toJson(); + if (jsonOut != null) { + jsonOut['flutterRoot'] = Cache.flutterRoot; + } + status = const JsonEncoder.withIndent(' ').convert(jsonOut); } else { status = globals.flutterVersion.toString(); } diff --git a/packages/flutter_tools/test/integration.shard/command_output_test.dart b/packages/flutter_tools/test/integration.shard/command_output_test.dart index 8694462fe5..eee4f3fdeb 100644 --- a/packages/flutter_tools/test/integration.shard/command_output_test.dart +++ b/packages/flutter_tools/test/integration.shard/command_output_test.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:convert'; + import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/features.dart'; @@ -128,4 +130,21 @@ void main() { // Only printed by verbose tool. expect(result.stdout, isNot(contains('exiting with code 0'))); }); + + test('flutter --version --machine outputs JSON with flutterRoot', () async { + final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter'); + final ProcessResult result = await const LocalProcessManager().run([ + flutterBin, + '--version', + '--machine', + ]); + + final Map versionInfo = json.decode(result.stdout + .toString() + .replaceAll('Building flutter tool...', '') + .replaceAll('Waiting for another flutter command to release the startup lock...', '') + .trim()) as Map; + + expect(versionInfo, containsPair('flutterRoot', isNotNull)); + }); }