allow command line option "--project-name" in flutter create (#22022)

Simple convenience function if users create flutter projects in custom folder structures and but want to specify a custom project name.
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 2711780..aa6bc7f 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -96,6 +96,11 @@
             'This string is used in Java package names and as prefix in the iOS bundle identifier.'
     );
     argParser.addOption(
+      'project-name',
+      defaultsTo: null,
+      help: 'The project name for this new Flutter project. This must be a valid dart package name.'
+    );
+    argParser.addOption(
       'ios-language',
       abbr: 'i',
       defaultsTo: 'objc',
@@ -235,12 +240,12 @@
         );
       }
     }
-    final String projectName = fs.path.basename(projectDirPath);
 
     String error = _validateProjectDir(projectDirPath, flutterRoot: flutterRoot);
     if (error != null)
       throwToolExit(error);
 
+    final String projectName = argResults['project-name'] ?? fs.path.basename(projectDirPath);
     error = _validateProjectName(projectName);
     if (error != null)
       throwToolExit(error);
diff --git a/packages/flutter_tools/test/commands/create_test.dart b/packages/flutter_tools/test/commands/create_test.dart
index c11c1e7..e72171d 100644
--- a/packages/flutter_tools/test/commands/create_test.dart
+++ b/packages/flutter_tools/test/commands/create_test.dart
@@ -298,6 +298,31 @@
     );
   }, timeout: allowForCreateFlutterProject);
 
+  testUsingContext('plugin project with valid custom project name', () async {
+    return _createProject(
+      projectDir,
+      <String>['--no-pub', '--template=plugin', '--project-name', 'xyz'],
+      <String>[
+        'android/src/main/java/com/example/xyz/XyzPlugin.java',
+        'example/android/app/src/main/java/com/example/xyzexample/MainActivity.java',
+      ],
+      unexpectedPaths: <String>[
+        'android/src/main/java/com/example/flutterproject/FlutterProjectPlugin.java',
+        'example/android/app/src/main/java/com/example/flutterprojectexample/MainActivity.java',
+      ],
+    );
+  }, timeout: allowForCreateFlutterProject);
+
+  testUsingContext('plugin project with invalid custom project name', () async {
+    expect(
+      () => _createProject(projectDir,
+        <String>['--no-pub', '--template=plugin', '--project-name', 'xyz.xyz'],
+        <String>[],
+      ),
+      throwsToolExit(message: '"xyz.xyz" is not a valid Dart package name.'),
+    );
+  }, timeout: allowForCreateFlutterProject);
+
   testUsingContext('legacy app project with-driver-test', () async {
     return _createAndAnalyzeProject(
       projectDir,