runWithFlags method
Implementation
Future<void> runWithFlags({
String? projectName,
String? organization,
String? outputDir,
bool noGit = false,
bool quickMode = false,
}) async {
_printWelcomeMessage();
// Get or validate project name
String finalProjectName;
if (projectName != null && projectName.isNotEmpty) {
if (!RegExp(r'^[a-z][a-z0-9_]*$').hasMatch(projectName)) {
print('$_red Invalid project name: $projectName$_reset');
print('$_dim Must be lowercase with underscores only.$_reset');
return;
}
finalProjectName = projectName;
} else if (quickMode) {
// In quick mode without name, ask for it
finalProjectName = _getProjectName();
} else {
print('$_red Project name is required.$_reset');
print('$_dim Use: vgv -n <name>$_reset');
return;
}
// Get or use default organization based on project name
String finalOrganization;
if (organization != null && organization.isNotEmpty) {
if (!RegExp(r'^[a-z][a-z0-9._]*[a-z0-9]$').hasMatch(organization)) {
print('$_red Invalid organization: $organization$_reset');
print('$_dim Must be lowercase with dots (e.g., com.example)$_reset');
return;
}
finalOrganization = organization;
} else {
finalOrganization = 'com.$finalProjectName';
}
// Default platforms for quick/flag mode
final platforms = [PlatformType.mobile, PlatformType.web];
_selectedMobilePlatform = MobilePlatform.both;
_selectedDesktopPlatforms = null;
final config = ProjectConfig(
projectName: finalProjectName,
organizationName: finalOrganization,
platforms: platforms,
stateManagement: StateManagementType.bloc,
architecture: ArchitectureType.cleanArchitecture,
includeGoRouter: true,
includeLinterRules: false,
includeFreezed: true,
mobilePlatform: _selectedMobilePlatform,
desktopPlatform: DesktopPlatform.all,
customDesktopPlatforms: null,
outputDirectory: outputDir,
skipGitInit: noGit,
);
_printConfigurationSummary(config);
if (quickMode) {
// In quick mode, proceed without confirmation
await _createProject(config);
} else if (_confirmConfiguration()) {
await _createProject(config);
} else {
_printCancelledMessage();
}
}