Revert "Revert "Audit hashCode overrides outside of packages/flutter (#85370)" (#85451)" (#85567)

This reverts commit 2be0d57fa25423ffcba5a07d22ef9386a89dcf4c.
diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart
index 4d88be9..09717f7 100644
--- a/packages/flutter_tools/lib/src/asset.dart
+++ b/packages/flutter_tools/lib/src/asset.dart
@@ -911,11 +911,7 @@
   }
 
   @override
-  int get hashCode {
-    return baseDir.hashCode
-        ^ relativeUri.hashCode
-        ^ entryUri.hashCode;
-  }
+  int get hashCode => Object.hash(baseDir, relativeUri, entryUri.hashCode);
 }
 
 // Given an assets directory like this:
diff --git a/packages/flutter_tools/lib/src/base/fingerprint.dart b/packages/flutter_tools/lib/src/base/fingerprint.dart
index ad8a8da..194f857 100644
--- a/packages/flutter_tools/lib/src/base/fingerprint.dart
+++ b/packages/flutter_tools/lib/src/base/fingerprint.dart
@@ -128,10 +128,7 @@
   }
 
   @override
-  // Ignore map entries here to avoid becoming inconsistent with equals
-  // due to differences in map entry order. This is a really bad hash
-  // function and should eventually be deprecated and removed.
-  int get hashCode => _checksums.length.hashCode;
+  int get hashCode => Object.hash(Object.hashAllUnordered(_checksums.keys), Object.hashAllUnordered(_checksums.values));
 
   @override
   String toString() => '{checksums: $_checksums}';
diff --git a/packages/flutter_tools/lib/src/base/version.dart b/packages/flutter_tools/lib/src/base/version.dart
index 4192f26..8989599 100644
--- a/packages/flutter_tools/lib/src/base/version.dart
+++ b/packages/flutter_tools/lib/src/base/version.dart
@@ -98,7 +98,7 @@
   }
 
   @override
-  int get hashCode => major ^ minor ^ patch;
+  int get hashCode => Object.hash(major, minor, patch);
 
   bool operator <(Version other) => compareTo(other) < 0;
   bool operator >(Version other) => compareTo(other) > 0;
diff --git a/packages/flutter_tools/lib/src/doctor_validator.dart b/packages/flutter_tools/lib/src/doctor_validator.dart
index d5488c0..f8ddc25 100644
--- a/packages/flutter_tools/lib/src/doctor_validator.dart
+++ b/packages/flutter_tools/lib/src/doctor_validator.dart
@@ -278,7 +278,7 @@
   }
 
   @override
-  int get hashCode => type.hashCode ^ message.hashCode ^ contextUrl.hashCode;
+  int get hashCode => Object.hash(type, message, contextUrl);
 }
 
 class NoIdeValidator extends DoctorValidator {
diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart
index 78b2cc0..5e48bf9 100644
--- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart
+++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart
@@ -302,7 +302,7 @@
   final EnvironmentType environmentType;
 
   @override
-  int get hashCode => scheme.hashCode ^ configuration.hashCode ^ environmentType.hashCode;
+  int get hashCode => Object.hash(scheme, configuration, environmentType);
 
   @override
   bool operator ==(Object other) {
diff --git a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart
index 04fcca4..fd435e7 100644
--- a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart
+++ b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart
@@ -129,9 +129,7 @@
   }
 
   @override
-  int get hashCode {
-    return originalString.hashCode;
-  }
+  int get hashCode => originalString.hashCode;
 
   @override
   String toString() {
diff --git a/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart b/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart
index f710eb6..6fbd116 100644
--- a/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart
+++ b/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart
@@ -326,12 +326,7 @@
   }
 
   @override
-  int get hashCode =>
-    toMap()
-      .values
-      .where((String element) => element != null)
-      .fold(Object().hashCode,
-            (int value, String element) => value ^ element.hashCode);
+  int get hashCode => Object.hashAll(toMap().values);
 }
 
 /// List of all fields used in CustomDimensions.
diff --git a/packages/flutter_tools/lib/src/reporting/usage.dart b/packages/flutter_tools/lib/src/reporting/usage.dart
index d822c7d..303ca50 100644
--- a/packages/flutter_tools/lib/src/reporting/usage.dart
+++ b/packages/flutter_tools/lib/src/reporting/usage.dart
@@ -486,7 +486,7 @@
   }
 
   @override
-  int get hashCode => command.hashCode ^ parameters.hashCode;
+  int get hashCode => Object.hash(command, parameters);
 
   @override
   String toString() => 'TestUsageCommand($command, parameters:$parameters)';
@@ -514,11 +514,7 @@
   }
 
   @override
-  int get hashCode => category.hashCode ^
-    parameter.hashCode ^
-    label.hashCode ^
-    value.hashCode ^
-    parameters.hashCode;
+  int get hashCode => Object.hash(category, parameter, label, value, parameters);
 
   @override
   String toString() => 'TestUsageEvent($category, $parameter, label:$label, value:$value, parameters:$parameters)';
@@ -544,10 +540,7 @@
   }
 
   @override
-  int get hashCode => category.hashCode ^
-    variableName.hashCode ^
-    duration.hashCode ^
-    label.hashCode;
+  int get hashCode => Object.hash(category, variableName, duration, label);
 
   @override
   String toString() => 'TestTimingEvent($category, $variableName, $duration, label:$label)';
diff --git a/packages/flutter_tools/lib/src/vscode/vscode.dart b/packages/flutter_tools/lib/src/vscode/vscode.dart
index 1a48053..8553722 100644
--- a/packages/flutter_tools/lib/src/vscode/vscode.dart
+++ b/packages/flutter_tools/lib/src/vscode/vscode.dart
@@ -326,5 +326,5 @@
 
   @override
   // Lowest bit is for isInsiders boolean.
-  int get hashCode => installPath.hashCode ^ extensionsFolder.hashCode ^ edition.hashCode;
+  int get hashCode => Object.hash(installPath, extensionsFolder, edition);
 }