Make the create command call pub get online instead of offline. (#13505)

We thought it would be OK to call the create command offline-only, but it turns out that isn't a great idea because not all of the create template dependencies are cached by running flutter_tool.

This PR makes it go online by default when running pub get after creating a project, and adds an "--offline" flag to the create command so that offline users can use it offline if their cache is warm.
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 21fa282..2247079 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -32,6 +32,12 @@
       defaultsTo: true,
       help: 'Whether to run "flutter packages get" after the project has been created.'
     );
+    argParser.addFlag('offline',
+      defaultsTo: false,
+      help: 'When "flutter packages get" is run by the create command, this indicates '
+        'whether to run it in offline mode or not. In offline mode, it will need to '
+        'have all dependencies already available in the pub cache to succeed.'
+    );
     argParser.addFlag(
       'with-driver-test',
       negatable: true,
@@ -165,7 +171,7 @@
         await pubGet(
           context: PubContext.createPackage,
           directory: dirPath,
-          offline: true,
+          offline: argResults['offline'],
         );
 
       final String relativePath = fs.path.relative(dirPath);
@@ -187,7 +193,7 @@
         await pubGet(
           context: PubContext.createPlugin,
           directory: dirPath,
-          offline: true,
+          offline: argResults['offline'],
         );
 
       if (android_sdk.androidSdk != null)
@@ -226,7 +232,7 @@
     );
 
     if (argResults['pub']) {
-      await pubGet(context: PubContext.create, directory: appPath, offline: true);
+      await pubGet(context: PubContext.create, directory: appPath, offline: argResults['offline']);
       injectPlugins(directory: appPath);
     }
 
diff --git a/packages/flutter_tools/test/commands/create_test.dart b/packages/flutter_tools/test/commands/create_test.dart
index 3bcacdd..aa5bb63 100644
--- a/packages/flutter_tools/test/commands/create_test.dart
+++ b/packages/flutter_tools/test/commands/create_test.dart
@@ -303,7 +303,24 @@
       );
     });
 
-    testUsingContext('invokes pub offline', () async {
+    testUsingContext('invokes pub offline when requested', () async {
+      Cache.flutterRoot = '../..';
+
+      final CreateCommand command = new CreateCommand();
+      final CommandRunner<Null> runner = createTestCommandRunner(command);
+
+      await runner.run(<String>['create', '--pub', '--offline', projectDir.path]);
+      final List<String> commands = loggingProcessManager.commands;
+      expect(commands, contains(matches(r'dart-sdk[\\/]bin[\\/]pub')));
+      expect(commands, contains('--offline'));
+    },
+      timeout: allowForCreateFlutterProject,
+      overrides: <Type, Generator>{
+        ProcessManager: () => loggingProcessManager,
+      },
+    );
+
+    testUsingContext('invokes pub online when offline not requested', () async {
       Cache.flutterRoot = '../..';
 
       final CreateCommand command = new CreateCommand();
@@ -312,7 +329,7 @@
       await runner.run(<String>['create', '--pub', projectDir.path]);
       final List<String> commands = loggingProcessManager.commands;
       expect(commands, contains(matches(r'dart-sdk[\\/]bin[\\/]pub')));
-      expect(commands, contains('--offline'));
+      expect(commands, isNot(contains('--offline')));
     },
       timeout: allowForCreateFlutterProject,
       overrides: <Type, Generator>{