Revert "Reland: [flutter_tool] Where possible, catch only subtypes of Exception (#51567)" (#51616)

This reverts commit 9de7787f258870e60a7c4127883e8f7f1af5822c.
diff --git a/packages/flutter_tools/analysis_options.yaml b/packages/flutter_tools/analysis_options.yaml
index 139938d..525929f 100644
--- a/packages/flutter_tools/analysis_options.yaml
+++ b/packages/flutter_tools/analysis_options.yaml
@@ -7,4 +7,3 @@
   rules:
     unawaited_futures: true
     curly_braces_in_flow_control_structures: true
-    avoid_catches_without_on_clauses: true
diff --git a/packages/flutter_tools/lib/runner.dart b/packages/flutter_tools/lib/runner.dart
index 9d75c1e..4dd5631 100644
--- a/packages/flutter_tools/lib/runner.dart
+++ b/packages/flutter_tools/lib/runner.dart
@@ -62,8 +62,7 @@
       try {
         await runner.run(args);
         return await _exit(0);
-      // This catches all exceptions to send to crash logging, etc.
-      } catch (error, stackTrace) {  // ignore: avoid_catches_without_on_clauses
+      } catch (error, stackTrace) {
         firstError = error;
         firstStackTrace = stackTrace;
         return await _handleToolError(
@@ -136,8 +135,7 @@
       await _informUserOfCrash(args, error, stackTrace, errorString);
 
       return _exit(1);
-    // This catch catches all exceptions to ensure the message below is printed.
-    } catch (error) { // ignore: avoid_catches_without_on_clauses
+    } catch (error) {
       globals.stdio.stderrWrite(
         'Unable to generate crash report due to secondary error: $error\n'
         'please let us know at https://github.com/flutter/flutter/issues.\n',
@@ -245,7 +243,7 @@
     );
 
     return logger.statusText;
-  } on Exception catch (error, trace) {
+  } catch (error, trace) {
     return 'encountered exception: $error\n\n${trace.toString().trim()}\n';
   }
 }
@@ -273,9 +271,7 @@
       globals.printTrace('exiting with code $code');
       exit(code);
       completer.complete();
-    // This catches all exceptions becauce the error is propagated on the
-    // completer.
-    } catch (error, stackTrace) { // ignore: avoid_catches_without_on_clauses
+    } catch (error, stackTrace) {
       completer.completeError(error, stackTrace);
     }
   });
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index 975fd27..53a0065 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -177,7 +177,7 @@
       } finally {
         console.destroy();
       }
-    } on Exception catch (e) {
+    } catch (e) {
       globals.printTrace('Failed to fetch avd name for emulator at $host:$port: $e');
       // If we fail to connect to the device, we should not fail so just return
       // an empty name. This data is best-effort.
@@ -299,7 +299,7 @@
         return true;
       }
       globals.printError('The ADB at "${getAdbPath(androidSdk)}" is too old; please install version 1.0.39 or later.');
-    } on Exception catch (error, trace) {
+    } catch (error, trace) {
       globals.printError('Error running ADB: $error', stackTrace: trace);
     }
 
@@ -335,7 +335,7 @@
       }
 
       return true;
-    } on Exception catch (e, stacktrace) {
+    } catch (e, stacktrace) {
       globals.printError('Unexpected failure from adb: $e');
       globals.printError('Stacktrace: $stacktrace');
       return false;
@@ -366,7 +366,7 @@
     try {
       final RunResult listOut = await runAdbCheckedAsync(<String>['shell', 'pm', 'list', 'packages', app.id]);
       return LineSplitter.split(listOut.stdout).contains('package:${app.id}');
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printTrace('$error');
       return false;
     }
@@ -432,7 +432,7 @@
         throwOnError: true,
       );
       uninstallOut = uninstallResult.stdout;
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('adb uninstall failed: $error');
       return false;
     }
@@ -631,7 +631,7 @@
       }
 
       return LaunchResult.succeeded(observatoryUri: observatoryUri);
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('Error waiting for a debug connection: $error');
       return LaunchResult.failed();
     } finally {
@@ -696,7 +696,7 @@
       output = runAdbCheckedSync(<String>[
         'shell', '-x', 'logcat', '-v', 'time', '-t', '1'
       ]);
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('Failed to extract the most recent timestamp from the Android log: $error.');
       return null;
     }
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 567ff46..bb4a429 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -492,7 +492,7 @@
         .map((FileSystemEntity entity) {
           try {
             return Version.parse(entity.basename);
-          } on Exception {
+          } catch (error) {
             return null;
           }
         })
@@ -518,7 +518,7 @@
               .group(1);
           platformVersion = int.parse(versionString);
         }
-      } on Exception {
+      } catch (error) {
         return null;
       }
 
@@ -583,7 +583,7 @@
             return fileSystem.path.join(javaHome, 'bin', 'java');
           }
         }
-      } on Exception catch (_) { /* ignore */ }
+      } catch (_) { /* ignore */ }
     }
 
     // Fallback to PATH based lookup.
diff --git a/packages/flutter_tools/lib/src/android/android_studio.dart b/packages/flutter_tools/lib/src/android/android_studio.dart
index eb07945..961b673 100644
--- a/packages/flutter_tools/lib/src/android/android_studio.dart
+++ b/packages/flutter_tools/lib/src/android/android_studio.dart
@@ -93,7 +93,7 @@
       installPath = globals.fs
           .file(globals.fs.path.join(homeDotDir.path, 'system', '.home'))
           .readAsStringSync();
-    } on Exception {
+    } catch (e) {
       // ignored, installPath will be null, which is handled below
     }
     if (installPath != null && globals.fs.isDirectorySync(installPath)) {
@@ -200,7 +200,7 @@
             _checkForStudio(directory.path);
           }
         }
-      } on Exception catch (e) {
+      } catch (e) {
         globals.printTrace('Exception while looking for Android Studio: $e');
       }
     }
diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart
index ef3d5fa..0043926 100644
--- a/packages/flutter_tools/lib/src/android/android_workflow.dart
+++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -122,7 +122,7 @@
           final List<String> versionLines = (result.stderr as String).split('\n');
           javaVersionText = versionLines.length >= 2 ? versionLines[1] : versionLines[0];
         }
-      } on Exception catch (error) {
+      } catch (error) {
         _logger.printTrace(error.toString());
       }
       if (javaVersionText == null || javaVersionText.isEmpty) {
@@ -287,7 +287,7 @@
         final List<String> versionLines = (result.stderr as String).split('\n');
         javaVersion = versionLines.length >= 2 ? versionLines[1] : versionLines[0];
       }
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printTrace(error.toString());
     }
     if (javaVersion == null) {
@@ -389,7 +389,7 @@
           globals.stdio.addStdoutStream(process.stdout),
           globals.stdio.addStderrStream(process.stderr),
         ]);
-      } on Exception catch (err, stack) {
+      } catch (err, stack) {
         globals.printTrace('Echoing stdout or stderr from the license subprocess failed:');
         globals.printTrace('$err\n$stack');
       }
diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart
index b0f5072..681d503 100644
--- a/packages/flutter_tools/lib/src/asset.dart
+++ b/packages/flutter_tools/lib/src/asset.dart
@@ -128,7 +128,7 @@
     FlutterManifest flutterManifest;
     try {
       flutterManifest = FlutterManifest.createFromPath(manifestPath);
-    } on Exception catch (e) {
+    } catch (e) {
       globals.printStatus('Error detected in pubspec.yaml:', emphasis: true);
       globals.printError('$e');
       return 1;
diff --git a/packages/flutter_tools/lib/src/base/async_guard.dart b/packages/flutter_tools/lib/src/base/async_guard.dart
index d25cf58..4515174 100644
--- a/packages/flutter_tools/lib/src/base/async_guard.dart
+++ b/packages/flutter_tools/lib/src/base/async_guard.dart
@@ -112,9 +112,7 @@
       if (!completer.isCompleted) {
         completer.complete(result);
       }
-    // This catches all exceptions so that they can be propagated to the
-    // caller-supplied error handling or the completer.
-    } catch (e, s) { // ignore: avoid_catches_without_on_clauses
+    } catch (e, s) {
       handleError(e, s);
     }
   }, onError: (Object e, StackTrace s) {
diff --git a/packages/flutter_tools/lib/src/base/fingerprint.dart b/packages/flutter_tools/lib/src/base/fingerprint.dart
index f20e107..815acc2 100644
--- a/packages/flutter_tools/lib/src/base/fingerprint.dart
+++ b/packages/flutter_tools/lib/src/base/fingerprint.dart
@@ -66,7 +66,7 @@
       final Fingerprint oldFingerprint = Fingerprint.fromJson(fingerprintFile.readAsStringSync());
       final Fingerprint newFingerprint = buildFingerprint();
       return oldFingerprint == newFingerprint;
-    } on Exception catch (e) {
+    } catch (e) {
       // Log exception and continue, fingerprinting is only a performance improvement.
       globals.printTrace('Fingerprint check error: $e');
     }
@@ -77,7 +77,7 @@
     try {
       final Fingerprint fingerprint = buildFingerprint();
       globals.fs.file(fingerprintPath).writeAsStringSync(fingerprint.toJson());
-    } on Exception catch (e) {
+    } catch (e) {
       // Log exception and continue, fingerprinting is only a performance improvement.
       globals.printTrace('Fingerprint write error: $e');
     }
@@ -103,7 +103,7 @@
     final Iterable<File> files = inputPaths.map<File>(globals.fs.file);
     final Iterable<File> missingInputs = files.where((File file) => !file.existsSync());
     if (missingInputs.isNotEmpty) {
-      throw Exception('Missing input files:\n' + missingInputs.join('\n'));
+      throw ArgumentError('Missing input files:\n' + missingInputs.join('\n'));
     }
 
     _checksums = <String, String>{};
@@ -116,14 +116,14 @@
 
   /// Creates a Fingerprint from serialized JSON.
   ///
