Add org option to flutter create (#10290)

diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index c02eaf5..34b3915 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -39,12 +39,18 @@
       'plugin',
       negatable: true,
       defaultsTo: false,
-      help: 'Generate a new Flutter Plugin project.'
+      help: 'Generate a Flutter plugin project.'
     );
     argParser.addOption(
       'description',
-      defaultsTo: 'A new flutter project.',
-      help: 'The description to use for your new flutter project. This string ends up in the pubspec.yaml file.'
+      defaultsTo: 'A new Flutter project.',
+      help: 'The description to use for your new Flutter project. This string ends up in the pubspec.yaml file.'
+    );
+    argParser.addOption(
+      'org',
+      defaultsTo: 'com.yourcompany',
+      help: 'The organization responsible for your new Flutter project, in reverse domain name notation.\n'
+            'This string is used in Java package names and as prefix in the iOS bundle identifier.'
     );
     argParser.addOption(
       'ios-language',
@@ -110,6 +116,7 @@
     // TODO(goderbauer): Work-around for: https://github.com/dart-lang/path/issues/24
     if (fs.path.basename(dirPath) == '.')
       dirPath = fs.path.dirname(dirPath);
+    final String organization = argResults['org'];
     final String projectName = fs.path.basename(dirPath);
 
     String error =_validateProjectDir(dirPath, flutterRoot: flutterRoot);
@@ -121,6 +128,7 @@
       throwToolExit(error);
 
     final Map<String, dynamic> templateContext = _templateContext(
+      organization: organization,
       projectName: projectName,
       projectDescription: argResults['description'],
       dirPath: dirPath,
@@ -151,8 +159,8 @@
       final String androidPluginIdentifier = templateContext['androidIdentifier'];
       final String exampleProjectName = projectName + '_example';
       templateContext['projectName'] = exampleProjectName;
-      templateContext['androidIdentifier'] = _createAndroidIdentifier(exampleProjectName);
-      templateContext['iosIdentifier'] = _createUTIIdentifier(exampleProjectName);
+      templateContext['androidIdentifier'] = _createAndroidIdentifier(organization, exampleProjectName);
+      templateContext['iosIdentifier'] = _createUTIIdentifier(organization, exampleProjectName);
       templateContext['description'] = 'Demonstrates how to use the $projectName plugin.';
       templateContext['pluginProjectName'] = projectName;
       templateContext['androidPluginIdentifier'] = androidPluginIdentifier;
@@ -224,6 +232,7 @@
   }
 
   Map<String, dynamic> _templateContext({
+    String organization,
     String projectName,
     String projectDescription,
     String androidLanguage,
@@ -241,9 +250,10 @@
         : pluginDartClass + 'Plugin';
 
     return <String, dynamic>{
+      'organization': organization,
       'projectName': projectName,
-      'androidIdentifier': _createAndroidIdentifier(projectName),
-      'iosIdentifier': _createUTIIdentifier(projectName),
+      'androidIdentifier': _createAndroidIdentifier(organization, projectName),
+      'iosIdentifier': _createUTIIdentifier(organization, projectName),
       'description': projectDescription,
       'dartSdk': '$flutterRoot/bin/cache/dart-sdk',
       'androidMinApiLevel': android.minApiLevel,
@@ -264,8 +274,8 @@
   }
 }
 
-String _createAndroidIdentifier(String name) {
-  return 'com.yourcompany.$name';
+String _createAndroidIdentifier(String organization, String name) {
+  return '$organization.$name';
 }
 
 String _createPluginClassName(String name) {
@@ -273,12 +283,12 @@
   return camelizedName[0].toUpperCase() + camelizedName.substring(1);
 }
 
-String _createUTIIdentifier(String name) {
+String _createUTIIdentifier(String organization, String name) {
   // Create a UTI (https://en.wikipedia.org/wiki/Uniform_Type_Identifier) from a base name
   final RegExp disallowed = new RegExp(r"[^a-zA-Z0-9\-\.\u0080-\uffff]+");
   name = camelCase(name).replaceAll(disallowed, '');
   name = name.isEmpty ? 'untitled' : name;
-  return 'com.yourcompany.$name';
+  return '$organization.$name';
 }
 
 final Set<String> _packageDependencies = new Set<String>.from(<String>[