Add flutter create for the web (#34018)

diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 13a1be5..f50d5b9 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -143,6 +143,14 @@
       defaultsTo: false,
       help: 'Generate a project using the AndroidX support libraries',
     );
+    argParser.addFlag(
+      'web',
+      negatable: true,
+      defaultsTo: false,
+      hide: true,
+      help: '(Experimental) Generate the web specific tooling. Only supported '
+        'on non-stable branches',
+    );
   }
 
   @override
@@ -367,6 +375,7 @@
       androidX: argResults['androidx'],
       androidLanguage: argResults['android-language'],
       iosLanguage: argResults['ios-language'],
+      web: argResults['web'],
     );
 
     final String relativeDirPath = fs.path.relative(projectDirPath);
@@ -576,6 +585,7 @@
     String flutterRoot,
     bool renderDriverTest = false,
     bool withPluginHook = false,
+    bool web = false,
   }) {
     flutterRoot = fs.path.normalize(flutterRoot);
 
@@ -603,6 +613,7 @@
       'iosLanguage': iosLanguage,
       'flutterRevision': FlutterVersion.instance.frameworkRevision,
       'flutterChannel': FlutterVersion.instance.channel,
+      'web': web && !FlutterVersion.instance.isStable,
     };
   }
 
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index 03efe52..2ea276e 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -586,23 +586,7 @@
   /// The html file used to host the flutter web application.
   File get indexFile => parent.directory.childDirectory('web').childFile('index.html');
 
-  Future<void> ensureReadyForPlatformSpecificTooling() async {
-    /// Generate index.html in build/web. Eventually we could support
-    /// a custom html under the web sub directory.
-    final Directory outputDir = fs.directory(getWebBuildDirectory());
-    if (!outputDir.existsSync()) {
-      outputDir.createSync(recursive: true);
-    }
-    final Template template = Template.fromName('web/index.html.tmpl');
-    template.render(
-      outputDir,
-      <String, dynamic>{
-        'appName': parent.manifest.appName,
-      },
-      printStatusWhenWriting: false,
-      overwriteExisting: true,
-    );
-  }
+  Future<void> ensureReadyForPlatformSpecificTooling() async {}
 }
 
 /// Deletes [directory] with all content.
diff --git a/packages/flutter_tools/lib/src/template.dart b/packages/flutter_tools/lib/src/template.dart
index 97bc18b..943730c 100644
--- a/packages/flutter_tools/lib/src/template.dart
+++ b/packages/flutter_tools/lib/src/template.dart
@@ -85,6 +85,11 @@
           return null;
         relativeDestinationPath = relativeDestinationPath.replaceAll('$platform-$language.tmpl', platform);
       }
+      // Only build a web project if explicitly asked.
+      final bool web = context['web'];
+      if (relativeDestinationPath.contains('web') && !web) {
+        return null;
+      }
       final String projectName = context['projectName'];
       final String androidIdentifier = context['androidIdentifier'];
       final String pluginClass = context['pluginClass'];