-  /// Throws [Exception], if there is a version mismatch between the
+  /// Throws [ArgumentError], if there is a version mismatch between the
   /// serializing framework and this framework.
   Fingerprint.fromJson(String jsonData) {
     final Map<String, dynamic> content = castStringKeyedMap(json.decode(jsonData));
 
     final String version = content['version'] as String;
     if (version != globals.flutterVersion.frameworkRevision) {
-      throw Exception('Incompatible fingerprint version: $version');
+      throw ArgumentError('Incompatible fingerprint version: $version');
     }
     _checksums = castStringKeyedMap(content['files'])?.cast<String,String>() ?? <String, String>{};
     _properties = castStringKeyedMap(content['properties'])?.cast<String,String>() ?? <String, String>{};
@@ -182,11 +182,8 @@
   // outfile1 outfile2 : file1.dart file2.dart file3.dart
   final String contents = globals.fs.file(depfilePath).readAsStringSync();
 
-  final List<String> dependencies = contents.split(': ');
-  if (dependencies.length < 2) {
-    throw Exception('malformed depfile');
-  }
-  return dependencies[1]
+  final String dependencies = contents.split(': ')[1];
+  return dependencies
       .replaceAllMapped(_separatorExpr, (Match match) => '${match.group(1)}\n')
       .split('\n')
       .map<String>((String path) => path.replaceAllMapped(_escapeExpr, (Match match) => match.group(1)).trim())
diff --git a/packages/flutter_tools/lib/src/base/logger.dart b/packages/flutter_tools/lib/src/base/logger.dart
index f5c0544..0f52351 100644
--- a/packages/flutter_tools/lib/src/base/logger.dart
+++ b/packages/flutter_tools/lib/src/base/logger.dart
@@ -364,8 +364,7 @@
       ? message
       : message.replaceAll('🔥', '')
                .replaceAll('✗', 'X')
-               .replaceAll('✓', '√')
-               .replaceAll('🔨', '');
+               .replaceAll('✓', '√');
     _stdio.stdoutWrite(windowsMessage);
   }
 }
diff --git a/packages/flutter_tools/lib/src/base/os.dart b/packages/flutter_tools/lib/src/base/os.dart
index 099a71f..65c8b5a 100644
--- a/packages/flutter_tools/lib/src/base/os.dart
+++ b/packages/flutter_tools/lib/src/base/os.dart
@@ -136,7 +136,7 @@
         return findFreePort(ipv6: true);
       }
       _logger.printTrace('findFreePort failed: $e');
-    } on Exception catch (e) {
+    } catch (e) {
       // Failures are signaled by a return value of 0 from this function.
       _logger.printTrace('findFreePort failed: $e');
     } finally {
diff --git a/packages/flutter_tools/lib/src/base/process.dart b/packages/flutter_tools/lib/src/base/process.dart
index eddf2c5..d8b5d74 100644
--- a/packages/flutter_tools/lib/src/base/process.dart
+++ b/packages/flutter_tools/lib/src/base/process.dart
@@ -367,7 +367,7 @@
           stdioFuture = stdioFuture.timeout(const Duration(seconds: 1));
         }
         await stdioFuture;
-      } on Exception catch (_) {
+      } catch (_) {
         // Ignore errors on the process' stdout and stderr streams. Just capture
         // whatever we got, and use the exit code
       }
@@ -539,7 +539,7 @@
     _traceCommand(cli);
     try {
       return _processManager.runSync(cli, environment: environment).exitCode == 0;
-    } on Exception catch (error) {
+    } catch (error) {
       _logger.printTrace('$cli failed with $error');
       return false;
     }
@@ -553,7 +553,7 @@
     _traceCommand(cli);
     try {
       return (await _processManager.run(cli, environment: environment)).exitCode == 0;
-    } on Exception catch (error) {
+    } catch (error) {
       _logger.printTrace('$cli failed with $error');
       return false;
     }
diff --git a/packages/flutter_tools/lib/src/base/signals.dart b/packages/flutter_tools/lib/src/base/signals.dart
index dbbbd76..28b9e67 100644
--- a/packages/flutter_tools/lib/src/base/signals.dart
+++ b/packages/flutter_tools/lib/src/base/signals.dart
@@ -117,7 +117,7 @@
     for (final SignalHandler handler in _handlersList[s]) {
       try {
         await asyncGuard<void>(() async => handler(s));
-      } on Exception catch (e) {
+      } catch (e) {
         if (_errorStreamController.hasListener) {
           _errorStreamController.add(e);
         }
diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart
index cd86e41..c777a6f 100644
--- a/packages/flutter_tools/lib/src/build_info.dart
+++ b/packages/flutter_tools/lib/src/build_info.dart
@@ -399,7 +399,8 @@
     case 'x86_64':
       return DarwinArch.x86_64;
   }
-  throw Exception('Unsupported iOS arch name "$arch"');
+  assert(false);
+  return null;
 }
 
 String getNameForTargetPlatform(TargetPlatform platform, {DarwinArch darwinArch}) {
@@ -480,7 +481,8 @@
     case 'android-x86':
       return AndroidArch.x86;
   }
-  throw Exception('Unsupported Android arch name "$platform"');
+  assert(false);
+  return null;
 }
 
 String getNameForAndroidArch(AndroidArch arch) {
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 53370f6..0ef5786 100644
--- a/packages/flutter_tools/lib/src/build_system/build_system.dart
+++ b/packages/flutter_tools/lib/src/build_system/build_system.dart
@@ -582,7 +582,7 @@
           previousFile.deleteSync();
         }
       }
-    } on Exception catch (exception, stackTrace) {
+    } catch (exception, stackTrace) {
       // TODO(jonahwilliams): throw specific exception for expected errors to mark
       // as non-fatal. All others should be fatal.
       node.target.clearStamp(environment);
diff --git a/packages/flutter_tools/lib/src/build_system/file_hash_store.dart b/packages/flutter_tools/lib/src/build_system/file_hash_store.dart
index ecd3d48..b1b679e 100644
--- a/packages/flutter_tools/lib/src/build_system/file_hash_store.dart
+++ b/packages/flutter_tools/lib/src/build_system/file_hash_store.dart
@@ -115,8 +115,8 @@
     FileStorage fileStorage;
     try {
       fileStorage = FileStorage.fromBuffer(data);
-    } on Exception catch (err) {
-      _logger.printTrace('Filestorage format changed: $err');
+    } catch (err) {
+      _logger.printTrace('Filestorage format changed');
       cacheFile.deleteSync();
       return;
     }
diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
index 990716c..977aae1 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
@@ -376,8 +376,8 @@
 Future<RunResult> createStubAppFramework(File outputFile, SdkType sdk, { bool include32Bit = true }) async {
   try {
     outputFile.createSync(recursive: true);
-  } on Exception catch (e) {
-    throwToolExit('Failed to create App.framework stub at ${outputFile.path}: $e');
+  } catch (e) {
+    throwToolExit('Failed to create App.framework stub at ${outputFile.path}');
   }
 
   final Directory tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_stub_source.');
@@ -420,8 +420,8 @@
       tempDir.deleteSync(recursive: true);
     } on FileSystemException catch (_) {
       // Best effort. Sometimes we can't delete things from system temp.
-    } on Exception catch (e) {
-      throwToolExit('Failed to create App.framework stub at ${outputFile.path}: $e');
+    } catch (e) {
+      throwToolExit('Failed to create App.framework stub at ${outputFile.path}');
     }
   }
 }
diff --git a/packages/flutter_tools/lib/src/build_system/targets/macos.dart b/packages/flutter_tools/lib/src/build_system/targets/macos.dart
index a4d5c9d..c2b3531 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/macos.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/macos.dart
@@ -331,7 +331,7 @@
       try {
         final File sourceFile = environment.buildDir.childFile('app.dill');
         sourceFile.copySync(assetDirectory.childFile('kernel_blob.bin').path);
-      } on Exception catch (err) {
+      } catch (err) {
         throw Exception('Failed to copy app.dill: $err');
       }
       // Copy precompiled runtimes.
@@ -344,7 +344,7 @@
             assetDirectory.childFile('vm_snapshot_data').path);
         globals.fs.file(isolateSnapshotData).copySync(
             assetDirectory.childFile('isolate_snapshot_data').path);
-      } on Exception catch (err) {
+      } catch (err) {
         throw Exception('Failed to copy precompiled runtimes: $err');
       }
     }
diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart
index 34c5990..bfbde09 100644
--- a/packages/flutter_tools/lib/src/cache.dart
+++ b/packages/flutter_tools/lib/src/cache.dart
@@ -403,7 +403,7 @@
     if (!cachedFile.existsSync()) {
       try {
         await downloadFile(url, cachedFile);
-      } on Exception catch (e) {
+      } catch (e) {
         throwToolExit('Failed to fetch third-party artifact $url: $e');
       }
     }
@@ -597,8 +597,7 @@
         try {
           await cache.downloadFile(url, tempFile);
           status.stop();
-        // The exception is rethrown, so don't catch only Exceptions.
-        } catch (exception) { // ignore: avoid_catches_without_on_clauses
+        } catch (exception) {
           status.cancel();
           rethrow;
         }
diff --git a/packages/flutter_tools/lib/src/commands/analyze_base.dart b/packages/flutter_tools/lib/src/commands/analyze_base.dart
index 2190d80..63fb3dc 100644
--- a/packages/flutter_tools/lib/src/commands/analyze_base.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze_base.dart
@@ -33,7 +33,7 @@
         } finally {
           resultsFile.close();
         }
-      } on Exception catch (e) {
+      } catch (e) {
         globals.printError('Failed to save output to "${argResults['write']}": $e');
       }
     }
diff --git a/packages/flutter_tools/lib/src/commands/assemble.dart b/packages/flutter_tools/lib/src/commands/assemble.dart
index 4a0a018..4dac90e 100644
--- a/packages/flutter_tools/lib/src/commands/assemble.dart
+++ b/packages/flutter_tools/lib/src/commands/assemble.dart
@@ -104,7 +104,7 @@
         CustomDimensions.commandBuildBundleTargetPlatform: localEnvironment.defines['TargetPlatform'],
         CustomDimensions.commandBuildBundleIsModule: '${futterProject.isModule}',
       };
