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/lib/src/version.dart b/packages/flutter_tools/lib/src/version.dart
index c3d9364..5c7702a 100644
--- a/packages/flutter_tools/lib/src/version.dart
+++ b/packages/flutter_tools/lib/src/version.dart
@@ -434,7 +434,7 @@
       // Attempt to parse stamp JSON.
       try {
         final dynamic jsonObject = json.decode(versionCheckStamp);
-        if (jsonObject is Map) {
+        if (jsonObject is Map<String, dynamic>) {
           return fromJson(jsonObject);
         } else {
           printTrace('Warning: expected version stamp to be a Map but found: $jsonObject');
@@ -452,7 +452,7 @@
   static VersionCheckStamp fromJson(Map<String, dynamic> jsonObject) {
     DateTime readDateTime(String property) {
       return jsonObject.containsKey(property)
-          ? DateTime.parse(jsonObject[property])
+          ? DateTime.parse(jsonObject[property] as String)
           : null;
     }
 
@@ -536,7 +536,7 @@
   final ProcessResult results = processManager.runSync(command, workingDirectory: Cache.flutterRoot);
 
   if (results.exitCode == 0) {
-    return results.stdout.trim();
+    return (results.stdout as String).trim();
   }
 
   if (!lenient) {
@@ -564,7 +564,7 @@
   final ProcessResult results = await processManager.run(command, workingDirectory: Cache.flutterRoot);
 
   if (results.exitCode == 0) {
-    return results.stdout.trim();
+    return (results.stdout as String).trim();
   }
 
   throw VersionCheckError(