Add to app measurement (#33458)
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index 771ea15..45b612d 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -24,6 +24,7 @@ import '../project.dart'; import '../runner/flutter_command.dart'; import '../template.dart'; +import '../usage.dart'; import '../version.dart'; enum _ProjectType { @@ -148,6 +149,15 @@ @override String get invocation => '${runner.executableName} $name <output directory>'; + @override + Future<Map<String, String>> get usageValues async { + return <String, String>{ + kCommandCreateProjectType: argResults['template'], + kCommandCreateAndroidLanguage: argResults['android-language'], + kCommandCreateIosLanguage: argResults['ios-language'], + }; + } + // If it has a .metadata file with the project_type in it, use that. // If it has an android dir and an android/app dir, it's a legacy app // If it has an ios dir and an ios/Flutter dir, it's a legacy app @@ -228,6 +238,36 @@ } } + _ProjectType _getProjectType(Directory projectDir) { + _ProjectType template; + _ProjectType detectedProjectType; + final bool metadataExists = projectDir.absolute.childFile('.metadata').existsSync(); + if (argResults['template'] != null) { + template = _stringToProjectType(argResults['template']); + } else { + // If the project directory exists and isn't empty, then try to determine the template + // type from the project directory. + if (projectDir.existsSync() && projectDir.listSync().isNotEmpty) { + detectedProjectType = _determineTemplateType(projectDir); + if (detectedProjectType == null && metadataExists) { + // We can only be definitive that this is the wrong type if the .metadata file + // exists and contains a type that we don't understand, or doesn't contain a type. + throwToolExit('Sorry, unable to detect the type of project to recreate. ' + 'Try creating a fresh project and migrating your existing code to ' + 'the new project manually.'); + } + } + } + template ??= detectedProjectType ?? _ProjectType.app; + if (detectedProjectType != null && template != detectedProjectType && metadataExists) { + // We can only be definitive that this is the wrong type if the .metadata file + // exists and contains a type that doesn't match. + throwToolExit("The requested template type '${getEnumName(template)}' doesn't match the " + "existing template type of '${getEnumName(detectedProjectType)}'."); + } + return template; + } + @override Future<FlutterCommandResult> runCommand() async { if (argResults['list-samples'] != null) { @@ -283,31 +323,7 @@ sampleCode = await _fetchSampleFromServer(argResults['sample']); } - _ProjectType template; - _ProjectType detectedProjectType; - final bool metadataExists = projectDir.absolute.childFile('.metadata').existsSync(); - if (argResults['template'] != null) { - template = _stringToProjectType(argResults['template']); - } else { - if (projectDir.existsSync() && projectDir.listSync().isNotEmpty) { - detectedProjectType = _determineTemplateType(projectDir); - if (detectedProjectType == null && metadataExists) { - // We can only be definitive that this is the wrong type if the .metadata file - // exists and contains a type that we don't understand, or doesn't contain a type. - throwToolExit('Sorry, unable to detect the type of project to recreate. ' - 'Try creating a fresh project and migrating your existing code to ' - 'the new project manually.'); - } - } - } - template ??= detectedProjectType ?? _ProjectType.app; - if (detectedProjectType != null && template != detectedProjectType && metadataExists) { - // We can only be definitive that this is the wrong type if the .metadata file - // exists and contains a type that doesn't match. - throwToolExit("The requested template type '${getEnumName(template)}' doesn't match the " - "existing template type of '${getEnumName(detectedProjectType)}'."); - } - + final _ProjectType template = _getProjectType(projectDir); final bool generateModule = template == _ProjectType.module; final bool generatePlugin = template == _ProjectType.plugin; final bool generatePackage = template == _ProjectType.package;