-    } on Exception {
+    } catch (err) {
       // We've failed to send usage.
     }
     return const <CustomDimensions, String>{};
diff --git a/packages/flutter_tools/lib/src/commands/attach.dart b/packages/flutter_tools/lib/src/commands/attach.dart
index 941ad3b..a1f8530 100644
--- a/packages/flutter_tools/lib/src/commands/attach.dart
+++ b/packages/flutter_tools/lib/src/commands/attach.dart
@@ -114,7 +114,7 @@
     }
     try {
       return int.parse(stringArg('debug-port'));
-    } on Exception catch (error) {
+    } catch (error) {
       throwToolExit('Invalid port for `--debug-port`: $error');
     }
     return null;
@@ -222,7 +222,7 @@
         try {
           isolateDiscoveryProtocol = device.getIsolateDiscoveryProtocol(module);
           observatoryUri = Stream<Uri>.value(await isolateDiscoveryProtocol.uri).asBroadcastStream();
-        } on Exception {
+        } catch (_) {
           isolateDiscoveryProtocol?.dispose();
           final List<ForwardedPort> ports = device.portForwarder.forwardedPorts.toList();
           for (final ForwardedPort port in ports) {
@@ -292,7 +292,7 @@
             globals.fs.currentDirectory,
             LaunchMode.attach,
           );
-        } on Exception catch (error) {
+        } catch (error) {
           throwToolExit(error.toString());
         }
         result = await app.runner.waitForAppToFinish();
diff --git a/packages/flutter_tools/lib/src/commands/clean.dart b/packages/flutter_tools/lib/src/commands/clean.dart
index a352261..da967b0 100644
--- a/packages/flutter_tools/lib/src/commands/clean.dart
+++ b/packages/flutter_tools/lib/src/commands/clean.dart
@@ -71,7 +71,7 @@
       for (final String scheme in projectInfo.schemes) {
         await xcodeProjectInterpreter.cleanWorkspace(xcodeWorkspace.path, scheme);
       }
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printTrace('Could not clean Xcode workspace: $error');
     } finally {
       xcodeStatus?.stop();
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 095d1db..c5e6215 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -264,7 +264,7 @@
         outputFile.writeAsStringSync(samplesJson);
         globals.printStatus('Wrote samples JSON to "$outputFilePath"');
       }
-    } on Exception catch (e) {
+    } catch (e) {
       throwToolExit('Failed to write samples JSON to "$outputFilePath": $e', exitCode: 2);
     }
   }
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index a7825f6..9427164 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -175,7 +175,7 @@
           completer.complete(request['result']);
         }
       }
-    } on Exception catch (error, trace) {
+    } catch (error, trace) {
       _send(<String, dynamic>{
         'id': id,
         'error': _toJsonable(error),
@@ -414,7 +414,7 @@
       return <String, Object>{
         'platforms': result,
       };
-    } on Exception catch (err, stackTrace) {
+    } catch (err, stackTrace) {
       sendEvent('log', <String, dynamic>{
         'log': 'Failed to parse project metadata',
         'stackTrace': stackTrace.toString(),
@@ -596,7 +596,7 @@
           appStartedCompleter: appStartedCompleter,
         );
         _sendAppEvent(app, 'stop');
-      } on Exception catch (error, trace) {
+      } catch (error, trace) {
         _sendAppEvent(app, 'stop', <String, dynamic>{
           'error': _toJsonable(error),
           'trace': '$trace',
@@ -780,7 +780,7 @@
         try {
           final Map<String, Object> response = await _deviceToMap(device);
           sendEvent(eventName, response);
-        } on Exception catch (err) {
+        } catch (err) {
           globals.printError('$err');
         }
       });
diff --git a/packages/flutter_tools/lib/src/commands/drive.dart b/packages/flutter_tools/lib/src/commands/drive.dart
index 3b5fd1d..6ea5281 100644
--- a/packages/flutter_tools/lib/src/commands/drive.dart
+++ b/packages/flutter_tools/lib/src/commands/drive.dart
@@ -261,7 +261,7 @@
       try {
         await window.setLocation(const math.Point<int>(0, 0));
         await window.setSize(math.Rectangle<int>(0, 0, x, y));
-      } on Exception {
+      } catch (_) {
        // Error might be thrown in some browsers.
       }
 
@@ -278,7 +278,7 @@
 
     try {
       await testRunner(<String>[testFile], environment);
-    } on Exception catch (error, stackTrace) {
+    } catch (error, stackTrace) {
       if (error is ToolExit) {
         rethrow;
       }
diff --git a/packages/flutter_tools/lib/src/commands/generate.dart b/packages/flutter_tools/lib/src/commands/generate.dart
index c124182..3f94441 100644
--- a/packages/flutter_tools/lib/src/commands/generate.dart
+++ b/packages/flutter_tools/lib/src/commands/generate.dart
@@ -52,8 +52,8 @@
         globals.printError(stackData[0] as String);
         globals.printError(stackData[1] as String);
         globals.printError(StackTrace.fromString(stackData[2] as String).toString());
-      } on Exception catch (err) {
-        globals.printError('Error reading error in ${errorFile.path}: $err');
+      } catch (err) {
+        globals.printError('Error reading error in ${errorFile.path}');
       }
     }
     return FlutterCommandResult.fail();
diff --git a/packages/flutter_tools/lib/src/commands/packages.dart b/packages/flutter_tools/lib/src/commands/packages.dart
index 0a7e76b..b36fbf5 100644
--- a/packages/flutter_tools/lib/src/commands/packages.dart
+++ b/packages/flutter_tools/lib/src/commands/packages.dart
@@ -98,8 +98,7 @@
       );
       pubGetTimer.stop();
       flutterUsage.sendTiming('pub', 'get', pubGetTimer.elapsed, label: 'success');
-    // Not limiting to catching Exception because the exception is rethrown.
-    } catch (_) { // ignore: avoid_catches_without_on_clauses
+    } catch (_) {
       pubGetTimer.stop();
       flutterUsage.sendTiming('pub', 'get', pubGetTimer.elapsed, label: 'failure');
       rethrow;
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index 0c3a8f0..15fa50a 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -420,7 +420,7 @@
           dillOutputPath: stringArg('output-dill'),
           ipv6: ipv6,
         );
-      } on Exception catch (error) {
+      } catch (error) {
         throwToolExit(error.toString());
       }
       final DateTime appStartedTime = systemClock.now();
diff --git a/packages/flutter_tools/lib/src/commands/screenshot.dart b/packages/flutter_tools/lib/src/commands/screenshot.dart
index 5d830e7..a64d1cc 100644
--- a/packages/flutter_tools/lib/src/commands/screenshot.dart
+++ b/packages/flutter_tools/lib/src/commands/screenshot.dart
@@ -116,7 +116,7 @@
     );
     try {
       await device.takeScreenshot(outputFile);
-    } on Exception catch (error) {
+    } catch (error) {
       throwToolExit('Error taking screenshot: $error');
     }
     _showOutputFileInfo(outputFile);
diff --git a/packages/flutter_tools/lib/src/commands/unpack.dart b/packages/flutter_tools/lib/src/commands/unpack.dart
index 885c4dd..07587d6 100644
--- a/packages/flutter_tools/lib/src/commands/unpack.dart
+++ b/packages/flutter_tools/lib/src/commands/unpack.dart
@@ -150,7 +150,7 @@
       } else {
         globals.printTrace('Artifacts for version $targetHash already present.');
       }
-    } on Exception catch (error, stackTrace) {
+    } catch (error, stackTrace) {
       globals.printError(stackTrace.toString());
       globals.printError(error.toString());
       return false;
@@ -200,8 +200,8 @@
       }
 
       globals.printTrace('Copied artifacts from $sourceDirectory.');
-    } on Exception catch (e, stackTrace) {
-      globals.printError(e.toString());
+    } catch (e, stackTrace) {
+      globals.printError(e.message as String);
       globals.printError(stackTrace.toString());
       return false;
     }
diff --git a/packages/flutter_tools/lib/src/commands/upgrade.dart b/packages/flutter_tools/lib/src/commands/upgrade.dart
index 840e265..d423513 100644
--- a/packages/flutter_tools/lib/src/commands/upgrade.dart
+++ b/packages/flutter_tools/lib/src/commands/upgrade.dart
@@ -210,7 +210,7 @@
         throwOnError: true,
         workingDirectory: workingDirectory,
       );
-    } on Exception {
+    } catch (e) {
       throwToolExit(
         'Unable to upgrade Flutter: no origin repository configured. '
         "Run 'git remote add origin "
@@ -279,7 +279,7 @@
       final FlutterVersion newFlutterVersion = FlutterVersion(const SystemClock(), workingDirectory);
       alreadyUpToDate = newFlutterVersion.channel == oldFlutterVersion.channel &&
         newFlutterVersion.frameworkRevision == oldFlutterVersion.frameworkRevision;
-    } on Exception catch (e) {
+    } catch (e) {
       globals.printTrace('Failed to determine FlutterVersion after upgrade fast-forward: $e');
     }
     return alreadyUpToDate;
diff --git a/packages/flutter_tools/lib/src/commands/version.dart b/packages/flutter_tools/lib/src/commands/version.dart
index b5fff30..4d715a9 100644
--- a/packages/flutter_tools/lib/src/commands/version.dart
+++ b/packages/flutter_tools/lib/src/commands/version.dart
@@ -116,8 +116,8 @@
         throwOnError: true,
         workingDirectory: Cache.flutterRoot,
       );
-    } on Exception catch (e) {
-      throwToolExit('Unable to checkout version branch for version $version: $e');
+    } catch (e) {
+      throwToolExit('Unable to checkout version branch for version $version.');
     }
 
     final FlutterVersion flutterVersion = FlutterVersion();
