implicit-casts:false on flutter_tools/lib (#44447)

* implicit-casts:false on flutter_tools/lib

* address review comments

* use castStringKeyedMap

* introduce {bool,string,strings}Arg

* fix ci
diff --git a/packages/flutter_tools/bin/fuchsia_asset_builder.dart b/packages/flutter_tools/bin/fuchsia_asset_builder.dart
index f6974c7..bf98aad 100644
--- a/packages/flutter_tools/bin/fuchsia_asset_builder.dart
+++ b/packages/flutter_tools/bin/fuchsia_asset_builder.dart
@@ -57,11 +57,11 @@
   }
   Cache.flutterRoot = platform.environment['FLUTTER_ROOT'];
 
-  final String assetDir = argResults[_kOptionAsset];
+  final String assetDir = argResults[_kOptionAsset] as String;
   final AssetBundle assets = await buildAssets(
-    manifestPath: argResults[_kOptionManifest] ?? defaultManifestPath,
+    manifestPath: argResults[_kOptionManifest] as String ?? defaultManifestPath,
     assetDirPath: assetDir,
-    packagesPath: argResults[_kOptionPackages],
+    packagesPath: argResults[_kOptionPackages] as String,
     includeDefaultFonts: false,
   );
 
@@ -77,8 +77,8 @@
   });
   await Future.wait<void>(calls);
 
-  final String outputMan = argResults[_kOptionAssetManifestOut];
-  await writeFuchsiaManifest(assets, argResults[_kOptionAsset], outputMan, argResults[_kOptionComponentName]);
+  final String outputMan = argResults[_kOptionAssetManifestOut] as String;
+  await writeFuchsiaManifest(assets, argResults[_kOptionAsset] as String, outputMan, argResults[_kOptionComponentName] as String);
 }
 
 Future<void> writeFuchsiaManifest(AssetBundle assets, String outputBase, String fileDest, String componentName) async {
diff --git a/packages/flutter_tools/bin/fuchsia_attach.dart b/packages/flutter_tools/bin/fuchsia_attach.dart
index df16901..bfbf0f6 100644
--- a/packages/flutter_tools/bin/fuchsia_attach.dart
+++ b/packages/flutter_tools/bin/fuchsia_attach.dart
@@ -35,13 +35,13 @@
 
 Future<void> main(List<String> args) async {
   final ArgResults argResults = parser.parse(args);
-  final bool verbose = argResults['verbose'];
-  final String target = argResults['target'];
+  final bool verbose = argResults['verbose'] as bool;
+  final String target = argResults['target'] as String;
   final List<String> targetParts = _extractPathAndName(target);
   final String path = targetParts[0];
   final String name = targetParts[1];
   final File dartSdk = fs.file(argResults['dart-sdk']);
-  final String buildDirectory = argResults['build-dir'];
+  final String buildDirectory = argResults['build-dir'] as String;
   final File frontendServer = fs.file('$buildDirectory/host_x64/gen/third_party/flutter/frontend_server/frontend_server_tool.snapshot');
   final File sshConfig = fs.file('$buildDirectory/ssh-keys/ssh_config');
   final File devFinder = fs.file(argResults['dev-finder']);
@@ -69,13 +69,13 @@
   }
 
   // Check for a package with a lib directory.
-  final String entrypoint = argResults['entrypoint'];
+  final String entrypoint = argResults['entrypoint'] as String;
   String targetFile = 'lib/$entrypoint';
   if (!fs.file(targetFile).existsSync()) {
     // Otherwise assume the package is flat.
     targetFile = entrypoint;
   }
-  final String deviceName = argResults['device'];
+  final String deviceName = argResults['device'] as String;
   final List<String> command = <String>[
     'attach',
     '--module',
diff --git a/packages/flutter_tools/bin/fuchsia_tester.dart b/packages/flutter_tools/bin/fuchsia_tester.dart
index 5abd8a4..c6d32ff 100644
--- a/packages/flutter_tools/bin/fuchsia_tester.dart
+++ b/packages/flutter_tools/bin/fuchsia_tester.dart
@@ -86,7 +86,7 @@
       throwToolExit('Cannot find SDK files at ${sdkRootSrc.path}');
     }
     Directory coverageDirectory;
-    final String coverageDirectoryPath = argResults[_kOptionCoverageDirectory];
+    final String coverageDirectoryPath = argResults[_kOptionCoverageDirectory] as String;
     if (coverageDirectoryPath != null) {
       if (!fs.isDirectorySync(coverageDirectoryPath)) {
         throwToolExit('Cannot find coverage directory at $coverageDirectoryPath');
@@ -111,11 +111,11 @@
     fs.link(sdkRootDest.childFile('platform.dill').path).createSync('platform_strong.dill');
 
     PackageMap.globalPackagesPath =
-        fs.path.normalize(fs.path.absolute(argResults[_kOptionPackages]));
+        fs.path.normalize(fs.path.absolute(argResults[_kOptionPackages] as String));
 
     Directory testDirectory;
     CoverageCollector collector;
-    if (argResults['coverage']) {
+    if (argResults['coverage'] as bool) {
       collector = CoverageCollector(
         libraryPredicate: (String libraryName) {
           // If we have a specified coverage directory then accept all libraries.
@@ -134,7 +134,7 @@
 
     final Map<String, String> tests = <String, String>{};
     final List<Map<String, dynamic>> jsonList = List<Map<String, dynamic>>.from(
-      json.decode(fs.file(argResults[_kOptionTests]).readAsStringSync()));
+      json.decode(fs.file(argResults[_kOptionTests]).readAsStringSync()) as List<Map<String, dynamic>>);
     for (Map<String, dynamic> map in jsonList) {
       final String source = fs.file(map['source']).resolveSymbolicLinksSync();
       final String dill = fs.file(map['dill']).resolveSymbolicLinksSync();
@@ -150,7 +150,7 @@
       buildMode: BuildMode.debug,
       precompiledDillFiles: tests,
       concurrency: math.max(1, platform.numberOfProcessors - 2),
-      icudtlPath: fs.path.absolute(argResults[_kOptionIcudtl]),
+      icudtlPath: fs.path.absolute(argResults[_kOptionIcudtl] as String),
       coverageDirectory: coverageDirectory,
     );
 
@@ -163,7 +163,7 @@
       } else {
         fs.currentDirectory = testDirectory;
       }
-      if (!await collector.collectCoverageData(argResults[_kOptionCoveragePath], coverageDirectory: coverageDirectory)) {
+      if (!await collector.collectCoverageData(argResults[_kOptionCoveragePath] as String, coverageDirectory: coverageDirectory)) {
         throwToolExit('Failed to collect coverage data');
       }
     }