[flutter_tools] Restore base/platform.dart (#56410)

diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 90065eb..9695442 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -3,11 +3,11 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import '../base/common.dart';
 import '../base/file_system.dart';
 import '../base/os.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../base/version.dart';
 import '../convert.dart';
diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart
index 8202377..08ae426 100644
--- a/packages/flutter_tools/lib/src/android/android_workflow.dart
+++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../base/common.dart';
@@ -14,6 +13,7 @@
 import '../base/io.dart';
 import '../base/logger.dart';
 import '../base/os.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../base/user_messages.dart';
 import '../base/utils.dart';
diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart
index 52c45bd..b15cd7e 100644
--- a/packages/flutter_tools/lib/src/artifacts.dart
+++ b/packages/flutter_tools/lib/src/artifacts.dart
@@ -3,10 +3,10 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import 'base/file_system.dart';
+import 'base/platform.dart';
 import 'base/utils.dart';
 import 'build_info.dart';
 import 'cache.dart';
diff --git a/packages/flutter_tools/lib/src/base/bot_detector.dart b/packages/flutter_tools/lib/src/base/bot_detector.dart
index 2124a40..633916d 100644
--- a/packages/flutter_tools/lib/src/base/bot_detector.dart
+++ b/packages/flutter_tools/lib/src/base/bot_detector.dart
@@ -5,11 +5,11 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import '../persistent_tool_state.dart';
 import 'io.dart';
 import 'net.dart';
+import 'platform.dart';
 
 class BotDetector {
   BotDetector({
diff --git a/packages/flutter_tools/lib/src/base/command_help.dart b/packages/flutter_tools/lib/src/base/command_help.dart
index 28cbdc8..8886659 100644
--- a/packages/flutter_tools/lib/src/base/command_help.dart
+++ b/packages/flutter_tools/lib/src/base/command_help.dart
@@ -5,9 +5,9 @@
 import 'dart:math' as math;
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import 'logger.dart';
+import 'platform.dart';
 import 'terminal.dart';
 
 // ignore_for_file: non_constant_identifier_names
diff --git a/packages/flutter_tools/lib/src/base/config.dart b/packages/flutter_tools/lib/src/base/config.dart
index 77cc2b9..3a3b6ac 100644
--- a/packages/flutter_tools/lib/src/base/config.dart
+++ b/packages/flutter_tools/lib/src/base/config.dart
@@ -3,11 +3,11 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import '../convert.dart';
 import 'file_system.dart';
 import 'logger.dart';
+import 'platform.dart';
 import 'utils.dart';
 
 /// A class to abstract configuration files.
diff --git a/packages/flutter_tools/lib/src/base/error_handling_file_system.dart b/packages/flutter_tools/lib/src/base/error_handling_file_system.dart
index c879a62..c039adc 100644
--- a/packages/flutter_tools/lib/src/base/error_handling_file_system.dart
+++ b/packages/flutter_tools/lib/src/base/error_handling_file_system.dart
@@ -8,9 +8,9 @@
 import 'package:file/file.dart';
 import 'package:meta/meta.dart';
 import 'package:path/path.dart' as p; // ignore: package_path_import
-import 'package:platform/platform.dart';
 
 import 'common.dart' show throwToolExit;
+import 'platform.dart';
 
 // The Flutter tool hits file system errors that only the end-user can address.
 // We would like these errors to not hit crash logging. In these cases, we
diff --git a/packages/flutter_tools/lib/src/base/file_system.dart b/packages/flutter_tools/lib/src/base/file_system.dart
index 39d5cc6..9b5c9c1 100644
--- a/packages/flutter_tools/lib/src/base/file_system.dart
+++ b/packages/flutter_tools/lib/src/base/file_system.dart
@@ -4,9 +4,9 @@
 
 import 'package:file/file.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import 'common.dart' show throwToolExit;
+import 'platform.dart';
 
 export 'package:file/file.dart';
 export 'package:file/local.dart';
diff --git a/packages/flutter_tools/lib/src/base/net.dart b/packages/flutter_tools/lib/src/base/net.dart
index b72ac5b..7bff3c4 100644
--- a/packages/flutter_tools/lib/src/base/net.dart
+++ b/packages/flutter_tools/lib/src/base/net.dart
@@ -5,13 +5,13 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import '../convert.dart';
 import 'common.dart';
 import 'file_system.dart';
 import 'io.dart';
 import 'logger.dart';
+import 'platform.dart';
 
 const int kNetworkProblemExitCode = 50;
 
diff --git a/packages/flutter_tools/lib/src/base/os.dart b/packages/flutter_tools/lib/src/base/os.dart
index f4e8399..2f7e242 100644
--- a/packages/flutter_tools/lib/src/base/os.dart
+++ b/packages/flutter_tools/lib/src/base/os.dart
@@ -5,13 +5,13 @@
 import 'package:archive/archive.dart';
 import 'package:file/file.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../globals.dart' as globals;
 import 'file_system.dart';
 import 'io.dart';
 import 'logger.dart';
+import 'platform.dart';
 import 'process.dart';
 
 abstract class OperatingSystemUtils {
diff --git a/packages/flutter_tools/lib/src/base/platform.dart b/packages/flutter_tools/lib/src/base/platform.dart
new file mode 100644
index 0000000..0b7883c
--- /dev/null
+++ b/packages/flutter_tools/lib/src/base/platform.dart
@@ -0,0 +1,262 @@
+// Copyright 2014 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:io' as io show Platform, stdin, stdout;
+
+/// Provides API parity with the `Platform` class in `dart:io`, but using
+/// instance properties rather than static properties. This difference enables
+/// the use of these APIs in tests, where you can provide mock implementations.
+abstract class Platform {
+  /// Creates a new [Platform].
+  const Platform();
+
+  /// The number of processors of the machine.
+  int get numberOfProcessors;
+
+  /// The path separator used by the operating system to separate
+  /// components in file paths.
+  String get pathSeparator;
+
+  /// A string (`linux`, `macos`, `windows`, `android`, `ios`, or `fuchsia`)
+  /// representing the operating system.
+  String get operatingSystem;
+
+  /// A string representing the version of the operating system or platform.
+  String get operatingSystemVersion;
+
+  /// Get the local hostname for the system.
+  String get localHostname;
+
+  /// True if the operating system is Linux.
+  bool get isLinux => operatingSystem == 'linux';
+
+  /// True if the operating system is OS X.
+  bool get isMacOS => operatingSystem == 'macos';
+
+  /// True if the operating system is Windows.
+  bool get isWindows => operatingSystem == 'windows';
+
+  /// True if the operating system is Android.
+  bool get isAndroid => operatingSystem == 'android';
+
+  /// True if the operating system is iOS.
+  bool get isIOS => operatingSystem == 'ios';
+
+  /// True if the operating system is Fuchsia
+  bool get isFuchsia => operatingSystem == 'fuchsia';
+
+  /// The environment for this process.
+  ///
+  /// The returned environment is an unmodifiable map whose content is
+  /// retrieved from the operating system on its first use.
+  ///
+  /// Environment variables on Windows are case-insensitive. The map
+  /// returned on Windows is therefore case-insensitive and will convert
+  /// all keys to upper case. On other platforms the returned map is
+  /// a standard case-sensitive map.
+  Map<String, String> get environment;
+
+  /// The path of the executable used to run the script in this isolate.
+  ///
+  /// The path returned is the literal path used to run the script. This
+  /// path might be relative or just be a name from which the executable
+  /// was found by searching the `PATH`.
+  ///
+  /// To get the absolute path to the resolved executable use
+  /// [resolvedExecutable].
+  String get executable;
+
+  /// The path of the executable used to run the script in this
+  /// isolate after it has been resolved by the OS.
+  ///
+  /// This is the absolute path, with all symlinks resolved, to the
+  /// executable used to run the script.
+  String get resolvedExecutable;
+
+  /// The absolute URI of the script being run in this
+  /// isolate.
+  ///
+  /// If the script argument on the command line is relative,
+  /// it is resolved to an absolute URI before fetching the script, and
+  /// this absolute URI is returned.
+  ///
+  /// URI resolution only does string manipulation on the script path, and this
+  /// may be different from the file system's path resolution behavior. For
+  /// example, a symbolic link immediately followed by '..' will not be
+  /// looked up.
+  ///
+  /// If the executable environment does not support [script] an empty
+  /// [Uri] is returned.
+  Uri get script;
+
+  /// The flags passed to the executable used to run the script in this
+  /// isolate. These are the command-line flags between the executable name
+  /// and the script name. Each fetch of `executableArguments` returns a new
+  /// list containing the flags passed to the executable.
+  List<String> get executableArguments;
+
+  /// The value of the `--packages` flag passed to the executable
+  /// used to run the script in this isolate. This is the configuration which
+  /// specifies how Dart packages are looked up.
+  ///
+  /// If there is no `--packages` flag, `null` is returned.
+  String get packageConfig;
+
+  /// The version of the current Dart runtime.
+  ///
+  /// The returned `String` is formatted as the [semver](http://semver.org)
+  /// version string of the current dart runtime, possibly followed by
+  /// whitespace and other version and build details.
+  String get version;
+
+  /// When stdin is connected to a terminal, whether ANSI codes are supported.
+  bool get stdinSupportsAnsi;
+
+  /// When stdout is connected to a terminal, whether ANSI codes are supported.
+  bool get stdoutSupportsAnsi;
+
+  /// Get the name of the current locale.
+  String get localeName;
+}
+
+/// `Platform` implementation that delegates directly to `dart:io`.
+class LocalPlatform extends Platform {
+  /// Creates a new [LocalPlatform].
+  const LocalPlatform();
+
+  @override
+  int get numberOfProcessors => io.Platform.numberOfProcessors;
+
+  @override
+  String get pathSeparator => io.Platform.pathSeparator;
+
+  @override
+  String get operatingSystem => io.Platform.operatingSystem;
+
+  @override
+  String get operatingSystemVersion => io.Platform.operatingSystemVersion;
+
+  @override
+  String get localHostname => io.Platform.localHostname;
+
+  @override
+  Map<String, String> get environment => io.Platform.environment;
+
+  @override
+  String get executable => io.Platform.executable;
+
+  @override
+  String get resolvedExecutable => io.Platform.resolvedExecutable;
+
+  @override
+  Uri get script => io.Platform.script;
+
+  @override
+  List<String> get executableArguments => io.Platform.executableArguments;
+
+  @override
+  String get packageConfig => io.Platform.packageConfig;
+
+  @override
+  String get version => io.Platform.version;
+
+  @override
+  bool get stdinSupportsAnsi => io.stdin.supportsAnsiEscapes;
+
+  @override
+  bool get stdoutSupportsAnsi => io.stdout.supportsAnsiEscapes;
+
+  @override
+  String get localeName => io.Platform.localeName;
+}
+
+/// Provides a mutable implementation of the [Platform] interface.
+class FakePlatform extends Platform {
+  /// Creates a new [FakePlatform] with the specified properties.
+  ///
+  /// Unspecified properties will *not* be assigned default values (they will
+  /// remain `null`).
+  FakePlatform({
+    this.numberOfProcessors,
+    this.pathSeparator,
+    this.operatingSystem,
+    this.operatingSystemVersion,
+    this.localHostname,
+    this.environment,
+    this.executable,
+    this.resolvedExecutable,
+    this.script,
+    this.executableArguments,
+    this.packageConfig,
+    this.version,
+    this.stdinSupportsAnsi,
+    this.stdoutSupportsAnsi,
+    this.localeName,
+  });
+
+  /// Creates a new [FakePlatform] with properties whose initial values mirror
+  /// the specified [platform].
+  FakePlatform.fromPlatform(Platform platform)
+      : numberOfProcessors = platform.numberOfProcessors,
+        pathSeparator = platform.pathSeparator,
+        operatingSystem = platform.operatingSystem,
+        operatingSystemVersion = platform.operatingSystemVersion,
+        localHostname = platform.localHostname,
+        environment = Map<String, String>.from(platform.environment),
+        executable = platform.executable,
+        resolvedExecutable = platform.resolvedExecutable,
+        script = platform.script,
+        executableArguments =
+            List<String>.from(platform.executableArguments),
+        packageConfig = platform.packageConfig,
+        version = platform.version,
+        stdinSupportsAnsi = platform.stdinSupportsAnsi,
+        stdoutSupportsAnsi = platform.stdoutSupportsAnsi,
+        localeName = platform.localeName;
+
+  @override
+  int numberOfProcessors;
+
+  @override
+  String pathSeparator;
+
+  @override
+  String operatingSystem;
+
+  @override
+  String operatingSystemVersion;
+
+  @override
+  String localHostname;
+
+  @override
+  Map<String, String> environment;
+
+  @override
+  String executable;
+
+  @override
+  String resolvedExecutable;
+
+  @override
+  Uri script;
+
+  @override
+  List<String> executableArguments;
+
+  @override
+  String packageConfig;
+
+  @override
+  String version;
+
+  @override
+  bool stdinSupportsAnsi;
+
+  @override
+  bool stdoutSupportsAnsi;
+
+  @override
+  String localeName;
+}
diff --git a/packages/flutter_tools/lib/src/base/terminal.dart b/packages/flutter_tools/lib/src/base/terminal.dart
index 4a85919..bdabd7f 100644
--- a/packages/flutter_tools/lib/src/base/terminal.dart
+++ b/packages/flutter_tools/lib/src/base/terminal.dart
@@ -5,12 +5,12 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import '../convert.dart';
 import '../globals.dart' as globals;
 import 'io.dart' as io;
 import 'logger.dart';
+import 'platform.dart';
 
 enum TerminalColor {
   red,
diff --git a/packages/flutter_tools/lib/src/base/user_messages.dart b/packages/flutter_tools/lib/src/base/user_messages.dart
index 8d9652a..a1a3163 100644
--- a/packages/flutter_tools/lib/src/base/user_messages.dart
+++ b/packages/flutter_tools/lib/src/base/user_messages.dart
@@ -2,9 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'package:platform/platform.dart';
-
 import 'context.dart';
+import 'platform.dart';
 
 UserMessages get userMessages => context.get<UserMessages>();
 
diff --git a/packages/flutter_tools/lib/src/build_system/build_system.dart b/packages/flutter_tools/lib/src/build_system/build_system.dart
index 80840f8..9103f8f 100644
--- a/packages/flutter_tools/lib/src/build_system/build_system.dart
+++ b/packages/flutter_tools/lib/src/build_system/build_system.dart
@@ -8,13 +8,13 @@
 import 'package:convert/convert.dart';
 import 'package:crypto/crypto.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:pool/pool.dart';
 import 'package:process/process.dart';
 
 import '../artifacts.dart';
 import '../base/file_system.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/utils.dart';
 import '../cache.dart';
 import '../convert.dart';
diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart
index cfd6a5e..5f93a55 100644
--- a/packages/flutter_tools/lib/src/cache.dart
+++ b/packages/flutter_tools/lib/src/cache.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import 'android/gradle_utils.dart';
 import 'base/common.dart';
@@ -14,6 +13,7 @@
 import 'base/logger.dart';
 import 'base/net.dart';
 import 'base/os.dart' show OperatingSystemUtils;
+import 'base/platform.dart';
 import 'base/process.dart';
 import 'features.dart';
 import 'globals.dart' as globals;
diff --git a/packages/flutter_tools/lib/src/commands/analyze.dart b/packages/flutter_tools/lib/src/commands/analyze.dart
index 05035f1..969a2c5 100644
--- a/packages/flutter_tools/lib/src/commands/analyze.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze.dart
@@ -5,11 +5,11 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../base/file_system.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/terminal.dart';
 import '../globals.dart' as globals;
 import '../runner/flutter_command.dart';
diff --git a/packages/flutter_tools/lib/src/commands/analyze_base.dart b/packages/flutter_tools/lib/src/commands/analyze_base.dart
index 52d3334..68bd598 100644
--- a/packages/flutter_tools/lib/src/commands/analyze_base.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze_base.dart
@@ -6,13 +6,13 @@
 
 import 'package:args/args.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 import 'package:yaml/yaml.dart' as yaml;
 
 import '../base/common.dart';
 import '../base/file_system.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/terminal.dart';
 import '../base/utils.dart';
 import '../cache.dart';
diff --git a/packages/flutter_tools/lib/src/commands/analyze_continuously.dart b/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
index 0b7d387..bb2f428 100644
--- a/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze_continuously.dart
@@ -6,13 +6,13 @@
 
 import 'package:args/args.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../base/common.dart';
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/terminal.dart';
 import '../base/utils.dart';
 import '../cache.dart';
diff --git a/packages/flutter_tools/lib/src/commands/analyze_once.dart b/packages/flutter_tools/lib/src/commands/analyze_once.dart
index 35d28d8..392e143 100644
--- a/packages/flutter_tools/lib/src/commands/analyze_once.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze_once.dart
@@ -6,12 +6,12 @@
 
 import 'package:args/args.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../base/common.dart';
 import '../base/file_system.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/terminal.dart';
 import '../base/utils.dart';
 import '../cache.dart';
diff --git a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart
index f1c7f4f..479119b 100644
--- a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart
+++ b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart
@@ -6,12 +6,12 @@
 
 import 'package:file/file.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import '../artifacts.dart';
 import '../base/common.dart';
 import '../base/file_system.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../base/utils.dart';
 import '../build_info.dart';
diff --git a/packages/flutter_tools/lib/src/dart/analysis.dart b/packages/flutter_tools/lib/src/dart/analysis.dart
index 83773e2..54a736a 100644
--- a/packages/flutter_tools/lib/src/dart/analysis.dart
+++ b/packages/flutter_tools/lib/src/dart/analysis.dart
@@ -6,13 +6,13 @@
 import 'dart:math' as math;
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../base/common.dart';
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/terminal.dart';
 import '../base/utils.dart';
 import '../convert.dart';
diff --git a/packages/flutter_tools/lib/src/dart/pub.dart b/packages/flutter_tools/lib/src/dart/pub.dart
index 366334f..2abf33f 100644
--- a/packages/flutter_tools/lib/src/dart/pub.dart
+++ b/packages/flutter_tools/lib/src/dart/pub.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../base/bot_detector.dart';
@@ -14,6 +13,7 @@
 import '../base/file_system.dart';
 import '../base/io.dart' as io;
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../cache.dart';
 import '../reporting/reporting.dart';
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
index 9cee2f6..7994843 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:vm_service/vm_service.dart' as vm_service;
 
 import '../application_package.dart';
@@ -16,6 +15,7 @@
 import '../base/io.dart';
 import '../base/logger.dart';
 import '../base/net.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../base/time.dart';
 import '../build_info.dart';
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
index 16bc964..73f644d 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
@@ -4,11 +4,10 @@
 
 import 'dart:async';
 
-import 'package:platform/platform.dart';
-
 import '../base/context.dart';
 import '../base/file_system.dart';
 import '../base/io.dart';
+import '../base/platform.dart';
 import '../convert.dart';
 import '../globals.dart' as globals;
 
diff --git a/packages/flutter_tools/lib/src/globals.dart b/packages/flutter_tools/lib/src/globals.dart
index 1ad5f12..db7a6be 100644
--- a/packages/flutter_tools/lib/src/globals.dart
+++ b/packages/flutter_tools/lib/src/globals.dart
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import 'android/android_sdk.dart';
@@ -17,6 +16,7 @@
 import 'base/logger.dart';
 import 'base/net.dart';
 import 'base/os.dart';
+import 'base/platform.dart';
 import 'base/template.dart';
 import 'base/terminal.dart';
 import 'base/user_messages.dart';
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 0bfd341..9012d3e 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -6,7 +6,6 @@
 import 'dart:math' as math;
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:vm_service/vm_service.dart' as vm_service;
 import 'package:process/process.dart';
 
@@ -15,6 +14,7 @@
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../build_info.dart';
 import '../convert.dart';
diff --git a/packages/flutter_tools/lib/src/ios/ios_deploy.dart b/packages/flutter_tools/lib/src/ios/ios_deploy.dart
index 3d516c2..246f263 100644
--- a/packages/flutter_tools/lib/src/ios/ios_deploy.dart
+++ b/packages/flutter_tools/lib/src/ios/ios_deploy.dart
@@ -5,11 +5,11 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../artifacts.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../build_info.dart';
 import '../cache.dart';
diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart
index 6466202..1786508 100644
--- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart
+++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../artifacts.dart';
@@ -13,6 +12,7 @@
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../base/terminal.dart';
 import '../base/utils.dart';
diff --git a/packages/flutter_tools/lib/src/linux/linux_device.dart b/packages/flutter_tools/lib/src/linux/linux_device.dart
index c66b6c9..29d7b0a 100644
--- a/packages/flutter_tools/lib/src/linux/linux_device.dart
+++ b/packages/flutter_tools/lib/src/linux/linux_device.dart
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
+import '../base/platform.dart';
 import '../build_info.dart';
 import '../desktop_device.dart';
 import '../device.dart';
diff --git a/packages/flutter_tools/lib/src/linux/linux_workflow.dart b/packages/flutter_tools/lib/src/linux/linux_workflow.dart
index caea987..e1bcfb3 100644
--- a/packages/flutter_tools/lib/src/linux/linux_workflow.dart
+++ b/packages/flutter_tools/lib/src/linux/linux_workflow.dart
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
+import '../base/platform.dart';
 import '../doctor.dart';
 import '../features.dart';
 
diff --git a/packages/flutter_tools/lib/src/macos/cocoapods.dart b/packages/flutter_tools/lib/src/macos/cocoapods.dart
index 634143d..c46a096 100644
--- a/packages/flutter_tools/lib/src/macos/cocoapods.dart
+++ b/packages/flutter_tools/lib/src/macos/cocoapods.dart
@@ -6,13 +6,13 @@
 
 import 'package:file/file.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../base/common.dart';
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../base/version.dart';
 import '../cache.dart';
diff --git a/packages/flutter_tools/lib/src/macos/xcode.dart b/packages/flutter_tools/lib/src/macos/xcode.dart
index 168396a..e7c6410 100644
--- a/packages/flutter_tools/lib/src/macos/xcode.dart
+++ b/packages/flutter_tools/lib/src/macos/xcode.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../artifacts.dart';
@@ -13,6 +12,7 @@
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../build_info.dart';
 import '../cache.dart';
diff --git a/packages/flutter_tools/lib/src/persistent_tool_state.dart b/packages/flutter_tools/lib/src/persistent_tool_state.dart
index 02b0aed..bb3872b 100644
--- a/packages/flutter_tools/lib/src/persistent_tool_state.dart
+++ b/packages/flutter_tools/lib/src/persistent_tool_state.dart
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
 import 'base/config.dart';
 import 'base/context.dart';
 import 'base/file_system.dart';
 import 'base/logger.dart';
+import 'base/platform.dart';
 import 'version.dart';
 
 /// A class that represents global (non-project-specific) internal state that
diff --git a/packages/flutter_tools/lib/src/reporting/reporting.dart b/packages/flutter_tools/lib/src/reporting/reporting.dart
index 3666946..d3cdd30 100644
--- a/packages/flutter_tools/lib/src/reporting/reporting.dart
+++ b/packages/flutter_tools/lib/src/reporting/reporting.dart
@@ -10,13 +10,13 @@
 import 'package:http/http.dart' as http;
 import 'package:intl/intl.dart';
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:usage/usage_io.dart';
 
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/logger.dart';
 import '../base/os.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../base/time.dart';
 import '../build_system/exceptions.dart';
diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart
index 3d8b312..3526131 100644
--- a/packages/flutter_tools/lib/src/run_hot.dart
+++ b/packages/flutter_tools/lib/src/run_hot.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 import 'package:package_config/package_config.dart';
 import 'package:vm_service/vm_service.dart' as vm_service;
-import 'package:platform/platform.dart';
 import 'package:meta/meta.dart';
 import 'package:pool/pool.dart';
 import 'base/async_guard.dart';
@@ -13,6 +12,7 @@
 import 'base/context.dart';
 import 'base/file_system.dart';
 import 'base/logger.dart';
+import 'base/platform.dart';
 import 'base/utils.dart';
 import 'build_info.dart';
 import 'bundle.dart';
diff --git a/packages/flutter_tools/lib/src/web/chrome.dart b/packages/flutter_tools/lib/src/web/chrome.dart
index 87fde70..7601bfa 100644
--- a/packages/flutter_tools/lib/src/web/chrome.dart
+++ b/packages/flutter_tools/lib/src/web/chrome.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
 
@@ -14,6 +13,7 @@
 import '../base/io.dart';
 import '../base/logger.dart';
 import '../base/os.dart';
+import '../base/platform.dart';
 import '../convert.dart';
 import '../globals.dart' as globals;
 
diff --git a/packages/flutter_tools/lib/src/web/web_device.dart b/packages/flutter_tools/lib/src/web/web_device.dart
index f984858..1042ee6 100644
--- a/packages/flutter_tools/lib/src/web/web_device.dart
+++ b/packages/flutter_tools/lib/src/web/web_device.dart
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../application_package.dart';
@@ -11,6 +10,7 @@
 import '../base/io.dart';
 import '../base/logger.dart';
 import '../base/os.dart';
+import '../base/platform.dart';
 import '../build_info.dart';
 import '../device.dart';
 import '../features.dart';
diff --git a/packages/flutter_tools/lib/src/web/web_validator.dart b/packages/flutter_tools/lib/src/web/web_validator.dart
index 43cb00d..1a50ba8 100644
--- a/packages/flutter_tools/lib/src/web/web_validator.dart
+++ b/packages/flutter_tools/lib/src/web/web_validator.dart
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
+import '../base/platform.dart';
 import '../doctor.dart';
 import 'chrome.dart';
 
diff --git a/packages/flutter_tools/lib/src/web/workflow.dart b/packages/flutter_tools/lib/src/web/workflow.dart
index 737f478..0f7839c 100644
--- a/packages/flutter_tools/lib/src/web/workflow.dart
+++ b/packages/flutter_tools/lib/src/web/workflow.dart
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 
+import '../base/platform.dart';
 import '../doctor.dart';
 import '../features.dart';
 
diff --git a/packages/flutter_tools/lib/src/windows/visual_studio.dart b/packages/flutter_tools/lib/src/windows/visual_studio.dart
index 13485ae..21a47aa 100644
--- a/packages/flutter_tools/lib/src/windows/visual_studio.dart
+++ b/packages/flutter_tools/lib/src/windows/visual_studio.dart
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 import 'package:meta/meta.dart';
-import 'package:platform/platform.dart';
 import 'package:process/process.dart';
 
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/logger.dart';
+import '../base/platform.dart';
 import '../base/process.dart';
 import '../convert.dart';