diff --git a/packages/flutter_tools/lib/src/dart/pub.dart b/packages/flutter_tools/lib/src/dart/pub.dart
index 10ae1b9..ff0ef4c 100644
--- a/packages/flutter_tools/lib/src/dart/pub.dart
+++ b/packages/flutter_tools/lib/src/dart/pub.dart
@@ -180,8 +180,7 @@
           retry: true,
         );
         status.stop();
-      // The exception is rethrown, so don't catch only Exceptions.
-      } catch (exception) { // ignore: avoid_catches_without_on_clauses
+      } catch (exception) {
         status.cancel();
         rethrow;
       }
@@ -323,7 +322,7 @@
         globals.stdio.addStdoutStream(process.stdout),
         globals.stdio.addStderrStream(process.stderr),
       ]);
-    } on Exception catch (err, stack) {
+    } catch (err, stack) {
       globals.printTrace('Echoing stdout or stderr from the pub subprocess failed:');
       globals.printTrace('$err\n$stack');
     }
diff --git a/packages/flutter_tools/lib/src/desktop_device.dart b/packages/flutter_tools/lib/src/desktop_device.dart
index fd3d0df..9250f5d 100644
--- a/packages/flutter_tools/lib/src/desktop_device.dart
+++ b/packages/flutter_tools/lib/src/desktop_device.dart
@@ -116,7 +116,7 @@
       final Uri observatoryUri = await observatoryDiscovery.uri;
       onAttached(package, buildMode, process);
       return LaunchResult.succeeded(observatoryUri: observatoryUri);
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('Error waiting for a debug connection: $error');
       return LaunchResult.failed();
     } finally {
diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart
index 3a8be95..b985bff 100644
--- a/packages/flutter_tools/lib/src/devfs.dart
+++ b/packages/flutter_tools/lib/src/devfs.dart
@@ -238,7 +238,7 @@
     List<int> bytes;
     try {
       bytes = await content.contentsAsBytes();
-    } on Exception catch (e) {
+    } catch (e) {
       return e;
     }
     final String fileContents = base64.encode(bytes);
@@ -251,7 +251,7 @@
           'fileContents': fileContents,
         },
       );
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printTrace('DevFS: Failed to write $deviceUri: $error');
     }
   }
@@ -319,7 +319,7 @@
             onError: (dynamic error) { globals.printTrace('error: $error'); },
             cancelOnError: true);
         break;
-      } on Exception catch (error, trace) {
+      } catch (error, trace) {
         if (!_completer.isCompleted) {
           globals.printTrace('Error writing "$deviceUri" to DevFS: $error');
           if (retry > 0) {
@@ -527,7 +527,7 @@
       } on SocketException catch (socketException, stackTrace) {
         globals.printTrace('DevFS sync failed. Lost connection to device: $socketException');
         throw DevFSException('Lost connection to device.', socketException, stackTrace);
-      } on Exception catch (exception, stackTrace) {
+      } catch (exception, stackTrace) {
         globals.printError('Could not update files on device: $exception');
         throw DevFSException('Sync failed', exception, stackTrace);
       }
diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart
index 2595b29..5babf68 100644
--- a/packages/flutter_tools/lib/src/doctor.dart
+++ b/packages/flutter_tools/lib/src/doctor.dart
@@ -189,7 +189,7 @@
       ValidationResult result;
       try {
         result = await asyncGuard<ValidationResult>(() => validator.validate());
-      } on Exception catch (exception) {
+      } catch (exception) {
         // We're generating a summary, so drop the stack trace.
         result = ValidationResult.crash(exception);
       }
@@ -271,10 +271,10 @@
       ValidationResult result;
       try {
         result = await validatorTask.result;
-        status.stop();
-      } on Exception catch (exception, stackTrace) {
+      } catch (exception, stackTrace) {
         result = ValidationResult.crash(exception, stackTrace);
-        status.cancel();
+      } finally {
+        status.stop();
       }
 
       switch (result.type) {
@@ -428,7 +428,7 @@
       _currentSlowWarning = subValidator.validator.slowWarning;
       try {
         results.add(await subValidator.result);
-      } on Exception catch (exception, stackTrace) {
+      } catch (exception, stackTrace) {
         results.add(ValidationResult.crash(exception, stackTrace));
       }
     }
@@ -658,7 +658,7 @@
   const int kExpectedExitCode = 255;
   try {
     return processUtils.runSync(<String>[genSnapshotPath]).exitCode == kExpectedExitCode;
-  } on Exception {
+  } catch (error) {
     return false;
   }
 }
@@ -786,7 +786,7 @@
           String installPath;
           try {
             installPath = globals.fs.file(globals.fs.path.join(dir.path, 'system', '.home')).readAsStringSync();
-          } on Exception {
+          } catch (e) {
             // ignored
           }
           if (installPath != null && globals.fs.isDirectorySync(installPath)) {
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
index 9dfb52f..3efe09a 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
@@ -271,7 +271,7 @@
         packageRepo.deleteSync(recursive: true);
       }
       packageRepo.createSync(recursive: true);
-    } on Exception catch (e) {
+    } catch (e) {
       globals.printError('Failed to create Fuchisa package repo directory '
                  'at ${packageRepo.path}: $e');
       return LaunchResult.failed();
@@ -384,7 +384,7 @@
       globals.printTrace("Removing the tool's package repo: at ${packageRepo.path}");
       try {
         packageRepo.deleteSync(recursive: true);
-      } on Exception catch (e) {
+      } catch (e) {
         globals.printError('Failed to remove Fuchsia package repo directory '
                    'at ${packageRepo.path}: $e.');
       }
@@ -467,9 +467,9 @@
             'Failed to delete screenshot.ppm from the device:\n$deleteResult'
           );
         }
-      } on Exception catch (e) {
+      } catch (_) {
         globals.printError(
-          'Failed to delete screenshot.ppm from the device: $e'
+          'Failed to delete screenshot.ppm from the device'
         );
       }
     }
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
index 59fc738..628e624 100644
--- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
+++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_sdk.dart
@@ -92,7 +92,7 @@
             .transform(const LineSplitter()));
       });
       return controller.stream;
-    } on Exception catch (exception) {
+    } catch (exception) {
       globals.printTrace('$exception');
     }
     return const Stream<String>.empty();
diff --git a/packages/flutter_tools/lib/src/intellij/intellij.dart b/packages/flutter_tools/lib/src/intellij/intellij.dart
index a976c0d..48a9a50 100644
--- a/packages/flutter_tools/lib/src/intellij/intellij.dart
+++ b/packages/flutter_tools/lib/src/intellij/intellij.dart
@@ -67,7 +67,7 @@
       final int start = content.indexOf(versionStartTag);
       final int end = content.indexOf('</version>', start);
       return content.substring(start + versionStartTag.length, end);
-    } on Exception {
+    } catch (_) {
       return null;
     }
   }
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 3d30292..6cdea04 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -448,7 +448,7 @@
       }
     }
     return utf8.decode(out);
-  } on Exception {
+  } catch (_) {
     // Unable to decode line: return as-is.
     return line;
   }
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index 44a688b..d9f8fe3 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -291,7 +291,7 @@
       final IOSApp iosApp = app;
       await SimControl.instance.install(id, iosApp.simulatorBundlePath);
       return true;
-    } on Exception {
+    } catch (e) {
       return false;
     }
   }
@@ -301,7 +301,7 @@
     try {
       await SimControl.instance.uninstall(id, app.id);
       return true;
-    } on Exception {
+    } catch (e) {
       return false;
     }
   }
@@ -395,7 +395,7 @@
       final String bundleIdentifier = globals.plistParser.getValueFromFile(plistPath, PlistParser.kCFBundleIdentifierKey);
 
       await SimControl.instance.launch(id, bundleIdentifier, args);
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('$error');
       return LaunchResult.failed();
     }
@@ -411,7 +411,7 @@
     try {
       final Uri deviceUri = await observatoryDiscovery.uri;
       return LaunchResult.succeeded(observatoryUri: deviceUri);
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('Error waiting for a debug connection: $error');
       return LaunchResult.failed();
     } finally {
diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart
index 9e77b81..108436a 100644
--- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart
+++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart
@@ -344,7 +344,7 @@
       );
       final String out = result.stdout.trim();
       return parseXcodeBuildSettings(out);
-    } on Exception catch (error) {
+    } catch(error) {
       if (error is ProcessException && error.toString().contains('timed out')) {
         BuildEvent('xcode-show-build-settings-timeout',
           command: showBuildSettingsCommand.join(' '),
diff --git a/packages/flutter_tools/lib/src/macos/xcode.dart b/packages/flutter_tools/lib/src/macos/xcode.dart
index 936a589..55d22dc 100644
--- a/packages/flutter_tools/lib/src/macos/xcode.dart
+++ b/packages/flutter_tools/lib/src/macos/xcode.dart
@@ -406,15 +406,11 @@
       final String architecture = deviceProperties['architecture'] as String;
       try {
         cpuArchitecture = getIOSArchForName(architecture);
-      } on Exception {
-        // Fallback to default iOS architecture. Future-proof against a
-        // theoretical version of Xcode that changes this string to something
-        // slightly different like "ARM64".
+      } catch (error) {
+        // Fallback to default iOS architecture. Future-proof against a theoretical version
+        // of Xcode that changes this string to something slightly different like "ARM64".
         cpuArchitecture ??= defaultIOSArchs.first;
-        _logger.printError(
-          'Unknown architecture $architecture, defaulting to '
-          '${getNameForDarwinArch(cpuArchitecture)}',
-        );
+        _logger.printError('Unknown architecture $architecture, defaulting to ${getNameForDarwinArch(cpuArchitecture)}');
       }
     }
     return cpuArchitecture;
diff --git a/packages/flutter_tools/lib/src/reporting/crash_reporting.dart b/packages/flutter_tools/lib/src/reporting/crash_reporting.dart
index 1bffbf7..466ba63 100644
--- a/packages/flutter_tools/lib/src/reporting/crash_reporting.dart
+++ b/packages/flutter_tools/lib/src/reporting/crash_reporting.dart
@@ -126,9 +126,7 @@
       } else {
         globals.printError('Failed to send crash report. Server responded with HTTP status code ${resp.statusCode}');
       }
-    // Catch all exceptions to print the message that makes clear that the
-    // crash logger crashed.
-    } catch (sendError, sendStackTrace) { // ignore: avoid_catches_without_on_clauses
+    } catch (sendError, sendStackTrace) {
       if (sendError is SocketException || sendError is HttpException) {
         globals.printError('Failed to send crash report due to a network error: $sendError');
       } else {
diff --git a/packages/flutter_tools/lib/src/reporting/events.dart b/packages/flutter_tools/lib/src/reporting/events.dart
index 4696550..3bf8139 100644
--- a/packages/flutter_tools/lib/src/reporting/events.dart
+++ b/packages/flutter_tools/lib/src/reporting/events.dart
@@ -195,7 +195,7 @@
         label: parameter,
         value: maxRss,
       );
-    } on Exception catch (error) {
+    } catch (error) {
       // If grabbing the maxRss fails for some reason, just don't send an event.
       globals.printTrace('Querying maxRss failed with error: $error');
     }
