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,