Revert "Revert "Roll engine to fed2ea458ed49088d33eddabc546ba56d600c717 (includes dart roll) again (#19277)" (#19295)" (#19322)

This reverts commit cc122f1672d4b7e0c0734be34a155997463e3b56.
diff --git a/packages/flutter_tools/lib/src/commands/build_aot.dart b/packages/flutter_tools/lib/src/commands/build_aot.dart
index 2f093fe..5bf9bb8 100644
--- a/packages/flutter_tools/lib/src/commands/build_aot.dart
+++ b/packages/flutter_tools/lib/src/commands/build_aot.dart
@@ -101,7 +101,7 @@
       // Build AOT snapshot.
       if (platform == TargetPlatform.ios) {
         // Determine which iOS architectures to build for.
-        final Iterable<IOSArch> buildArchs = argResults['ios-arch'].map(getIOSArchForName);
+        final Iterable<IOSArch> buildArchs = argResults['ios-arch'].map<IOSArch>(getIOSArchForName);
         final Map<IOSArch, String> iosBuilds = <IOSArch, String>{};
         for (IOSArch arch in buildArchs)
           iosBuilds[arch] = fs.path.join(outputPath, getNameForIOSArch(arch));
diff --git a/packages/flutter_tools/lib/src/flutter_manifest.dart b/packages/flutter_tools/lib/src/flutter_manifest.dart
index 5a26f6d..8d848b1 100644
--- a/packages/flutter_tools/lib/src/flutter_manifest.dart
+++ b/packages/flutter_tools/lib/src/flutter_manifest.dart
@@ -102,7 +102,7 @@
 
   /// Properties defining how to expose this Flutter project as a module
   /// for integration into an unspecified host app.
-  Map<String, dynamic> get moduleDescriptor {
+  YamlMap get moduleDescriptor {
     return _flutterDescriptor.containsKey('module')
         ? _flutterDescriptor['module'] ?? const <String, dynamic>{}
         : null;
diff --git a/packages/flutter_tools/lib/src/tracing.dart b/packages/flutter_tools/lib/src/tracing.dart
index 79ebc69..132cf0a 100644
--- a/packages/flutter_tools/lib/src/tracing.dart
+++ b/packages/flutter_tools/lib/src/tracing.dart
@@ -93,7 +93,8 @@
   );
 
   int extractInstantEventTimestamp(String eventName) {
-    final List<Map<String, dynamic>> events = timeline['traceEvents'];
+    final List<Map<String, dynamic>> events =
+        new List<Map<String, dynamic>>.from(timeline['traceEvents']);
     final Map<String, dynamic> event = events.firstWhere(
             (Map<String, dynamic> event) => event['name'] == eventName, orElse: () => null
     );
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart
index d2c05d8..cc2767c 100644
--- a/packages/flutter_tools/lib/src/vmservice.dart
+++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -161,8 +161,10 @@
         if (expression is! String || expression.isEmpty)
           throw new rpc.RpcException.invalidParams(
               'Invalid \'expression\': $expression');
-        final List<String> definitions = params['definitions'].asList;
-        final List<String> typeDefinitions = params['typeDefinitions'].asList;
+        final List<String> definitions =
+            new List<String>.from(params['definitions'].asList);
+        final List<String> typeDefinitions =
+            new List<String>.from(params['typeDefinitions'].asList);
         final String libraryUri = params['libraryUri'].asString;
         final String klass = params['klass'].exists ? params['klass'].asString : null;
         final bool isStatic = params['isStatic'].asBoolOr(false);
@@ -350,6 +352,7 @@
       // If the VM doesn't yet have a view, wait for one to show up.
       printTrace('Waiting for Flutter view');
       await new Future<Null>.delayed(new Duration(seconds: attemptSeconds));
+      await getVM();
       await vm.refreshViews();
     }
   }