diff --git a/packages/flutter_tools/lib/src/reporting/github_template.dart b/packages/flutter_tools/lib/src/reporting/github_template.dart
index 5d958b7..f607a5b 100644
--- a/packages/flutter_tools/lib/src/reporting/github_template.dart
+++ b/packages/flutter_tools/lib/src/reporting/github_template.dart
@@ -136,7 +136,7 @@
       } else {
         globals.printTrace('Failed to shorten GitHub template URL. Server responded with HTTP status code ${response.statusCode}');
       }
-    } on Exception catch (sendError) {
+    } catch (sendError) {
       globals.printTrace('Failed to shorten GitHub template URL: $sendError');
     }
 
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart
index 66d6622..d24e3c7 100644
--- a/packages/flutter_tools/lib/src/resident_runner.dart
+++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -873,7 +873,7 @@
           for (final FlutterView view in device.views) {
             await view.uiIsolate.flutterDebugAllowBanner(false);
           }
-        } on Exception catch (error) {
+        } catch (error) {
           status.cancel();
           globals.printError('Error communicating with Flutter on the device: $error');
           return;
@@ -887,7 +887,7 @@
             for (final FlutterView view in device.views) {
               await view.uiIsolate.flutterDebugAllowBanner(true);
             }
-          } on Exception catch (error) {
+          } catch (error) {
             status.cancel();
             globals.printError('Error communicating with Flutter on the device: $error');
             return;
@@ -899,7 +899,7 @@
       globals.printStatus(
         'Screenshot written to ${globals.fs.path.relative(outputFile.path)} (${sizeKB}kB).',
       );
-    } on Exception catch (error) {
+    } catch (error) {
       status.cancel();
       globals.printError('Error taking screenshot: $error');
     }
@@ -1301,8 +1301,7 @@
     try {
       lastReceivedCommand = command;
       await _commonTerminalInputHandler(command);
-    // Catch all exception since this is doing cleanup and rethrowing.
-    } catch (error, st) { // ignore: avoid_catches_without_on_clauses
+    } catch (error, st) {
       // Don't print stack traces for known error types.
       if (error is! ToolExit) {
         globals.printError('$error\n$st');
diff --git a/packages/flutter_tools/lib/src/run_cold.dart b/packages/flutter_tools/lib/src/run_cold.dart
index 49387c1..6dbc7d6 100644
--- a/packages/flutter_tools/lib/src/run_cold.dart
+++ b/packages/flutter_tools/lib/src/run_cold.dart
@@ -131,7 +131,7 @@
     _didAttach = true;
     try {
       await connectToServiceProtocol();
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('Error connecting to the service protocol: $error');
       // https://github.com/flutter/flutter/issues/33050
       // TODO(blasten): Remove this check once https://issuetracker.google.com/issues/132325318 has been fixed.
diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart
index 4c53ad6..32f98a6 100644
--- a/packages/flutter_tools/lib/src/run_hot.dart
+++ b/packages/flutter_tools/lib/src/run_hot.dart
@@ -186,7 +186,7 @@
         final Map<String, dynamic> firstReport = reports.first;
         await device.updateReloadStatus(validateReloadReport(firstReport, printErrors: false));
       }
-    } on Exception catch (error) {
+    } catch (error) {
       return OperationResult(1, error.toString());
     }
 
@@ -215,25 +215,14 @@
         compileExpression: _compileExpressionService,
         reloadMethod: reloadMethod,
       );
-    // Catches all exceptions, non-Exception objects are rethrown.
-    } catch (error) { // ignore: avoid_catches_without_on_clauses
-      if (error is! Exception && error is! String) {
-        rethrow;
-      }
+    } catch (error) {
       globals.printError('Error connecting to the service protocol: $error');
       // https://github.com/flutter/flutter/issues/33050
-      // TODO(blasten): Remove this check once
-      // https://issuetracker.google.com/issues/132325318 has been fixed.
+      // TODO(blasten): Remove this check once https://issuetracker.google.com/issues/132325318 has been fixed.
       if (await hasDeviceRunningAndroidQ(flutterDevices) &&
           error.toString().contains(kAndroidQHttpConnectionClosedExp)) {
-        globals.printStatus(
-          '🔨 If you are using an emulator running Android Q Beta, '
-          'consider using an emulator running API level 29 or lower.',
-        );
-        globals.printStatus(
-          'Learn more about the status of this issue on '
-          'https://issuetracker.google.com/issues/132325318.',
-        );
+        globals.printStatus('🔨 If you are using an emulator running Android Q Beta, consider using an emulator running API level 29 or lower.');
+        globals.printStatus('Learn more about the status of this issue on https://issuetracker.google.com/issues/132325318.');
       }
       return 2;
     }
@@ -253,7 +242,7 @@
           ),
         );
       }
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('Error initializing DevFS: $error');
       return 3;
     }
@@ -883,7 +872,7 @@
         return OperationResult(errorCode, errorMessage);
       }
       return OperationResult(errorCode, '$errorMessage (error code: $errorCode)');
-    } on Exception catch (error, stackTrace) {
+    } catch (error, stackTrace) {
       globals.printTrace('Hot reload failed: $error\n$stackTrace');
       return OperationResult(1, '$error');
     }
@@ -947,7 +936,7 @@
         () async {
           try {
             await view.uiIsolate.flutterReassemble();
-          } on Exception catch (error) {
+          } catch (error) {
             failedReassemble = true;
             globals.printError('Reassembling ${view.uiIsolate.name} failed: $error');
             return;
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 8342289..4ce44f3 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
@@ -8,7 +8,6 @@
 import 'package:args/command_runner.dart';
 import 'package:completion/completion.dart';
 import 'package:file/file.dart';
-import 'package:meta/meta.dart';
 
 import '../artifacts.dart';
 import '../base/common.dart';
@@ -190,7 +189,7 @@
       if (script.contains('flutter/examples/')) {
         return script.substring(0, script.indexOf('flutter/examples/') + 8);
       }
-    } on Exception catch (error) {
+    } catch (error) {
       // we don't have a logger at the time this is run
       // (which is why we don't use printTrace here)
       print(userMessages.runnerNoRoot('$error'));
@@ -422,7 +421,6 @@
     return EngineBuildPaths(targetEngine: engineBuildPath, hostEngine: engineHostBuildPath);
   }
 
-  @visibleForTesting
   static void initFlutterRoot() {
     Cache.flutterRoot ??= defaultFlutterRoot;
   }
diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart
index 025a455..1e78e9e 100644
--- a/packages/flutter_tools/lib/src/test/flutter_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart
@@ -313,7 +313,7 @@
       final RunnerSuiteController controller = deserializeSuite(path, platform,
         suiteConfig, const PluginEnvironment(), channel, message);
       return await controller.suite;
-    } on Exception catch (err) {
+    } catch (err) {
       /// Rethrow a less confusing error if it is a test incompatibility.
       if (err.toString().contains("type 'Declarer' is not a subtype of type 'Declarer'")) {
         throw UnsupportedError('Package incompatibility between flutter and test packages:\n'
@@ -667,7 +667,7 @@
           }
           break;
       }
-    } on Exception catch (error, stack) {
+    } catch (error, stack) {
       globals.printTrace('test $ourTestCount: error caught during test; ${controllerSinkClosed ? "reporting to console" : "sending to test framework"}');
       if (!controllerSinkClosed) {
         controller.sink.addError(error, stack);
@@ -681,7 +681,7 @@
       for (final Finalizer finalizer in finalizers.reversed) {
         try {
           await finalizer();
-        } on Exception catch (error, stack) {
+        } catch (error, stack) {
           globals.printTrace('test $ourTestCount: error while cleaning up; ${controllerSinkClosed ? "reporting to console" : "sending to test framework"}');
           if (!controllerSinkClosed) {
             controller.sink.addError(error, stack);
@@ -873,7 +873,7 @@
               if (reportObservatoryUri != null) {
                 reportObservatoryUri(uri);
               }
-            } on Exception catch (error) {
+            } catch (error) {
               globals.printError('Could not parse shell observatory port message: $error');
             }
           } else if (line != null) {
diff --git a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart
index 129679e..30885f9 100644
--- a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart
@@ -735,8 +735,7 @@
 
         _controllers.add(controller);
         return await controller.suite;
-      // Not limiting to catching Exception because the exception is rethrown.
-      } catch (_) { // ignore: avoid_catches_without_on_clauses
+      } catch (_) {
         closeIframe();
         rethrow;
       }
@@ -990,7 +989,7 @@
         try {
           bool success = await goldenFileComparator.compare(bytes, goldenKey);
           print(jsonEncode({'success': success}));
-        } on Exception catch (ex) {
+        } catch (ex) {
           print(jsonEncode({'success': false, 'message': '\$ex'}));
         }
       }
diff --git a/packages/flutter_tools/lib/src/tester/flutter_tester.dart b/packages/flutter_tools/lib/src/tester/flutter_tester.dart
index 19cea0f..bd90c60 100644
--- a/packages/flutter_tools/lib/src/tester/flutter_tester.dart
+++ b/packages/flutter_tools/lib/src/tester/flutter_tester.dart
@@ -194,7 +194,7 @@
 
       final Uri observatoryUri = await observatoryDiscovery.uri;
       return LaunchResult.succeeded(observatoryUri: observatoryUri);
-    } on Exception catch (error) {
+    } catch (error) {
       globals.printError('Failed to launch $package: $error');
       return LaunchResult.failed();
     }
diff --git a/packages/flutter_tools/lib/src/tracing.dart b/packages/flutter_tools/lib/src/tracing.dart
index 25402b8..020d068 100644
--- a/packages/flutter_tools/lib/src/tracing.dart
+++ b/packages/flutter_tools/lib/src/tracing.dart
@@ -60,8 +60,7 @@
         if (!done) {
           await whenFirstFrameRendered.future;
         }
-      // The exception is rethrown, so don't catch only Exceptions.
-      } catch (exception) { // ignore: avoid_catches_without_on_clauses
+      } catch (exception) {
         status.cancel();
         rethrow;
       }
diff --git a/packages/flutter_tools/lib/src/version.dart b/packages/flutter_tools/lib/src/version.dart
index 03ab5de..8a87986 100644
--- a/packages/flutter_tools/lib/src/version.dart
+++ b/packages/flutter_tools/lib/src/version.dart
@@ -528,7 +528,7 @@
         } else {
           globals.printTrace('Warning: expected version stamp to be a Map but found: $jsonObject');
         }
-      } on Exception catch (error, stackTrace) {
+      } catch (error, stackTrace) {
         // Do not crash if JSON is malformed.
         globals.printTrace('${error.runtimeType}: $error\n$stackTrace');
       }
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart
index db9f783..f18f802 100644
--- a/packages/flutter_tools/lib/src/vmservice.dart
+++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -145,7 +145,7 @@
           return <String, String>{'type': 'Success'};
         } on rpc.RpcException {
           rethrow;
-        } on Exception catch (e, st) {
+        } catch (e, st) {
           throw rpc.RpcException(rpc_error_code.SERVER_ERROR,
               'Error during Sources Reload: $e\n$st');
         }
@@ -189,7 +189,7 @@
           return <String, String>{'type': 'Success'};
         } on rpc.RpcException {
           rethrow;
-        } on Exception catch (e, st) {
+        } catch (e, st) {
           throw rpc.RpcException(rpc_error_code.SERVER_ERROR,
               'Error during Sources Reload: $e\n$st');
         }
@@ -213,7 +213,7 @@
           return <String, String>{'type': 'Success'};
         } on rpc.RpcException {
           rethrow;
-        } on Exception catch (e, st) {
+        } catch (e, st) {
           throw rpc.RpcException(rpc_error_code.SERVER_ERROR,
               'Error during Hot Restart: $e\n$st');
         }
@@ -266,7 +266,7 @@
             'result': <String, dynamic> {'kernelBytes': kernelBytesBase64}};
         } on rpc.RpcException {
           rethrow;
-        } on Exception catch (e, st) {
+        } catch (e, st) {
           throw rpc.RpcException(rpc_error_code.SERVER_ERROR,
               'Error during expression compilation: $e\n$st');
         }
@@ -625,8 +625,7 @@
           updateFromMap(response);
           completer.complete(this);
         }
-      // Catches all exceptions to propagate to the completer.
-      } catch (e, st) { // ignore: avoid_catches_without_on_clauses
+      } catch (e, st) {
         completer.completeError(e, st);
       }
       _inProgressReload = null;
diff --git a/packages/flutter_tools/lib/src/web/chrome.dart b/packages/flutter_tools/lib/src/web/chrome.dart
index 19166da..f285496 100644
--- a/packages/flutter_tools/lib/src/web/chrome.dart
+++ b/packages/flutter_tools/lib/src/web/chrome.dart
@@ -211,7 +211,7 @@
     if (!skipCheck) {
       try {
         await chrome.chromeConnection.getTabs();
-      } on Exception catch (e) {
+      } catch (e) {
         await chrome.close();
         throwToolExit(
             'Unable to connect to Chrome debug port: ${chrome.debugPort}\n $e');
@@ -235,7 +235,7 @@
       final HttpClientResponse response = await request.close();
       final List<dynamic> jsonObject = await json.fuse(utf8).decoder.bind(response).single as List<dynamic>;
       return base.resolve(jsonObject.first['devtoolsFrontendUrl'] as String);
-    } on Exception {
+    } catch (_) {
       // If we fail to talk to the remote debugger protocol, give up and return
       // the raw URL rather than crashing.
       return base;
diff --git a/packages/flutter_tools/lib/src/web/compile.dart b/packages/flutter_tools/lib/src/web/compile.dart
index e75471a..15a1f6e 100644
--- a/packages/flutter_tools/lib/src/web/compile.dart
+++ b/packages/flutter_tools/lib/src/web/compile.dart
@@ -66,7 +66,7 @@
       }
       throwToolExit('Failed to compile application for the Web.');
     }
-  } on Exception catch (err) {
+  } catch (err) {
     throwToolExit(err.toString());
   } finally {
     status.stop();
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart
index ad93955..ceeedc1 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart
@@ -7,7 +7,6 @@
 import 'package:flutter_tools/src/build_system/build_system.dart';
 import 'package:flutter_tools/src/cache.dart';
 import 'package:flutter_tools/src/commands/assemble.dart';
-import 'package:flutter_tools/src/runner/flutter_command_runner.dart';
 import 'package:mockito/mockito.dart';
 import 'package:flutter_tools/src/globals.dart' as globals;
 
@@ -16,7 +15,6 @@
 import '../../src/testbed.dart';
 
 void main() {
-  FlutterCommandRunner.initFlutterRoot();
   Cache.disableLocking();
   final Testbed testbed = Testbed(overrides: <Type, Generator>{
     BuildSystem: ()  => MockBuildSystem(),
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart
index 488ffa2..9a9535e 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart
@@ -76,7 +76,7 @@
           '--show-test-device',
         ]);
         fail('Expect exception');
-      } on Exception catch (e) {
+      } catch (e) {
         expect(e.toString(), isNot(contains('--fast-start is not supported with --use-application-binary')));
       }
     }, overrides: <Type, Generator>{
@@ -102,7 +102,7 @@
           '--no-pub',
         ]);
         fail('Expect exception');
-      } on Exception catch (e) {
+      } catch (e) {
         expect(e, isInstanceOf<ToolExit>());
       }
       final BufferLogger bufferLogger = globals.logger as BufferLogger;
@@ -127,7 +127,7 @@
           '--no-pub',
         ]);
         fail('Expect exception');
-      } on Exception catch (e) {
+      } catch (e) {
         expect(e, isInstanceOf<ToolExit>());
         expect(e.toString(), contains('No pubspec.yaml file found'));
       }
@@ -221,8 +221,8 @@
         } on ToolExit catch (e) {
           // We expect a ToolExit because no devices are attached
           expect(e.message, null);
-        } on Exception catch (e) {
-          fail('ToolExit expected, got $e');
+        } catch (e) {
+          fail('ToolExit expected');
         }
 
         verifyInOrder(<void>[
@@ -293,8 +293,8 @@
         } on ToolExit catch (e) {
           // We expect a ToolExit because app does not start
           expect(e.message, null);
-        } on Exception catch (e) {
-          fail('ToolExit expected, got $e');
+        } catch (e) {
+          fail('ToolExit expected');
         }
         final List<dynamic> captures = verify(mockUsage.sendCommand(
           captureAny,
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart
index 972b433..482c379 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart
@@ -163,7 +163,7 @@
       try {
         await command.getTags();
         fail('ToolExit expected');
-      } on Exception catch (e) {
+      } catch(e) {
         expect(e, isA<ToolExit>());
       }
     }, overrides: <Type, Generator>{
diff --git a/packages/flutter_tools/test/general.shard/android/android_device_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_test.dart
index 982550d..9097626 100644
--- a/packages/flutter_tools/test/general.shard/android/android_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/android/android_device_test.dart
@@ -584,9 +584,7 @@
       final AndroidDevice device = AndroidDevice('emulator-5555');
       expect(await device.emulatorId, isNull);
     }, overrides: <Type, Generator>{
-      AndroidConsoleSocketFactory: () {
-        return (String host, int port) => throw Exception('Fake socket error');
-      },
+      AndroidConsoleSocketFactory: () => (String host, int port) => throw 'Fake socket error',
       ProcessManager: () => mockProcessManager,
     });
 
diff --git a/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart b/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart
index 8f12b4e..b1cfd66 100644
--- a/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart
+++ b/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart
@@ -80,13 +80,6 @@
       when(globals.processManager.runSync(<String>[sdk.sdkManagerPath, '--version'],
           environment: argThat(isNotNull,  named: 'environment')))
           .thenReturn(ProcessResult(1, 0, '26.1.1\n', ''));
-      if (globals.platform.isMacOS) {
-        when(globals.processManager.runSync(
-          <String>['/usr/libexec/java_home'],
-          workingDirectory: anyNamed('workingDirectory'),
-          environment: anyNamed('environment'),
-        )).thenReturn(ProcessResult(0, 0, '', ''));
-      }
       expect(sdk.sdkManagerVersion, '26.1.1');
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
@@ -119,13 +112,6 @@
       when(globals.processManager.runSync(<String>[sdk.sdkManagerPath, '--version'],
           environment: argThat(isNotNull,  named: 'environment')))
           .thenReturn(ProcessResult(1, 1, '26.1.1\n', 'Mystery error'));
-      if (globals.platform.isMacOS) {
-        when(globals.processManager.runSync(
-          <String>['/usr/libexec/java_home'],
-          workingDirectory: anyNamed('workingDirectory'),
-          environment: anyNamed('environment'),
-        )).thenReturn(ProcessResult(0, 0, '', ''));
-      }
       expect(sdk.sdkManagerVersion, isNull);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_package_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_package_test.dart
index 515d129..e75dde6 100644
--- a/packages/flutter_tools/test/general.shard/asset_bundle_package_test.dart
+++ b/packages/flutter_tools/test/general.shard/asset_bundle_package_test.dart
@@ -70,32 +70,26 @@
   Future<void> buildAndVerifyAssets(
     List<String> assets,
     List<String> packages,
-    String expectedAssetManifest, {
-    bool expectExists = true,
-  }) async {
+    String expectedAssetManifest,
+  ) async {
     final AssetBundle bundle = AssetBundleFactory.instance.createBundle();
     await bundle.build(manifestPath: 'pubspec.yaml');
 
     for (final String packageName in packages) {
       for (final String asset in assets) {
         final String entryKey = Uri.encodeFull('packages/$packageName/$asset');
-        expect(bundle.entries.containsKey(entryKey), expectExists,
-          reason: 'Cannot find key on bundle: $entryKey');
-        if (expectExists) {
-          expect(
-            utf8.decode(await bundle.entries[entryKey].contentsAsBytes()),
-            asset,
-          );
-        }
+        expect(bundle.entries.containsKey(entryKey), true, reason: 'Cannot find key on bundle: $entryKey');
+        expect(
+          utf8.decode(await bundle.entries[entryKey].contentsAsBytes()),
+          asset,
+        );
       }
     }
 
-    if (expectExists) {
-      expect(
-        utf8.decode(await bundle.entries['AssetManifest.json'].contentsAsBytes()),
-        expectedAssetManifest,
-      );
-    }
+    expect(
+      utf8.decode(await bundle.entries['AssetManifest.json'].contentsAsBytes()),
+      expectedAssetManifest,
+    );
   }
 
   void writeAssets(String path, List<String> assets) {
@@ -666,15 +660,24 @@
         assets: assetOnManifest,
       );
 
-      await buildAndVerifyAssets(
-        assetOnManifest,
-        <String>['test_package'],
-        null,
-        expectExists: false,
-      );
+      try {
+        await buildAndVerifyAssets(
+          assetOnManifest,
+          <String>['test_package'],
+          null,
+        );
+
+        final Function watchdog = () async {
+          assert(false, 'Code failed to detect missing directory. Test failed.');
+        };
+        watchdog();
+      } catch (e) {
+        // Test successful
+      }
     }, overrides: <Type, Generator>{
       FileSystem: () => testFileSystem,
       ProcessManager: () => FakeProcessManager.any(),
     });
+
   });
 }
diff --git a/packages/flutter_tools/test/general.shard/base/async_guard_test.dart b/packages/flutter_tools/test/general.shard/base/async_guard_test.dart
index 681d7eb..f0c46b7 100644
--- a/packages/flutter_tools/test/general.shard/base/async_guard_test.dart
+++ b/packages/flutter_tools/test/general.shard/base/async_guard_test.dart
@@ -197,7 +197,7 @@
         );
         try {
           await f;
-        } on String {
+        } catch (e) {
           caughtByHandler = true;
         }
         if (!completer.isCompleted) {
@@ -235,7 +235,7 @@
         );
         try {
           await f;
-        } on String {
+        } catch (e) {
           caughtByHandler = true;
         }
         if (!completer.isCompleted) {
@@ -275,7 +275,7 @@
         );
         try {
           await f;
-        } on String {
+        } catch (e) {
           caughtByHandler = true;
         }
         if (!completer.isCompleted) {
diff --git a/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart b/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart
index cef022c..f57c970 100644
--- a/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart
+++ b/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart
@@ -249,7 +249,7 @@
         globals.fs.file('a.dart').createSync();
         expect(
           () => Fingerprint.fromBuildInputs(<String, String>{}, <String>['a.dart', 'b.dart']),
-          throwsException,
+          throwsArgumentError,
         );
       }, overrides: <Type, Generator>{
         FileSystem: () => fs,
@@ -328,7 +328,7 @@
           'properties': <String, String>{},
           'files': <String, String>{},
         });
-        expect(() => Fingerprint.fromJson(jsonString), throwsException);
+        expect(() => Fingerprint.fromJson(jsonString), throwsArgumentError);
       }, overrides: <Type, Generator>{
         FlutterVersion: () => mockVersion,
       });
@@ -338,7 +338,7 @@
           'properties': <String, String>{},
           'files': <String, String>{},
         });
-        expect(() => Fingerprint.fromJson(jsonString), throwsException);
+        expect(() => Fingerprint.fromJson(jsonString), throwsArgumentError);
       }, overrides: <Type, Generator>{
         FlutterVersion: () => mockVersion,
       });
diff --git a/packages/flutter_tools/test/general.shard/base/signals_test.dart b/packages/flutter_tools/test/general.shard/base/signals_test.dart
index 3c7f9f2..a3369d6 100644
--- a/packages/flutter_tools/test/general.shard/base/signals_test.dart
+++ b/packages/flutter_tools/test/general.shard/base/signals_test.dart
@@ -61,9 +61,8 @@
     });
 
     testUsingContext('signal handler error goes on error stream', () async {
-      final Exception exn = Exception('Error');
       signals.addHandler(signalUnderTest, (ProcessSignal s) {
-        throw exn;
+        throw 'Error';
       });
 
       final Completer<void> completer = Completer<void>();
@@ -76,7 +75,7 @@
       controller.add(mockSignal);
       await completer.future;
       await errSub.cancel();
-      expect(errList, contains(exn));
+      expect(errList, <Object>['Error']);
     }, overrides: <Type, Generator>{
       Signals: () => Signals(),
     });
diff --git a/packages/flutter_tools/test/general.shard/build_info_test.dart b/packages/flutter_tools/test/general.shard/build_info_test.dart
index 6fdd169..6bff476 100644
--- a/packages/flutter_tools/test/general.shard/build_info_test.dart
+++ b/packages/flutter_tools/test/general.shard/build_info_test.dart
@@ -91,6 +91,6 @@
     expect(getIOSArchForName('arm64'), DarwinArch.arm64);
     expect(getIOSArchForName('arm64e'), DarwinArch.arm64);
     expect(getIOSArchForName('x86_64'), DarwinArch.x86_64);
-    expect(() => getIOSArchForName('bogus'), throwsException);
+    expect(() => getIOSArchForName('bogus'), throwsAssertionError);
   });
 }
diff --git a/packages/flutter_tools/test/general.shard/cache_test.dart b/packages/flutter_tools/test/general.shard/cache_test.dart
index 7af793f..2c29c7e 100644
--- a/packages/flutter_tools/test/general.shard/cache_test.dart
+++ b/packages/flutter_tools/test/general.shard/cache_test.dart
@@ -231,7 +231,7 @@
           null,
         });
         fail('Mock thrown exception expected');
-      } on Exception {
+      } catch (e) {
         verify(artifact1.update());
         // Don't continue when retrieval fails.
         verifyNever(artifact2.update());
diff --git a/packages/flutter_tools/test/general.shard/commands/build_apk_test.dart b/packages/flutter_tools/test/general.shard/commands/build_apk_test.dart
index e0f8fb0..fab0c2b 100644
--- a/packages/flutter_tools/test/general.shard/commands/build_apk_test.dart
+++ b/packages/flutter_tools/test/general.shard/commands/build_apk_test.dart
@@ -152,26 +152,6 @@
         .thenAnswer((_) => Future<Process>.value(process));
       when(mockProcessManager.canRun(any)).thenReturn(false);
 
-      when(mockProcessManager.runSync(
-        argThat(contains(contains('gen_snapshot'))),
-        workingDirectory: anyNamed('workingDirectory'),
-        environment: anyNamed('environment'),
-      )).thenReturn(ProcessResult(0, 255, '', ''));
-
-      when(mockProcessManager.runSync(
-        <String>['/usr/bin/xcode-select', '--print-path'],
-        workingDirectory: anyNamed('workingDirectory'),
-        environment: anyNamed('environment'),
-      )).thenReturn(ProcessResult(0, 0, '', ''));
-
-      when(mockProcessManager.run(
-        <String>['which', 'pod'],
-        workingDirectory: anyNamed('workingDirectory'),
-        environment: anyNamed('environment'),
-      )).thenAnswer((_) {
-        return Future<ProcessResult>.value(ProcessResult(0, 0, '', ''));
-      });
-
       mockAndroidSdk = MockAndroidSdk();
       when(mockAndroidSdk.directory).thenReturn('irrelevant');
     });
diff --git a/packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart b/packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart
index f0c3e99..1dec6a0 100644
--- a/packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart
+++ b/packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart
@@ -9,11 +9,12 @@
 import 'package:flutter_tools/src/android/android_sdk.dart';
 import 'package:flutter_tools/src/base/context.dart';
 import 'package:flutter_tools/src/base/file_system.dart';
+
 import 'package:flutter_tools/src/cache.dart';
 import 'package:flutter_tools/src/commands/build_appbundle.dart';
-import 'package:flutter_tools/src/globals.dart' as globals;
 import 'package:flutter_tools/src/project.dart';
 import 'package:flutter_tools/src/reporting/reporting.dart';
+import 'package:flutter_tools/src/globals.dart' as globals;
 import 'package:mockito/mockito.dart';
 import 'package:process/process.dart';
 
@@ -134,26 +135,6 @@
         .thenAnswer((_) => Future<Process>.value(process));
       when(mockProcessManager.canRun(any)).thenReturn(false);
 
-      when(mockProcessManager.runSync(
-        argThat(contains(contains('gen_snapshot'))),
-        workingDirectory: anyNamed('workingDirectory'),
-        environment: anyNamed('environment'),
-      )).thenReturn(ProcessResult(0, 255, '', ''));
-
-      when(mockProcessManager.runSync(
-        <String>['/usr/bin/xcode-select', '--print-path'],
-        workingDirectory: anyNamed('workingDirectory'),
-        environment: anyNamed('environment'),
-      )).thenReturn(ProcessResult(0, 0, '', ''));
-
-      when(mockProcessManager.run(
-        <String>['which', 'pod'],
-        workingDirectory: anyNamed('workingDirectory'),
-        environment: anyNamed('environment'),
-      )).thenAnswer((_) {
-        return Future<ProcessResult>.value(ProcessResult(0, 0, '', ''));
-      });
-
       mockAndroidSdk = MockAndroidSdk();
       when(mockAndroidSdk.validateSdkWellFormed()).thenReturn(const <String>[]);
       when(mockAndroidSdk.directory).thenReturn('irrelevant');
diff --git a/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart b/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart
index 093008b..cd51b15 100644
--- a/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart
+++ b/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart
@@ -327,7 +327,8 @@
       try {
         await pub.get(context: PubContext.flutterTests, checkLastModified: true);
         expect(true, isFalse, reason: 'pub.get did not throw');
-      } on ToolExit catch (error) {
+      } catch (error) {
+        expect(error, isA<Exception>());
         expect(error.message, '/: unexpected concurrent modification of pubspec.yaml while running pub.');
       }
       expect(testLogger.statusText, 'Running "flutter pub get" in /...\n');
diff --git a/packages/flutter_tools/test/general.shard/devfs_test.dart b/packages/flutter_tools/test/general.shard/devfs_test.dart
index e09934e..ce6e0e5 100644
--- a/packages/flutter_tools/test/general.shard/devfs_test.dart
+++ b/packages/flutter_tools/test/general.shard/devfs_test.dart
@@ -136,7 +136,7 @@
       const int kFailedAttempts = 5;
       when(httpRequest.close()).thenAnswer((Invocation invocation) {
         if (nRequest++ < kFailedAttempts) {
-          throw Exception('Connection resert by peer');
+          throw 'Connection resert by peer';
         }
         return Future<HttpClientResponse>.value(httpClientResponse);
       });
diff --git a/packages/flutter_tools/test/general.shard/flutter_platform_test.dart b/packages/flutter_tools/test/general.shard/flutter_platform_test.dart
index 6a0a98b..13ef1af 100644
--- a/packages/flutter_tools/test/general.shard/flutter_platform_test.dart
+++ b/packages/flutter_tools/test/general.shard/flutter_platform_test.dart
@@ -46,17 +46,8 @@
 
       Future<Map<String, String>> captureEnvironment() async {
         flutterPlatform.loadChannel('test1.dart', MockSuitePlatform());
-        when(mockProcessManager.start(
-          any,
-          environment: anyNamed('environment')),
-        ).thenAnswer((_) {
-          return Future<Process>.value(MockProcess());
-        });
         await untilCalled(mockProcessManager.start(any, environment: anyNamed('environment')));
-        final VerificationResult toVerify = verify(mockProcessManager.start(
-          any,
-          environment: captureAnyNamed('environment'),
-        ));
+        final VerificationResult toVerify = verify(mockProcessManager.start(any, environment: captureAnyNamed('environment')));
         expect(toVerify.captured, hasLength(1));
         expect(toVerify.captured.first, isA<Map<String, String>>());
         return toVerify.captured.first as Map<String, String>;
@@ -155,8 +146,6 @@
 
 class MockProcessManager extends Mock implements ProcessManager {}
 
-class MockProcess extends Mock implements Process {}
-
 class MockPlatform extends Mock implements Platform {}
 
 class MockHttpServer extends Mock implements HttpServer {}
diff --git a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart
index 1f48f0b..66b6922 100644
--- a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart
+++ b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart
@@ -476,7 +476,7 @@
 
       try {
         await device.takeScreenshot(globals.fs.file('file.ppm'));
-      } on Exception {
+      } catch (_) {
         assert(false);
       }
       expect(
@@ -534,8 +534,8 @@
 
       try {
         await device.takeScreenshot(globals.fs.file('file.ppm'));
-      } on Exception catch (e) {
-        fail('Unexpected exception: $e');
+      } catch (_) {
+        assert(false);
       }
     }, overrides: <Type, Generator>{
       ProcessManager: () => mockProcessManager,
diff --git a/packages/flutter_tools/test/general.shard/ios/code_signing_test.dart b/packages/flutter_tools/test/general.shard/ios/code_signing_test.dart
index f00d5aa..7fc9fd0 100644
--- a/packages/flutter_tools/test/general.shard/ios/code_signing_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/code_signing_test.dart
@@ -229,9 +229,9 @@
       Map<String, String> signingConfigs;
       try {
         signingConfigs = await getCodeSigningIdentityDevelopmentTeam(iosApp: app);
-      } on Exception catch (e) {
+      } catch (e) {
         // This should not throw
-        fail('Code signing threw: $e');
+        expect(true, false);
       }
 
       expect(testLogger.statusText, contains('Apple Development: Profile 1 (1111AAAA11)'));
diff --git a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart
index 1bfb6e0..441058c 100644
--- a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart
@@ -54,7 +54,7 @@
       expect(portForwarder.forwardedPorts.length, 2);
       try {
         await portForwarder.dispose();
-      } on Exception catch (e) {
+      } catch (e) {
         fail('Encountered exception: $e');
       }
       expect(portForwarder.forwardedPorts.length, 0);
diff --git a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart
index 8d1b459..ebfd87b 100644
--- a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart
+++ b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart
@@ -355,7 +355,7 @@
           engineDir: 'engine/path',
         );
         fail('ToolExit expected');
-      } on Exception catch (e) {
+      } catch(e) {
         expect(e, isA<ToolExit>());
         verifyNever(mockProcessManager.run(
         argThat(containsAllInOrder(<String>['pod', 'install'])),
@@ -404,7 +404,7 @@
           engineDir: 'engine/path',
         );
         fail('ToolExit expected');
-      } on Exception catch (e) {
+      } catch (e) {
         expect(e, isA<ToolExit>());
         expect(
           testLogger.errorText,
diff --git a/packages/flutter_tools/test/integration.shard/test_driver.dart b/packages/flutter_tools/test/integration.shard/test_driver.dart
index 586d9eb..d361d16 100644
--- a/packages/flutter_tools/test/integration.shard/test_driver.dart
+++ b/packages/flutter_tools/test/integration.shard/test_driver.dart
@@ -528,7 +528,7 @@
         // have already completed.
         _currentRunningAppId = (await started)['params']['appId'] as String;
         prematureExitGuard.complete();
-      } on Exception catch (error, stackTrace) {
+      } catch (error, stackTrace) {
         prematureExitGuard.completeError(error, stackTrace);
       }
     }());
@@ -732,7 +732,7 @@
   Map<String, dynamic> _parseJsonResponse(String line) {
     try {
       return castStringKeyedMap(json.decode(line));
-    } on Exception {
+    } catch (e) {
       // Not valid JSON, so likely some other output.
       return null;
     }
@@ -771,7 +771,7 @@
     try {
       final Map<String, dynamic> response = castStringKeyedMap(json.decode(line)[0]);
       return response;
-    } on Exception {
+    } catch (e) {
       // Not valid JSON, so likely some other output that was surrounded by [brackets]
       return null;
     }
diff --git a/packages/flutter_tools/test/src/common.dart b/packages/flutter_tools/test/src/common.dart
index 763c9db..fb446bc 100644
--- a/packages/flutter_tools/test/src/common.dart
+++ b/packages/flutter_tools/test/src/common.dart
@@ -139,8 +139,7 @@
     fail('ToolExit expected, but nothing thrown');
   } on ToolExit catch(e) {
     expect(e.message, messageMatcher);
-  // Catch all exceptions to give a better test failure message.
-  } catch (e, trace) { // ignore: avoid_catches_without_on_clauses
+  } catch(e, trace) {
     fail('ToolExit expected, got $e\n$trace');
   }
 }
diff --git a/packages/flutter_tools/test/src/context.dart b/packages/flutter_tools/test/src/context.dart
index 868f5a6..cc21105 100644
--- a/packages/flutter_tools/test/src/context.dart
+++ b/packages/flutter_tools/test/src/context.dart
@@ -151,8 +151,7 @@
                   return await testMethod();
                 },
               );
-            // This catch rethrows, so doesn't need to catch only Exception.
-            } catch (error) { // ignore: avoid_catches_without_on_clauses
+            } catch (error) {
               _printBufferedErrors(context);
               rethrow;
             }
diff --git a/packages/flutter_tools/test/src/mocks.dart b/packages/flutter_tools/test/src/mocks.dart
index 08c3c77..dc6bab5 100644
--- a/packages/flutter_tools/test/src/mocks.dart
+++ b/packages/flutter_tools/test/src/mocks.dart
@@ -398,8 +398,7 @@
       (List<int> data) {
         try {
           add(data);
-        // Catches all exceptions to propagate them to the completer.
-        } catch (err, stack) { // ignore: avoid_catches_without_on_clauses
+        } catch (err, stack) {
           sub.cancel();
           completer.completeError(err, stack);
         }
diff --git a/packages/flutter_tools/tool/tool_coverage.dart b/packages/flutter_tools/tool/tool_coverage.dart
index 3fb65d0..9f1816d 100644
--- a/packages/flutter_tools/tool/tool_coverage.dart
+++ b/packages/flutter_tools/tool/tool_coverage.dart
@@ -73,8 +73,7 @@
     Isolate isolate;
     try {
       isolate = await _spawnIsolate(codePath, receivePort.sendPort);
-    // This catch rethrows, so doesn't need to catch only Exception.
-    } catch (error) { // ignore: avoid_catches_without_on_clauses
+    } catch (error) {
       receivePort.close();
       rethrow;
     }