From 0ffc4ce00ea7bb912e379adf39354644eab2c17e Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Mon, 23 Dec 2024 16:02:29 -0800 Subject: [PATCH] Remove `--template=skeleton` and add a placeholder error message instead. (#160695) Closes https://github.com/flutter/flutter/issues/160673. Does the following: - Renames `FlutterProjectType` to `FlutterTemplateType`; did some enhanced enum cleanups while at it - Creates a hierarchy of `RemovedFlutterTemplateType` from `ParsedFlutterTemplateType` - Removes the `skeleton` directory - Merges `app_shared` back into `app` (no longer required now that `skeleton` is removed) Final cleanups are tracked in https://github.com/flutter/flutter/issues/160692. (Added @zanderso just to spot check this is what he meant by https://github.com/flutter/flutter/issues/160673#issuecomment-2557742347) --- dev/bots/analyze.dart | 2 +- .../flutter/shell/platform/windows/README.md | 2 +- packages/flutter_tools/.gitignore | 6 + .../lib/src/commands/create.dart | 121 +-- .../lib/src/commands/create_base.dart | 10 +- .../lib/src/flutter_project_metadata.dart | 182 +++-- .../lib/src/ios/application_package.dart | 2 +- .../lib/src/reporting/github_template.dart | 2 +- packages/flutter_tools/lib/src/template.dart | 11 +- packages/flutter_tools/templates/README.md | 25 - .../{app_shared => app}/.gitignore.tmpl | 0 .../.idea/libraries/Dart_SDK.xml.tmpl | 0 .../libraries/KotlinJavaRuntime.xml.tmpl | 0 .../.idea/modules.xml.tmpl | 0 .../runConfigurations/main_dart.xml.tmpl | 0 .../.idea/workspace.xml.tmpl | 0 .../analysis_options.yaml.tmpl | 0 .../app/build.gradle.kts.tmpl | 0 .../androidIdentifier/MainActivity.java.tmpl | 0 .../android-java.tmpl/build.gradle.kts.tmpl | 0 .../projectName_android.iml.tmpl | 0 .../app/build.gradle.kts.tmpl | 0 .../androidIdentifier/MainActivity.kt.tmpl | 0 .../android-kotlin.tmpl/build.gradle.kts.tmpl | 0 .../projectName_android.iml.tmpl | 0 .../android.tmpl/.gitignore | 0 .../app/src/debug/AndroidManifest.xml.tmpl | 0 .../app/src/main/AndroidManifest.xml.tmpl | 0 .../res/drawable-v21/launch_background.xml | 0 .../main/res/drawable/launch_background.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../app/src/main/res/values-night/styles.xml | 0 .../app/src/main/res/values/styles.xml | 0 .../app/src/profile/AndroidManifest.xml.tmpl | 0 .../android.tmpl/gradle.properties.tmpl | 0 .../wrapper/gradle-wrapper.properties.tmpl | 0 .../android.tmpl/settings.gradle.kts.tmpl | 0 .../Runner.xcodeproj/project.pbxproj.tmpl | 0 .../xcschemes/Runner.xcscheme.tmpl | 0 .../ios-objc.tmpl/Runner/AppDelegate.h | 0 .../ios-objc.tmpl/Runner/AppDelegate.m | 0 .../ios-objc.tmpl/Runner/main.m | 0 .../RunnerTests/RunnerTests.m.tmpl | 0 .../Runner.xcodeproj/project.pbxproj.tmpl | 0 .../xcschemes/Runner.xcscheme.tmpl | 0 .../ios-swift.tmpl/Runner/AppDelegate.swift | 0 .../Runner/Runner-Bridging-Header.h | 0 .../RunnerTests/RunnerTests.swift.tmpl | 0 .../{app_shared => app}/ios.tmpl/.gitignore | 0 .../ios.tmpl/Flutter/AppFrameworkInfo.plist | 0 .../ios.tmpl/Flutter/Debug.xcconfig | 0 .../ios.tmpl/Flutter/Release.xcconfig | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../AppIcon.appiconset/Contents.json | 0 .../Icon-App-1024x1024@1x.png.img.tmpl | 0 .../Icon-App-20x20@1x.png.img.tmpl | 0 .../Icon-App-20x20@2x.png.img.tmpl | 0 .../Icon-App-20x20@3x.png.img.tmpl | 0 .../Icon-App-29x29@1x.png.img.tmpl | 0 .../Icon-App-29x29@2x.png.img.tmpl | 0 .../Icon-App-29x29@3x.png.img.tmpl | 0 .../Icon-App-40x40@1x.png.img.tmpl | 0 .../Icon-App-40x40@2x.png.img.tmpl | 0 .../Icon-App-40x40@3x.png.img.tmpl | 0 .../Icon-App-60x60@2x.png.img.tmpl | 0 .../Icon-App-60x60@3x.png.img.tmpl | 0 .../Icon-App-76x76@1x.png.img.tmpl | 0 .../Icon-App-76x76@2x.png.img.tmpl | 0 .../Icon-App-83.5x83.5@2x.png.img.tmpl | 0 .../LaunchImage.imageset/Contents.json | 0 .../LaunchImage.png.img.tmpl | 0 .../LaunchImage@2x.png.img.tmpl | 0 .../LaunchImage@3x.png.img.tmpl | 0 .../LaunchImage.imageset/README.md | 0 .../Runner/Base.lproj/LaunchScreen.storyboard | 0 .../Runner/Base.lproj/Main.storyboard | 0 .../ios.tmpl/Runner/Info.plist.tmpl | 0 .../{app_shared => app}/linux.tmpl/.gitignore | 0 .../linux.tmpl/CMakeLists.txt.tmpl | 0 .../linux.tmpl/flutter/CMakeLists.txt | 0 .../linux.tmpl/runner/CMakeLists.txt | 0 .../linux.tmpl/runner/main.cc | 0 .../linux.tmpl/runner/my_application.cc.tmpl | 0 .../linux.tmpl/runner/my_application.h | 0 .../{app_shared => app}/macos.tmpl/.gitignore | 0 .../macos.tmpl/Flutter/Flutter-Debug.xcconfig | 0 .../Flutter/Flutter-Release.xcconfig | 0 .../Runner.xcodeproj/project.pbxproj.tmpl | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcschemes/Runner.xcscheme.tmpl | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../macos.tmpl/Runner/AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../app_icon_1024.png.img.tmpl | 0 .../app_icon_128.png.img.tmpl | 0 .../app_icon_16.png.img.tmpl | 0 .../app_icon_256.png.img.tmpl | 0 .../app_icon_32.png.img.tmpl | 0 .../app_icon_512.png.img.tmpl | 0 .../app_icon_64.png.img.tmpl | 0 .../macos.tmpl/Runner/Base.lproj/MainMenu.xib | 0 .../Runner/Configs/AppInfo.xcconfig.tmpl | 0 .../macos.tmpl/Runner/Configs/Debug.xcconfig | 0 .../Runner/Configs/Release.xcconfig | 0 .../Runner/Configs/Warnings.xcconfig | 0 .../Runner/DebugProfile.entitlements | 0 .../macos.tmpl/Runner/Info.plist | 0 .../macos.tmpl/Runner/MainFlutterWindow.swift | 0 .../macos.tmpl/Runner/Release.entitlements | 0 .../RunnerTests/RunnerTests.swift.tmpl | 0 .../{app_shared => app}/projectName.iml.tmpl | 0 .../web/favicon.png.copy.tmpl | Bin .../web/icons/Icon-192.png.copy.tmpl | Bin .../web/icons/Icon-512.png.copy.tmpl | Bin .../web/icons/Icon-maskable-192.png.img.tmpl | 0 .../web/icons/Icon-maskable-512.png.img.tmpl | 0 .../{app_shared => app}/web/index.html.tmpl | 0 .../web/manifest.json.tmpl | 0 .../windows.tmpl/.gitignore | 0 .../windows.tmpl/CMakeLists.txt.tmpl | 0 .../windows.tmpl/flutter/CMakeLists.txt | 0 .../windows.tmpl/runner/CMakeLists.txt | 0 .../windows.tmpl/runner/Runner.rc.tmpl | 0 .../windows.tmpl/runner/flutter_window.cpp | 0 .../windows.tmpl/runner/flutter_window.h | 0 .../windows.tmpl/runner/main.cpp.tmpl | 0 .../windows.tmpl/runner/resource.h | 0 .../runner/resources/app_icon.ico.img.tmpl | 0 .../windows.tmpl/runner/runner.exe.manifest | 0 .../windows.tmpl/runner/utils.cpp | 0 .../windows.tmpl/runner/utils.h | 0 .../windows.tmpl/runner/win32_window.cpp | 0 .../windows.tmpl/runner/win32_window.h | 0 .../templates/skeleton/README.md.tmpl | 29 - .../images/2.0x/flutter_logo.png.img.tmpl | 0 .../images/3.0x/flutter_logo.png.img.tmpl | 0 .../assets/images/flutter_logo.png.img.tmpl | 0 .../templates/skeleton/l10n.yaml.tmpl | 3 - .../templates/skeleton/lib/main.dart.tmpl | 20 - .../templates/skeleton/lib/src/app.dart.tmpl | 85 -- .../lib/src/localization/app_en.arb.tmpl | 6 - .../src/sample_feature/sample_item.dart.tmpl | 6 - .../sample_item_details_view.dart.tmpl | 20 - .../sample_item_list_view.dart.tmpl | 71 -- .../settings/settings_controller.dart.tmpl | 50 -- .../src/settings/settings_service.dart.tmpl | 17 - .../lib/src/settings/settings_view.dart.tmpl | 51 -- .../templates/skeleton/pubspec.yaml.tmpl | 32 - .../test/implementation_test.dart.test.tmpl | 73 -- .../skeleton/test/unit_test.dart.tmpl | 15 - .../skeleton/test/widget_test.dart.tmpl | 31 - .../templates/template_manifest.json | 726 +++++++++--------- .../hermetic/build_ipa_test.dart | 16 +- .../hermetic/create_usage_test.dart | 5 - .../commands.shard/permeable/create_test.dart | 172 ++--- .../application_package_test.dart | 8 +- .../flutter_project_metadata_test.dart | 28 +- .../test/general.shard/template_test.dart | 8 +- .../analyze_all_templates_test.dart | 9 +- 169 files changed, 665 insertions(+), 1179 deletions(-) create mode 100644 packages/flutter_tools/.gitignore delete mode 100644 packages/flutter_tools/templates/README.md rename packages/flutter_tools/templates/{app_shared => app}/.gitignore.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/.idea/libraries/Dart_SDK.xml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/.idea/libraries/KotlinJavaRuntime.xml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/.idea/modules.xml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/.idea/runConfigurations/main_dart.xml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/.idea/workspace.xml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/analysis_options.yaml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android-java.tmpl/app/build.gradle.kts.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android-java.tmpl/build.gradle.kts.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android-java.tmpl/projectName_android.iml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android-kotlin.tmpl/app/build.gradle.kts.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android-kotlin.tmpl/build.gradle.kts.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android-kotlin.tmpl/projectName_android.iml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/.gitignore (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/debug/AndroidManifest.xml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/AndroidManifest.xml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/drawable-v21/launch_background.xml (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/drawable/launch_background.xml (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/values-night/styles.xml (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/main/res/values/styles.xml (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/app/src/profile/AndroidManifest.xml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/gradle.properties.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/gradle/wrapper/gradle-wrapper.properties.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/android.tmpl/settings.gradle.kts.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-objc.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-objc.tmpl/Runner/AppDelegate.h (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-objc.tmpl/Runner/AppDelegate.m (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-objc.tmpl/Runner/main.m (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-objc.tmpl/RunnerTests/RunnerTests.m.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-swift.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-swift.tmpl/Runner/AppDelegate.swift (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-swift.tmpl/Runner/Runner-Bridging-Header.h (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios-swift.tmpl/RunnerTests/RunnerTests.swift.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/.gitignore (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Flutter/AppFrameworkInfo.plist (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Flutter/Debug.xcconfig (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Flutter/Release.xcconfig (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner.xcworkspace/contents.xcworkspacedata (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/README.md (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Base.lproj/LaunchScreen.storyboard (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Base.lproj/Main.storyboard (100%) rename packages/flutter_tools/templates/{app_shared => app}/ios.tmpl/Runner/Info.plist.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/linux.tmpl/.gitignore (100%) rename packages/flutter_tools/templates/{app_shared => app}/linux.tmpl/CMakeLists.txt.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/linux.tmpl/flutter/CMakeLists.txt (100%) rename packages/flutter_tools/templates/{app_shared => app}/linux.tmpl/runner/CMakeLists.txt (100%) rename packages/flutter_tools/templates/{app_shared => app}/linux.tmpl/runner/main.cc (100%) rename packages/flutter_tools/templates/{app_shared => app}/linux.tmpl/runner/my_application.cc.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/linux.tmpl/runner/my_application.h (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/.gitignore (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Flutter/Flutter-Debug.xcconfig (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Flutter/Flutter-Release.xcconfig (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner.xcodeproj/project.pbxproj.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner.xcworkspace/contents.xcworkspacedata (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/AppDelegate.swift (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Base.lproj/MainMenu.xib (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Configs/AppInfo.xcconfig.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Configs/Debug.xcconfig (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Configs/Release.xcconfig (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Configs/Warnings.xcconfig (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/DebugProfile.entitlements (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Info.plist (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/MainFlutterWindow.swift (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/Runner/Release.entitlements (100%) rename packages/flutter_tools/templates/{app_shared => app}/macos.tmpl/RunnerTests/RunnerTests.swift.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/projectName.iml.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/web/favicon.png.copy.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/web/icons/Icon-192.png.copy.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/web/icons/Icon-512.png.copy.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/web/icons/Icon-maskable-192.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/web/icons/Icon-maskable-512.png.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/web/index.html.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/web/manifest.json.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/.gitignore (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/CMakeLists.txt.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/flutter/CMakeLists.txt (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/CMakeLists.txt (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/Runner.rc.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/flutter_window.cpp (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/flutter_window.h (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/main.cpp.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/resource.h (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/resources/app_icon.ico.img.tmpl (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/runner.exe.manifest (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/utils.cpp (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/utils.h (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/win32_window.cpp (100%) rename packages/flutter_tools/templates/{app_shared => app}/windows.tmpl/runner/win32_window.h (100%) delete mode 100644 packages/flutter_tools/templates/skeleton/README.md.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/assets/images/2.0x/flutter_logo.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/assets/images/3.0x/flutter_logo.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/assets/images/flutter_logo.png.img.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/l10n.yaml.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/main.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/src/app.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/src/localization/app_en.arb.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item_details_view.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item_list_view.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/src/settings/settings_controller.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/src/settings/settings_service.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/lib/src/settings/settings_view.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/pubspec.yaml.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/test/implementation_test.dart.test.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/test/unit_test.dart.tmpl delete mode 100644 packages/flutter_tools/templates/skeleton/test/widget_test.dart.tmpl diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart index 8edafdff23..e79fbd056c 100644 --- a/dev/bots/analyze.dart +++ b/dev/bots/analyze.dart @@ -2443,7 +2443,7 @@ final String _kTemplateRelativePath = path.join( 'packages', 'flutter_tools', 'templates', - 'app_shared', + 'app', 'windows.tmpl', 'runner', ); diff --git a/engine/src/flutter/shell/platform/windows/README.md b/engine/src/flutter/shell/platform/windows/README.md index 56c8d596f9..db1686c072 100644 --- a/engine/src/flutter/shell/platform/windows/README.md +++ b/engine/src/flutter/shell/platform/windows/README.md @@ -19,7 +19,7 @@ See also: 1. [Flutter tool's Windows logic](https://github.com/flutter/flutter/tree/master/packages/flutter_tools/lib/src/windows) - Builds and runs Flutter Windows apps on the command line. -1. [Windows app template](https://github.com/flutter/flutter/tree/master/packages/flutter_tools/templates/app_shared/windows.tmpl) - The entrypoint for Flutter Windows app. This +1. [Windows app template](https://github.com/flutter/flutter/tree/master/packages/flutter_tools/templates/app/windows.tmpl) - The entrypoint for Flutter Windows app. This launches the Windows embedder. 1. [`platform-windows` GitHub issues label](https://github.com/flutter/flutter/issues?q=is%3Aopen+label%3Aplatform-windows+sort%3Aupdated-desc) 1. [`#hackers-desktop` Discord channel](https://discord.com/channels/608014603317936148/608020180177780791) diff --git a/packages/flutter_tools/.gitignore b/packages/flutter_tools/.gitignore new file mode 100644 index 0000000000..14759dbad5 --- /dev/null +++ b/packages/flutter_tools/.gitignore @@ -0,0 +1,6 @@ +# Normally (from the root) we ignore .idea folders, but the ones present +# in ide_templates/ and templates/ are real folders we intend to copy as part of +# "flutter create". + +!ide_templates/intellij/.idea +!templates/**/.idea diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index b031cc005b..f3193af08e 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart @@ -104,13 +104,16 @@ class CreateCommand extends FlutterCommand with CreateBase { hide: !verboseHelp, ); addPlatformsOptions(customHelp: kPlatformHelp); + + final List enabledTemplates = + ParsedFlutterTemplateType.enabledValues(featureFlags); argParser.addOption( 'template', abbr: 't', - allowed: FlutterProjectType.enabledValues.map((FlutterProjectType e) => e.cliName), + allowed: enabledTemplates.map((ParsedFlutterTemplateType t) => t.cliName), help: 'Specify the type of project to create.', valueHelp: 'type', - allowedHelp: CliEnum.allowedHelp(FlutterProjectType.enabledValues), + allowedHelp: CliEnum.allowedHelp(enabledTemplates), ); argParser.addOption( 'sample', @@ -228,13 +231,28 @@ class CreateCommand extends FlutterCommand with CreateBase { } } - FlutterProjectType _getProjectType(Directory projectDir) { - FlutterProjectType? template; - FlutterProjectType? detectedProjectType; + FlutterTemplateType _getProjectType(Directory projectDir) { + FlutterTemplateType? template; + FlutterTemplateType? detectedProjectType; final bool metadataExists = projectDir.absolute.childFile('.metadata').existsSync(); final String? templateArgument = stringArg('template'); if (templateArgument != null) { - template = FlutterProjectType.fromCliName(templateArgument); + final ParsedFlutterTemplateType? parsedTemplate = ParsedFlutterTemplateType.fromCliName( + templateArgument, + ); + switch (parsedTemplate) { + case RemovedFlutterTemplateType(): + throwToolExit( + 'The template ${parsedTemplate.cliName} is no longer available. For ' + 'your convenience the former help text is repeated below with context ' + 'about the removal and other possible resources:\n\n' + '${parsedTemplate.helpText}', + ); + case FlutterTemplateType(): + template = parsedTemplate; + case null: + break; + } } // If the project directory exists and isn't empty, then try to determine the template // type from the project directory. @@ -250,7 +268,7 @@ class CreateCommand extends FlutterCommand with CreateBase { ); } } - template ??= detectedProjectType ?? FlutterProjectType.app; + template ??= detectedProjectType ?? FlutterTemplateType.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. @@ -279,27 +297,27 @@ class CreateCommand extends FlutterCommand with CreateBase { String? sampleCode; final String? sampleArgument = stringArg('sample'); final bool emptyArgument = boolArg('empty'); - final FlutterProjectType template = _getProjectType(projectDir); + final FlutterTemplateType template = _getProjectType(projectDir); if (sampleArgument != null) { - if (template != FlutterProjectType.app) { + if (template != FlutterTemplateType.app) { throwToolExit( 'Cannot specify --sample with a project type other than ' - '"${FlutterProjectType.app.cliName}"', + '"${FlutterTemplateType.app.cliName}"', ); } // Fetch the sample from the server. sampleCode = await _fetchSampleFromServer(sampleArgument); } - if (emptyArgument && template != FlutterProjectType.app) { + if (emptyArgument && template != FlutterTemplateType.app) { throwToolExit('The --empty flag is only supported for the app template.'); } - final bool generateModule = template == FlutterProjectType.module; - final bool generateMethodChannelsPlugin = template == FlutterProjectType.plugin; - final bool generateFfiPackage = template == FlutterProjectType.packageFfi; - final bool generateFfiPlugin = template == FlutterProjectType.pluginFfi; + final bool generateModule = template == FlutterTemplateType.module; + final bool generateMethodChannelsPlugin = template == FlutterTemplateType.plugin; + final bool generateFfiPackage = template == FlutterTemplateType.packageFfi; + final bool generateFfiPlugin = template == FlutterTemplateType.pluginFfi; final bool generateFfi = generateFfiPlugin || generateFfiPackage; - final bool generatePackage = template == FlutterProjectType.package; + final bool generatePackage = template == FlutterTemplateType.package; final List platforms = stringsArg('platforms'); // `--platforms` does not support module or package. @@ -359,7 +377,7 @@ class CreateCommand extends FlutterCommand with CreateBase { final bool includeLinux; final bool includeMacos; final bool includeWindows; - if (template == FlutterProjectType.module) { + if (template == FlutterTemplateType.module) { // The module template only supports iOS and Android. includeIos = true; includeAndroid = true; @@ -367,7 +385,7 @@ class CreateCommand extends FlutterCommand with CreateBase { includeLinux = false; includeMacos = false; includeWindows = false; - } else if (template == FlutterProjectType.package) { + } else if (template == FlutterTemplateType.package) { // The package template does not supports any platform. includeIos = false; includeAndroid = false; @@ -443,7 +461,7 @@ class CreateCommand extends FlutterCommand with CreateBase { int generatedFileCount = 0; final PubContext pubContext; switch (template) { - case FlutterProjectType.app: + case FlutterTemplateType.app: final bool skipWidgetTestsGeneration = sampleCode != null || emptyArgument; generatedFileCount += await generateApp( @@ -455,17 +473,7 @@ class CreateCommand extends FlutterCommand with CreateBase { projectType: template, ); pubContext = PubContext.create; - case FlutterProjectType.skeleton: - generatedFileCount += await generateApp( - ['skeleton'], - relativeDir, - templateContext, - overwrite: overwrite, - printStatusWhenWriting: !creatingNewProject, - generateMetadata: false, - ); - pubContext = PubContext.create; - case FlutterProjectType.module: + case FlutterTemplateType.module: generatedFileCount += await _generateModule( relativeDir, templateContext, @@ -473,7 +481,7 @@ class CreateCommand extends FlutterCommand with CreateBase { printStatusWhenWriting: !creatingNewProject, ); pubContext = PubContext.create; - case FlutterProjectType.package: + case FlutterTemplateType.package: generatedFileCount += await _generatePackage( relativeDir, templateContext, @@ -481,7 +489,7 @@ class CreateCommand extends FlutterCommand with CreateBase { printStatusWhenWriting: !creatingNewProject, ); pubContext = PubContext.createPackage; - case FlutterProjectType.plugin: + case FlutterTemplateType.plugin: generatedFileCount += await _generateMethodChannelPlugin( relativeDir, templateContext, @@ -490,7 +498,7 @@ class CreateCommand extends FlutterCommand with CreateBase { projectType: template, ); pubContext = PubContext.createPlugin; - case FlutterProjectType.pluginFfi: + case FlutterTemplateType.pluginFfi: generatedFileCount += await _generateFfiPlugin( relativeDir, templateContext, @@ -499,7 +507,7 @@ class CreateCommand extends FlutterCommand with CreateBase { projectType: template, ); pubContext = PubContext.createPlugin; - case FlutterProjectType.packageFfi: + case FlutterTemplateType.packageFfi: generatedFileCount += await _generateFfiPackage( relativeDir, templateContext, @@ -667,7 +675,7 @@ Your $application code is in $relativeAppMain. Map templateContext, { bool overwrite = false, bool printStatusWhenWriting = true, - required FlutterProjectType projectType, + required FlutterTemplateType projectType, }) async { // Plugins only add a platform if it was requested explicitly by the user. if (!argResults!.wasParsed('platforms')) { @@ -763,7 +771,7 @@ Your $application code is in $relativeAppMain. Map templateContext, { bool overwrite = false, bool printStatusWhenWriting = true, - required FlutterProjectType projectType, + required FlutterTemplateType projectType, }) async { // Plugins only add a platform if it was requested explicitly by the user. if (!argResults!.wasParsed('platforms')) { @@ -844,7 +852,7 @@ Your $application code is in $relativeAppMain. Map templateContext, { bool overwrite = false, bool printStatusWhenWriting = true, - required FlutterProjectType projectType, + required FlutterTemplateType projectType, }) async { int generatedCount = 0; final String? description = @@ -1025,7 +1033,7 @@ void _printIncompatibleJavaAgpGradleVersionsWarning({ required String templateGradleVersion, required String templateAgpVersion, required String templateAgpVersionForModule, - required FlutterProjectType projectType, + required FlutterTemplateType projectType, required String projectDirPath, }) { // Determine if the Java version specified conflicts with the template Gradle or AGP version. @@ -1041,7 +1049,7 @@ void _printIncompatibleJavaAgpGradleVersionsWarning({ ); String relevantTemplateAgpVersion = templateAgpVersion; - if (projectType == FlutterProjectType.module && + if (projectType == FlutterTemplateType.module && Version.parse(templateAgpVersion)! < Version.parse(templateAgpVersionForModule)!) { // If a module is being created, make sure to check for Java/AGP compatibility between the highest used version of AGP in the module template. javaAgpVersionsCompatible = gradle.validateJavaAndAgp( @@ -1066,7 +1074,7 @@ void _printIncompatibleJavaAgpGradleVersionsWarning({ ); if (!javaGradleVersionsCompatible) { - if (projectType == FlutterProjectType.plugin || projectType == FlutterProjectType.pluginFfi) { + if (projectType == FlutterTemplateType.plugin || projectType == FlutterTemplateType.pluginFfi) { // Only impacted files could be in sample code. return; } @@ -1157,24 +1165,26 @@ globally for Flutter by running: // Returns path of the gradle-wrapper.properties file for the specified // generated project type. -String? _getGradleWrapperPropertiesFilePath(FlutterProjectType projectType, String projectDirPath) { +String? _getGradleWrapperPropertiesFilePath( + FlutterTemplateType projectType, + String projectDirPath, +) { String gradleWrapperPropertiesFilePath = ''; switch (projectType) { - case FlutterProjectType.app: - case FlutterProjectType.skeleton: + case FlutterTemplateType.app: gradleWrapperPropertiesFilePath = globals.fs.path.join( projectDirPath, 'android/gradle/wrapper/gradle-wrapper.properties', ); - case FlutterProjectType.module: + case FlutterTemplateType.module: gradleWrapperPropertiesFilePath = globals.fs.path.join( projectDirPath, '.android/gradle/wrapper/gradle-wrapper.properties', ); - case FlutterProjectType.plugin: - case FlutterProjectType.pluginFfi: - case FlutterProjectType.package: - case FlutterProjectType.packageFfi: + case FlutterTemplateType.plugin: + case FlutterTemplateType.pluginFfi: + case FlutterTemplateType.package: + case FlutterTemplateType.packageFfi: // TODO(camsim99): Add relevant file path for packageFfi when Android is supported. // No gradle-wrapper.properties files not part of sample code that // can be determined. @@ -1186,18 +1196,17 @@ String? _getGradleWrapperPropertiesFilePath(FlutterProjectType projectType, Stri // Returns the path(s) of the build.gradle file(s) for the specified generated // project type. List? _getBuildGradleConfigurationFilePaths( - FlutterProjectType projectType, + FlutterTemplateType projectType, String projectDirPath, ) { final List buildGradleConfigurationFilePaths = []; switch (projectType) { - case FlutterProjectType.app: - case FlutterProjectType.skeleton: - case FlutterProjectType.pluginFfi: + case FlutterTemplateType.app: + case FlutterTemplateType.pluginFfi: buildGradleConfigurationFilePaths.add( globals.fs.path.join(projectDirPath, 'android/build.gradle'), ); - case FlutterProjectType.module: + case FlutterTemplateType.module: const String moduleBuildGradleFilePath = '.android/build.gradle'; const String moduleAppBuildGradleFlePath = '.android/app/build.gradle'; const String moduleFlutterBuildGradleFilePath = '.android/Flutter/build.gradle'; @@ -1206,12 +1215,12 @@ List? _getBuildGradleConfigurationFilePaths( globals.fs.path.join(projectDirPath, moduleAppBuildGradleFlePath), globals.fs.path.join(projectDirPath, moduleFlutterBuildGradleFilePath), ]); - case FlutterProjectType.plugin: + case FlutterTemplateType.plugin: buildGradleConfigurationFilePaths.add( globals.fs.path.join(projectDirPath, 'android/app/build.gradle'), ); - case FlutterProjectType.package: - case FlutterProjectType.packageFfi: + case FlutterTemplateType.package: + case FlutterTemplateType.packageFfi: // TODO(camsim99): Add any relevant file paths for packageFfi when Android is supported. // No build.gradle file because there is no platform-specific implementation. return null; diff --git a/packages/flutter_tools/lib/src/commands/create_base.dart b/packages/flutter_tools/lib/src/commands/create_base.dart index 37c3a9a6a2..830f92d0ec 100644 --- a/packages/flutter_tools/lib/src/commands/create_base.dart +++ b/packages/flutter_tools/lib/src/commands/create_base.dart @@ -158,7 +158,7 @@ mixin CreateBase on FlutterCommand { /// Throws assertion if [projectDir] does not exist or empty. /// Returns null if no project type can be determined. @protected - FlutterProjectType? determineTemplateType() { + FlutterTemplateType? determineTemplateType() { assert(projectDir.existsSync() && projectDir.listSync().isNotEmpty); final File metadataFile = globals.fs.file( globals.fs.path.join(projectDir.absolute.path, '.metadata'), @@ -167,7 +167,7 @@ mixin CreateBase on FlutterCommand { metadataFile, globals.logger, ); - final FlutterProjectType? projectType = projectMetadata.projectType; + final FlutterTemplateType? projectType = projectMetadata.projectType; if (projectType != null) { return projectType; } @@ -184,7 +184,7 @@ mixin CreateBase on FlutterCommand { if (exists(['android', 'app']) || exists(['ios', 'Runner']) || exists(['ios', 'Flutter'])) { - return FlutterProjectType.app; + return FlutterTemplateType.app; } // Since we can't really be definitive on nearly-empty directories, err on // the side of prudence and just say we don't know. @@ -472,11 +472,11 @@ mixin CreateBase on FlutterCommand { bool pluginExampleApp = false, bool printStatusWhenWriting = true, bool generateMetadata = true, - FlutterProjectType? projectType, + FlutterTemplateType? projectType, }) async { int generatedCount = 0; generatedCount += await renderMerged( - [...templateNames, 'app_shared'], + [...templateNames], directory, templateContext, overwrite: overwrite, diff --git a/packages/flutter_tools/lib/src/flutter_project_metadata.dart b/packages/flutter_tools/lib/src/flutter_project_metadata.dart index b05c46dc90..942ecaafc9 100644 --- a/packages/flutter_tools/lib/src/flutter_project_metadata.dart +++ b/packages/flutter_tools/lib/src/flutter_project_metadata.dart @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:meta/meta.dart'; import 'package:yaml/yaml.dart'; import 'base/file_system.dart'; @@ -12,73 +13,122 @@ import 'project.dart'; import 'template.dart'; import 'version.dart'; -enum FlutterProjectType implements CliEnum { - /// This is the default project with the user-managed host code. - /// It is different than the "module" template in that it exposes and doesn't - /// manage the platform code. - app, +/// The result of parsing `--template=` for `flutter create` and related commands. +@immutable +sealed class ParsedFlutterTemplateType implements CliEnum { + static const List _values = [ + ...FlutterTemplateType.values, + ...RemovedFlutterTemplateType.values, + ]; - /// A List/Detail app template that follows community best practices. - skeleton, - - /// The is a project that has managed platform host code. It is an application with - /// ephemeral .ios and .android directories that can be updated automatically. - module, - - /// This is a Flutter Dart package project. It doesn't have any native - /// components, only Dart. - package, - - /// This is a Dart package project with external builds for native components. - packageFfi, - - /// This is a native plugin project. - plugin, - - /// This is an FFI native plugin project. - pluginFfi; - - @override - String get cliName => snakeCase(name); - - @override - String get helpText => switch (this) { - FlutterProjectType.app => '(default) Generate a Flutter application.', - FlutterProjectType.skeleton => - 'Generate a List View / Detail View Flutter application that follows community best practices.', - FlutterProjectType.package => - 'Generate a shareable Flutter project containing modular Dart code.', - FlutterProjectType.plugin => - 'Generate a shareable Flutter project containing an API ' - 'in Dart code with a platform-specific implementation through method channels for Android, iOS, ' - 'Linux, macOS, Windows, web, or any combination of these.', - FlutterProjectType.pluginFfi => - 'Generate a shareable Flutter project containing an API ' - 'in Dart code with a platform-specific implementation through dart:ffi for Android, iOS, ' - 'Linux, macOS, Windows, or any combination of these.', - FlutterProjectType.packageFfi => - 'Generate a shareable Dart/Flutter project containing an API ' - 'in Dart code with a platform-specific implementation through dart:ffi for Android, iOS, ' - 'Linux, macOS, and Windows.', - FlutterProjectType.module => - 'Generate a project to add a Flutter module to an existing Android or iOS application.', - }; - - static FlutterProjectType? fromCliName(String value) { - for (final FlutterProjectType type in FlutterProjectType.values) { - if (value == type.cliName) { + /// Parses and returns a [ParsedFlutterTemplateType], if any, for [cliName]. + /// + /// If no match was found `null` is returned. + static ParsedFlutterTemplateType? fromCliName(String cliName) { + for (final ParsedFlutterTemplateType type in _values) { + if (cliName == type.cliName) { return type; } } return null; } - static List get enabledValues { - return [ - for (final FlutterProjectType value in values) - if (value != FlutterProjectType.packageFfi || featureFlags.isNativeAssetsEnabled) value, - ]; + /// Returns template types that are enabled based on the current [featureFlags]. + static List enabledValues(FeatureFlags featureFlags) { + return _values.toList()..retainWhere((ParsedFlutterTemplateType templateType) { + return templateType.isEnabled(featureFlags); + }); } + + /// Whether the flag is enabled based on a flag being set. + bool isEnabled(FeatureFlags featureFlags) => true; +} + +/// A [ParsedFlutterTemplateType] that is no longer operable. +/// +/// The CLI can give a hint to a developer that the [cliName] _did_ use to exist, +/// but does no longer, and provides [helpText] for other resources to use instead. +enum RemovedFlutterTemplateType implements ParsedFlutterTemplateType { + skeleton( + helpText: + 'Formerly generated a list view / detail view Flutter application that ' + 'followed some community best practices. For up to date resources, see ' + 'https://flutter.github.io/samples, https://docs.flutter.dev/codelabs, ' + 'and external resources such as https://flutter-builder.app/.', + ); + + const RemovedFlutterTemplateType({required this.helpText}); + + @override + bool isEnabled(FeatureFlags featureFlags) => true; + + @override + final String helpText; + + @override + String get cliName => snakeCase(name); +} + +/// The result of parsing a recognized `--template` for `flutter create` and related commands. +enum FlutterTemplateType implements ParsedFlutterTemplateType { + /// The default project with the user-managed host code. + /// + /// It is different than the "module" template in that it exposes and doesn't + /// manage the platform code. + app(helpText: '(default) Generate a Flutter application.'), + + /// A project that has managed platform host code. + /// + /// It is an application with ephemeral .ios and .android directories that can be updated automatically. + module( + helpText: + 'Generate a project to add a Flutter module to an existing Android or iOS application.', + ), + + /// A Flutter Dart package project. + /// + /// It doesn't have any native components, only Dart. + package(helpText: 'Generate a shareable Flutter project containing modular Dart code.'), + + /// A Dart package project with external builds for native components. + packageFfi( + helpText: + 'Generate a shareable Dart/Flutter project containing an API ' + 'in Dart code with a platform-specific implementation through dart:ffi for Android, iOS, ' + 'Linux, macOS, and Windows.', + ), + + /// A native plugin project. + plugin( + helpText: + 'Generate a shareable Flutter project containing an API ' + 'in Dart code with a platform-specific implementation through method channels for Android, iOS, ' + 'Linux, macOS, Windows, web, or any combination of these.', + ), + + /// This is an FFI native plugin project. + pluginFfi( + helpText: + 'Generate a shareable Flutter project containing an API ' + 'in Dart code with a platform-specific implementation through dart:ffi for Android, iOS, ' + 'Linux, macOS, Windows, or any combination of these.', + ); + + const FlutterTemplateType({required this.helpText}); + + @override + bool isEnabled(FeatureFlags featureFlags) { + return switch (this) { + FlutterTemplateType.packageFfi => featureFlags.isNativeAssetsEnabled, + _ => true, + }; + } + + @override + final String helpText; + + @override + String get cliName => snakeCase(name); } /// Verifies the expected yaml keys are present in the file. @@ -135,7 +185,13 @@ class FlutterProjectMetadata { } } if (_validateMetadataMap(yamlRoot, {'project_type': String}, _logger)) { - _projectType = FlutterProjectType.fromCliName(yamlRoot['project_type'] as String); + final ParsedFlutterTemplateType? templateType = ParsedFlutterTemplateType.fromCliName( + yamlRoot['project_type'] as String, + ); + _projectType = switch (templateType) { + RemovedFlutterTemplateType() || null => null, + FlutterTemplateType() => templateType, + }; } final Object? migrationYaml = yamlRoot['migration']; if (migrationYaml is YamlMap) { @@ -148,7 +204,7 @@ class FlutterProjectMetadata { required this.file, required String? versionRevision, required String? versionChannel, - required FlutterProjectType? projectType, + required FlutterTemplateType? projectType, required this.migrateConfig, required Logger logger, }) : _logger = logger, @@ -165,8 +221,8 @@ class FlutterProjectMetadata { String? _versionChannel; String? get versionChannel => _versionChannel; - FlutterProjectType? _projectType; - FlutterProjectType? get projectType => _projectType; + FlutterTemplateType? _projectType; + FlutterTemplateType? get projectType => _projectType; /// Metadata and configuration for the migrate command. MigrateConfig migrateConfig; diff --git a/packages/flutter_tools/lib/src/ios/application_package.dart b/packages/flutter_tools/lib/src/ios/application_package.dart index e3d5e70a77..62f2c8b93d 100644 --- a/packages/flutter_tools/lib/src/ios/application_package.dart +++ b/packages/flutter_tools/lib/src/ios/application_package.dart @@ -201,7 +201,7 @@ class BuildableIOSApp extends IOSApp { } String _templateImageAssetDirNameSuffix(String asset) => - globals.fs.path.join('app_shared', 'ios.tmpl', 'Runner', 'Assets.xcassets', asset); + globals.fs.path.join('app', 'ios.tmpl', 'Runner', 'Assets.xcassets', asset); String get _appIconAsset => 'AppIcon.appiconset'; String get _launchImageAsset => 'LaunchImage.imageset'; diff --git a/packages/flutter_tools/lib/src/reporting/github_template.dart b/packages/flutter_tools/lib/src/reporting/github_template.dart index 2d6bef1c3e..b7ca3ed67e 100644 --- a/packages/flutter_tools/lib/src/reporting/github_template.dart +++ b/packages/flutter_tools/lib/src/reporting/github_template.dart @@ -129,7 +129,7 @@ ${_projectMetadataInformation()} return 'No pubspec in working directory.'; } final FlutterProjectMetadata metadata = FlutterProjectMetadata(project.metadataFile, _logger); - final FlutterProjectType? projectType = metadata.projectType; + final FlutterTemplateType? projectType = metadata.projectType; final StringBuffer description = StringBuffer() ..writeln('**Type**: ${projectType == null ? 'malformed' : projectType.cliName}') diff --git a/packages/flutter_tools/lib/src/template.dart b/packages/flutter_tools/lib/src/template.dart index 0843be0591..6b6a7e8e42 100644 --- a/packages/flutter_tools/lib/src/template.dart +++ b/packages/flutter_tools/lib/src/template.dart @@ -173,13 +173,22 @@ class Template { required Logger logger, required TemplateRenderer templateRenderer, }) async { + // TODO(matanl): Remove this once https://github.com/flutter/packages/pull/8336 is merged and published. + // See https://github.com/flutter/flutter/issues/160692. + final List imageNames; + if (names.contains('app')) { + // Emulates what used to happen when app_shared existed. It still exist in package:flutter_template_images. + imageNames = [...names, 'app_shared']; + } else { + imageNames = names; + } // All named templates are placed in the 'templates' directory return Template._( [ for (final String name in names) templatePathProvider.directoryInPackage(name, fileSystem), ], [ - for (final String name in names) + for (final String name in imageNames) if ((await templatePathProvider.imageDirectory(name, fileSystem, logger)).existsSync()) await templatePathProvider.imageDirectory(name, fileSystem, logger), ], diff --git a/packages/flutter_tools/templates/README.md b/packages/flutter_tools/templates/README.md deleted file mode 100644 index f3e5f6d98b..0000000000 --- a/packages/flutter_tools/templates/README.md +++ /dev/null @@ -1,25 +0,0 @@ -This directory contains templates for `flutter create`. - -The `*_shared` subdirectories provide files for multiple templates. - -* `app_shared` for `app` and `skeleton`. -* `plugin_shared` for (method channel) `plugin` and `plugin_ffi`. - -For example, there are two app templates: `app` (the counter app) -and `skeleton` (the more advanced list view/detail view app). - -```plain - ┌────────────┐ - │ app_shared │ - └──┬──────┬──┘ - │ │ - │ │ - ▼ ▼ -┌─────┐ ┌──────────┐ -│ app │ │ skeleton │ -└─────┘ └──────────┘ -``` - -Thanks to `app_shared`, the templates for `app` and `skeleton` can contain -only the files that are specific to them alone, and the rest is automatically -kept in sync. diff --git a/packages/flutter_tools/templates/app_shared/.gitignore.tmpl b/packages/flutter_tools/templates/app/.gitignore.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/.gitignore.tmpl rename to packages/flutter_tools/templates/app/.gitignore.tmpl diff --git a/packages/flutter_tools/templates/app_shared/.idea/libraries/Dart_SDK.xml.tmpl b/packages/flutter_tools/templates/app/.idea/libraries/Dart_SDK.xml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/.idea/libraries/Dart_SDK.xml.tmpl rename to packages/flutter_tools/templates/app/.idea/libraries/Dart_SDK.xml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/.idea/libraries/KotlinJavaRuntime.xml.tmpl b/packages/flutter_tools/templates/app/.idea/libraries/KotlinJavaRuntime.xml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/.idea/libraries/KotlinJavaRuntime.xml.tmpl rename to packages/flutter_tools/templates/app/.idea/libraries/KotlinJavaRuntime.xml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/.idea/modules.xml.tmpl b/packages/flutter_tools/templates/app/.idea/modules.xml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/.idea/modules.xml.tmpl rename to packages/flutter_tools/templates/app/.idea/modules.xml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/.idea/runConfigurations/main_dart.xml.tmpl b/packages/flutter_tools/templates/app/.idea/runConfigurations/main_dart.xml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/.idea/runConfigurations/main_dart.xml.tmpl rename to packages/flutter_tools/templates/app/.idea/runConfigurations/main_dart.xml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/.idea/workspace.xml.tmpl b/packages/flutter_tools/templates/app/.idea/workspace.xml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/.idea/workspace.xml.tmpl rename to packages/flutter_tools/templates/app/.idea/workspace.xml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/analysis_options.yaml.tmpl b/packages/flutter_tools/templates/app/analysis_options.yaml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/analysis_options.yaml.tmpl rename to packages/flutter_tools/templates/app/analysis_options.yaml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android-java.tmpl/app/build.gradle.kts.tmpl b/packages/flutter_tools/templates/app/android-java.tmpl/app/build.gradle.kts.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android-java.tmpl/app/build.gradle.kts.tmpl rename to packages/flutter_tools/templates/app/android-java.tmpl/app/build.gradle.kts.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl b/packages/flutter_tools/templates/app/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl rename to packages/flutter_tools/templates/app/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android-java.tmpl/build.gradle.kts.tmpl b/packages/flutter_tools/templates/app/android-java.tmpl/build.gradle.kts.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android-java.tmpl/build.gradle.kts.tmpl rename to packages/flutter_tools/templates/app/android-java.tmpl/build.gradle.kts.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android-java.tmpl/projectName_android.iml.tmpl b/packages/flutter_tools/templates/app/android-java.tmpl/projectName_android.iml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android-java.tmpl/projectName_android.iml.tmpl rename to packages/flutter_tools/templates/app/android-java.tmpl/projectName_android.iml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/app/build.gradle.kts.tmpl b/packages/flutter_tools/templates/app/android-kotlin.tmpl/app/build.gradle.kts.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/app/build.gradle.kts.tmpl rename to packages/flutter_tools/templates/app/android-kotlin.tmpl/app/build.gradle.kts.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl b/packages/flutter_tools/templates/app/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl rename to packages/flutter_tools/templates/app/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/build.gradle.kts.tmpl b/packages/flutter_tools/templates/app/android-kotlin.tmpl/build.gradle.kts.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/build.gradle.kts.tmpl rename to packages/flutter_tools/templates/app/android-kotlin.tmpl/build.gradle.kts.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/projectName_android.iml.tmpl b/packages/flutter_tools/templates/app/android-kotlin.tmpl/projectName_android.iml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/projectName_android.iml.tmpl rename to packages/flutter_tools/templates/app/android-kotlin.tmpl/projectName_android.iml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/.gitignore b/packages/flutter_tools/templates/app/android.tmpl/.gitignore similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/.gitignore rename to packages/flutter_tools/templates/app/android.tmpl/.gitignore diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/debug/AndroidManifest.xml.tmpl b/packages/flutter_tools/templates/app/android.tmpl/app/src/debug/AndroidManifest.xml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/debug/AndroidManifest.xml.tmpl rename to packages/flutter_tools/templates/app/android.tmpl/app/src/debug/AndroidManifest.xml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/AndroidManifest.xml.tmpl b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/AndroidManifest.xml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/AndroidManifest.xml.tmpl rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/AndroidManifest.xml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/drawable-v21/launch_background.xml b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/drawable-v21/launch_background.xml similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/drawable-v21/launch_background.xml rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/drawable-v21/launch_background.xml diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/drawable/launch_background.xml b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/drawable/launch_background.xml similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/drawable/launch_background.xml rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/drawable/launch_background.xml diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/values-night/styles.xml b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/values-night/styles.xml similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/values-night/styles.xml rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/values-night/styles.xml diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/values/styles.xml b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/values/styles.xml similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/main/res/values/styles.xml rename to packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/values/styles.xml diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/app/src/profile/AndroidManifest.xml.tmpl b/packages/flutter_tools/templates/app/android.tmpl/app/src/profile/AndroidManifest.xml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/app/src/profile/AndroidManifest.xml.tmpl rename to packages/flutter_tools/templates/app/android.tmpl/app/src/profile/AndroidManifest.xml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/gradle.properties.tmpl b/packages/flutter_tools/templates/app/android.tmpl/gradle.properties.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/gradle.properties.tmpl rename to packages/flutter_tools/templates/app/android.tmpl/gradle.properties.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/gradle/wrapper/gradle-wrapper.properties.tmpl b/packages/flutter_tools/templates/app/android.tmpl/gradle/wrapper/gradle-wrapper.properties.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/gradle/wrapper/gradle-wrapper.properties.tmpl rename to packages/flutter_tools/templates/app/android.tmpl/gradle/wrapper/gradle-wrapper.properties.tmpl diff --git a/packages/flutter_tools/templates/app_shared/android.tmpl/settings.gradle.kts.tmpl b/packages/flutter_tools/templates/app/android.tmpl/settings.gradle.kts.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/android.tmpl/settings.gradle.kts.tmpl rename to packages/flutter_tools/templates/app/android.tmpl/settings.gradle.kts.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl b/packages/flutter_tools/templates/app/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl rename to packages/flutter_tools/templates/app/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl b/packages/flutter_tools/templates/app/ios-objc.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl rename to packages/flutter_tools/templates/app/ios-objc.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner/AppDelegate.h b/packages/flutter_tools/templates/app/ios-objc.tmpl/Runner/AppDelegate.h similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner/AppDelegate.h rename to packages/flutter_tools/templates/app/ios-objc.tmpl/Runner/AppDelegate.h diff --git a/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner/AppDelegate.m b/packages/flutter_tools/templates/app/ios-objc.tmpl/Runner/AppDelegate.m similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner/AppDelegate.m rename to packages/flutter_tools/templates/app/ios-objc.tmpl/Runner/AppDelegate.m diff --git a/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner/main.m b/packages/flutter_tools/templates/app/ios-objc.tmpl/Runner/main.m similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner/main.m rename to packages/flutter_tools/templates/app/ios-objc.tmpl/Runner/main.m diff --git a/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/RunnerTests/RunnerTests.m.tmpl b/packages/flutter_tools/templates/app/ios-objc.tmpl/RunnerTests/RunnerTests.m.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-objc.tmpl/RunnerTests/RunnerTests.m.tmpl rename to packages/flutter_tools/templates/app/ios-objc.tmpl/RunnerTests/RunnerTests.m.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl b/packages/flutter_tools/templates/app/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl rename to packages/flutter_tools/templates/app/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl b/packages/flutter_tools/templates/app/ios-swift.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl rename to packages/flutter_tools/templates/app/ios-swift.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner/AppDelegate.swift b/packages/flutter_tools/templates/app/ios-swift.tmpl/Runner/AppDelegate.swift similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner/AppDelegate.swift rename to packages/flutter_tools/templates/app/ios-swift.tmpl/Runner/AppDelegate.swift diff --git a/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner/Runner-Bridging-Header.h b/packages/flutter_tools/templates/app/ios-swift.tmpl/Runner/Runner-Bridging-Header.h similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner/Runner-Bridging-Header.h rename to packages/flutter_tools/templates/app/ios-swift.tmpl/Runner/Runner-Bridging-Header.h diff --git a/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/RunnerTests/RunnerTests.swift.tmpl b/packages/flutter_tools/templates/app/ios-swift.tmpl/RunnerTests/RunnerTests.swift.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios-swift.tmpl/RunnerTests/RunnerTests.swift.tmpl rename to packages/flutter_tools/templates/app/ios-swift.tmpl/RunnerTests/RunnerTests.swift.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/.gitignore b/packages/flutter_tools/templates/app/ios.tmpl/.gitignore similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/.gitignore rename to packages/flutter_tools/templates/app/ios.tmpl/.gitignore diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/AppFrameworkInfo.plist b/packages/flutter_tools/templates/app/ios.tmpl/Flutter/AppFrameworkInfo.plist similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/AppFrameworkInfo.plist rename to packages/flutter_tools/templates/app/ios.tmpl/Flutter/AppFrameworkInfo.plist diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/Debug.xcconfig b/packages/flutter_tools/templates/app/ios.tmpl/Flutter/Debug.xcconfig similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/Debug.xcconfig rename to packages/flutter_tools/templates/app/ios.tmpl/Flutter/Debug.xcconfig diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/Release.xcconfig b/packages/flutter_tools/templates/app/ios.tmpl/Flutter/Release.xcconfig similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/Release.xcconfig rename to packages/flutter_tools/templates/app/ios.tmpl/Flutter/Release.xcconfig diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/flutter_tools/templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to packages/flutter_tools/templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_tools/templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/flutter_tools/templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/flutter_tools/templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to packages/flutter_tools/templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcworkspace/contents.xcworkspacedata b/packages/flutter_tools/templates/app/ios.tmpl/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcworkspace/contents.xcworkspacedata rename to packages/flutter_tools/templates/app/ios.tmpl/Runner.xcworkspace/contents.xcworkspacedata diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_tools/templates/app/ios.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/flutter_tools/templates/app/ios.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/flutter_tools/templates/app/ios.tmpl/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to packages/flutter_tools/templates/app/ios.tmpl/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png.img.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png.img.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/README.md similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/README.md rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/README.md diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Base.lproj/LaunchScreen.storyboard b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Base.lproj/LaunchScreen.storyboard rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Base.lproj/LaunchScreen.storyboard diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Base.lproj/Main.storyboard b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Base.lproj/Main.storyboard similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Base.lproj/Main.storyboard rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Base.lproj/Main.storyboard diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Info.plist.tmpl b/packages/flutter_tools/templates/app/ios.tmpl/Runner/Info.plist.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Info.plist.tmpl rename to packages/flutter_tools/templates/app/ios.tmpl/Runner/Info.plist.tmpl diff --git a/packages/flutter_tools/templates/app_shared/linux.tmpl/.gitignore b/packages/flutter_tools/templates/app/linux.tmpl/.gitignore similarity index 100% rename from packages/flutter_tools/templates/app_shared/linux.tmpl/.gitignore rename to packages/flutter_tools/templates/app/linux.tmpl/.gitignore diff --git a/packages/flutter_tools/templates/app_shared/linux.tmpl/CMakeLists.txt.tmpl b/packages/flutter_tools/templates/app/linux.tmpl/CMakeLists.txt.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/linux.tmpl/CMakeLists.txt.tmpl rename to packages/flutter_tools/templates/app/linux.tmpl/CMakeLists.txt.tmpl diff --git a/packages/flutter_tools/templates/app_shared/linux.tmpl/flutter/CMakeLists.txt b/packages/flutter_tools/templates/app/linux.tmpl/flutter/CMakeLists.txt similarity index 100% rename from packages/flutter_tools/templates/app_shared/linux.tmpl/flutter/CMakeLists.txt rename to packages/flutter_tools/templates/app/linux.tmpl/flutter/CMakeLists.txt diff --git a/packages/flutter_tools/templates/app_shared/linux.tmpl/runner/CMakeLists.txt b/packages/flutter_tools/templates/app/linux.tmpl/runner/CMakeLists.txt similarity index 100% rename from packages/flutter_tools/templates/app_shared/linux.tmpl/runner/CMakeLists.txt rename to packages/flutter_tools/templates/app/linux.tmpl/runner/CMakeLists.txt diff --git a/packages/flutter_tools/templates/app_shared/linux.tmpl/runner/main.cc b/packages/flutter_tools/templates/app/linux.tmpl/runner/main.cc similarity index 100% rename from packages/flutter_tools/templates/app_shared/linux.tmpl/runner/main.cc rename to packages/flutter_tools/templates/app/linux.tmpl/runner/main.cc diff --git a/packages/flutter_tools/templates/app_shared/linux.tmpl/runner/my_application.cc.tmpl b/packages/flutter_tools/templates/app/linux.tmpl/runner/my_application.cc.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/linux.tmpl/runner/my_application.cc.tmpl rename to packages/flutter_tools/templates/app/linux.tmpl/runner/my_application.cc.tmpl diff --git a/packages/flutter_tools/templates/app_shared/linux.tmpl/runner/my_application.h b/packages/flutter_tools/templates/app/linux.tmpl/runner/my_application.h similarity index 100% rename from packages/flutter_tools/templates/app_shared/linux.tmpl/runner/my_application.h rename to packages/flutter_tools/templates/app/linux.tmpl/runner/my_application.h diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/.gitignore b/packages/flutter_tools/templates/app/macos.tmpl/.gitignore similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/.gitignore rename to packages/flutter_tools/templates/app/macos.tmpl/.gitignore diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Flutter/Flutter-Debug.xcconfig b/packages/flutter_tools/templates/app/macos.tmpl/Flutter/Flutter-Debug.xcconfig similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Flutter/Flutter-Debug.xcconfig rename to packages/flutter_tools/templates/app/macos.tmpl/Flutter/Flutter-Debug.xcconfig diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Flutter/Flutter-Release.xcconfig b/packages/flutter_tools/templates/app/macos.tmpl/Flutter/Flutter-Release.xcconfig similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Flutter/Flutter-Release.xcconfig rename to packages/flutter_tools/templates/app/macos.tmpl/Flutter/Flutter-Release.xcconfig diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcodeproj/project.pbxproj.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner.xcodeproj/project.pbxproj.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcodeproj/project.pbxproj.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner.xcodeproj/project.pbxproj.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_tools/templates/app/macos.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/flutter_tools/templates/app/macos.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcworkspace/contents.xcworkspacedata b/packages/flutter_tools/templates/app/macos.tmpl/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcworkspace/contents.xcworkspacedata rename to packages/flutter_tools/templates/app/macos.tmpl/Runner.xcworkspace/contents.xcworkspacedata diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_tools/templates/app/macos.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/flutter_tools/templates/app/macos.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/AppDelegate.swift b/packages/flutter_tools/templates/app/macos.tmpl/Runner/AppDelegate.swift similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/AppDelegate.swift rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/AppDelegate.swift diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png.img.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png.img.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png.img.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png.img.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png.img.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png.img.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png.img.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png.img.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png.img.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png.img.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png.img.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png.img.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png.img.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png.img.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Base.lproj/MainMenu.xib b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Base.lproj/MainMenu.xib similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Base.lproj/MainMenu.xib rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Base.lproj/MainMenu.xib diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Configs/AppInfo.xcconfig.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Configs/AppInfo.xcconfig.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Configs/AppInfo.xcconfig.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Configs/AppInfo.xcconfig.tmpl diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Configs/Debug.xcconfig b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Configs/Debug.xcconfig similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Configs/Debug.xcconfig rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Configs/Debug.xcconfig diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Configs/Release.xcconfig b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Configs/Release.xcconfig similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Configs/Release.xcconfig rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Configs/Release.xcconfig diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Configs/Warnings.xcconfig b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Configs/Warnings.xcconfig similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Configs/Warnings.xcconfig rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Configs/Warnings.xcconfig diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/DebugProfile.entitlements b/packages/flutter_tools/templates/app/macos.tmpl/Runner/DebugProfile.entitlements similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/DebugProfile.entitlements rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/DebugProfile.entitlements diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Info.plist b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Info.plist similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Info.plist rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Info.plist diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/MainFlutterWindow.swift b/packages/flutter_tools/templates/app/macos.tmpl/Runner/MainFlutterWindow.swift similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/MainFlutterWindow.swift rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/MainFlutterWindow.swift diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Release.entitlements b/packages/flutter_tools/templates/app/macos.tmpl/Runner/Release.entitlements similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/Runner/Release.entitlements rename to packages/flutter_tools/templates/app/macos.tmpl/Runner/Release.entitlements diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/RunnerTests/RunnerTests.swift.tmpl b/packages/flutter_tools/templates/app/macos.tmpl/RunnerTests/RunnerTests.swift.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/macos.tmpl/RunnerTests/RunnerTests.swift.tmpl rename to packages/flutter_tools/templates/app/macos.tmpl/RunnerTests/RunnerTests.swift.tmpl diff --git a/packages/flutter_tools/templates/app_shared/projectName.iml.tmpl b/packages/flutter_tools/templates/app/projectName.iml.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/projectName.iml.tmpl rename to packages/flutter_tools/templates/app/projectName.iml.tmpl diff --git a/packages/flutter_tools/templates/app_shared/web/favicon.png.copy.tmpl b/packages/flutter_tools/templates/app/web/favicon.png.copy.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/web/favicon.png.copy.tmpl rename to packages/flutter_tools/templates/app/web/favicon.png.copy.tmpl diff --git a/packages/flutter_tools/templates/app_shared/web/icons/Icon-192.png.copy.tmpl b/packages/flutter_tools/templates/app/web/icons/Icon-192.png.copy.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/web/icons/Icon-192.png.copy.tmpl rename to packages/flutter_tools/templates/app/web/icons/Icon-192.png.copy.tmpl diff --git a/packages/flutter_tools/templates/app_shared/web/icons/Icon-512.png.copy.tmpl b/packages/flutter_tools/templates/app/web/icons/Icon-512.png.copy.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/web/icons/Icon-512.png.copy.tmpl rename to packages/flutter_tools/templates/app/web/icons/Icon-512.png.copy.tmpl diff --git a/packages/flutter_tools/templates/app_shared/web/icons/Icon-maskable-192.png.img.tmpl b/packages/flutter_tools/templates/app/web/icons/Icon-maskable-192.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/web/icons/Icon-maskable-192.png.img.tmpl rename to packages/flutter_tools/templates/app/web/icons/Icon-maskable-192.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/web/icons/Icon-maskable-512.png.img.tmpl b/packages/flutter_tools/templates/app/web/icons/Icon-maskable-512.png.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/web/icons/Icon-maskable-512.png.img.tmpl rename to packages/flutter_tools/templates/app/web/icons/Icon-maskable-512.png.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/web/index.html.tmpl b/packages/flutter_tools/templates/app/web/index.html.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/web/index.html.tmpl rename to packages/flutter_tools/templates/app/web/index.html.tmpl diff --git a/packages/flutter_tools/templates/app_shared/web/manifest.json.tmpl b/packages/flutter_tools/templates/app/web/manifest.json.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/web/manifest.json.tmpl rename to packages/flutter_tools/templates/app/web/manifest.json.tmpl diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/.gitignore b/packages/flutter_tools/templates/app/windows.tmpl/.gitignore similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/.gitignore rename to packages/flutter_tools/templates/app/windows.tmpl/.gitignore diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/CMakeLists.txt.tmpl b/packages/flutter_tools/templates/app/windows.tmpl/CMakeLists.txt.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/CMakeLists.txt.tmpl rename to packages/flutter_tools/templates/app/windows.tmpl/CMakeLists.txt.tmpl diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/flutter/CMakeLists.txt b/packages/flutter_tools/templates/app/windows.tmpl/flutter/CMakeLists.txt similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/flutter/CMakeLists.txt rename to packages/flutter_tools/templates/app/windows.tmpl/flutter/CMakeLists.txt diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/CMakeLists.txt b/packages/flutter_tools/templates/app/windows.tmpl/runner/CMakeLists.txt similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/CMakeLists.txt rename to packages/flutter_tools/templates/app/windows.tmpl/runner/CMakeLists.txt diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/Runner.rc.tmpl b/packages/flutter_tools/templates/app/windows.tmpl/runner/Runner.rc.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/Runner.rc.tmpl rename to packages/flutter_tools/templates/app/windows.tmpl/runner/Runner.rc.tmpl diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/flutter_window.cpp b/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.cpp similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/flutter_window.cpp rename to packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.cpp diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/flutter_window.h b/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.h similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/flutter_window.h rename to packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.h diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/main.cpp.tmpl b/packages/flutter_tools/templates/app/windows.tmpl/runner/main.cpp.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/main.cpp.tmpl rename to packages/flutter_tools/templates/app/windows.tmpl/runner/main.cpp.tmpl diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/resource.h b/packages/flutter_tools/templates/app/windows.tmpl/runner/resource.h similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/resource.h rename to packages/flutter_tools/templates/app/windows.tmpl/runner/resource.h diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/resources/app_icon.ico.img.tmpl b/packages/flutter_tools/templates/app/windows.tmpl/runner/resources/app_icon.ico.img.tmpl similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/resources/app_icon.ico.img.tmpl rename to packages/flutter_tools/templates/app/windows.tmpl/runner/resources/app_icon.ico.img.tmpl diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/runner.exe.manifest b/packages/flutter_tools/templates/app/windows.tmpl/runner/runner.exe.manifest similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/runner.exe.manifest rename to packages/flutter_tools/templates/app/windows.tmpl/runner/runner.exe.manifest diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/utils.cpp b/packages/flutter_tools/templates/app/windows.tmpl/runner/utils.cpp similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/utils.cpp rename to packages/flutter_tools/templates/app/windows.tmpl/runner/utils.cpp diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/utils.h b/packages/flutter_tools/templates/app/windows.tmpl/runner/utils.h similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/utils.h rename to packages/flutter_tools/templates/app/windows.tmpl/runner/utils.h diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/win32_window.cpp b/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.cpp similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/win32_window.cpp rename to packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.cpp diff --git a/packages/flutter_tools/templates/app_shared/windows.tmpl/runner/win32_window.h b/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.h similarity index 100% rename from packages/flutter_tools/templates/app_shared/windows.tmpl/runner/win32_window.h rename to packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.h diff --git a/packages/flutter_tools/templates/skeleton/README.md.tmpl b/packages/flutter_tools/templates/skeleton/README.md.tmpl deleted file mode 100644 index b7e3461aa7..0000000000 --- a/packages/flutter_tools/templates/skeleton/README.md.tmpl +++ /dev/null @@ -1,29 +0,0 @@ -# {{projectName}} - -{{description}} - -## Getting Started - -This project is a starting point for a Flutter application that follows the -[simple app state management -tutorial](https://flutter.dev/to/state-management-sample). - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev), which offers tutorials, -samples, guidance on mobile development, and a full API reference. - -## Assets - -The `assets` directory houses images, fonts, and any other files you want to -include with your application. - -The `assets/images` directory contains [resolution-aware -images](https://flutter.dev/to/resolution-aware-images). - -## Localization - -This project generates localized messages based on arb files found in -the `lib/src/localization` directory. - -To support additional languages, please visit the tutorial on -[Internationalizing Flutter apps](https://flutter.dev/to/internationalization). diff --git a/packages/flutter_tools/templates/skeleton/assets/images/2.0x/flutter_logo.png.img.tmpl b/packages/flutter_tools/templates/skeleton/assets/images/2.0x/flutter_logo.png.img.tmpl deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/flutter_tools/templates/skeleton/assets/images/3.0x/flutter_logo.png.img.tmpl b/packages/flutter_tools/templates/skeleton/assets/images/3.0x/flutter_logo.png.img.tmpl deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/flutter_tools/templates/skeleton/assets/images/flutter_logo.png.img.tmpl b/packages/flutter_tools/templates/skeleton/assets/images/flutter_logo.png.img.tmpl deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/flutter_tools/templates/skeleton/l10n.yaml.tmpl b/packages/flutter_tools/templates/skeleton/l10n.yaml.tmpl deleted file mode 100644 index d480072c25..0000000000 --- a/packages/flutter_tools/templates/skeleton/l10n.yaml.tmpl +++ /dev/null @@ -1,3 +0,0 @@ -arb-dir: lib/src/localization -template-arb-file: app_en.arb -output-localization-file: app_localizations.dart diff --git a/packages/flutter_tools/templates/skeleton/lib/main.dart.tmpl b/packages/flutter_tools/templates/skeleton/lib/main.dart.tmpl deleted file mode 100644 index eb568f22bf..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/main.dart.tmpl +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'src/app.dart'; -import 'src/settings/settings_controller.dart'; -import 'src/settings/settings_service.dart'; - -void main() async { - // Set up the SettingsController, which will glue user settings to multiple - // Flutter Widgets. - final settingsController = SettingsController(SettingsService()); - - // Load the user's preferred theme while the splash screen is displayed. - // This prevents a sudden theme change when the app is first displayed. - await settingsController.loadSettings(); - - // Run the app and pass in the SettingsController. The app listens to the - // SettingsController for changes, then passes it further down to the - // SettingsView. - runApp(MyApp(settingsController: settingsController)); -} diff --git a/packages/flutter_tools/templates/skeleton/lib/src/app.dart.tmpl b/packages/flutter_tools/templates/skeleton/lib/src/app.dart.tmpl deleted file mode 100644 index 7ba2c2f39d..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/src/app.dart.tmpl +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; - -import 'sample_feature/sample_item_details_view.dart'; -import 'sample_feature/sample_item_list_view.dart'; -import 'settings/settings_controller.dart'; -import 'settings/settings_view.dart'; - -/// The Widget that configures your application. -class MyApp extends StatelessWidget { - const MyApp({ - super.key, - required this.settingsController, - }); - - final SettingsController settingsController; - - @override - Widget build(BuildContext context) { - // Glue the SettingsController to the MaterialApp. - // - // The ListenableBuilder Widget listens to the SettingsController for changes. - // Whenever the user updates their settings, the MaterialApp is rebuilt. - return ListenableBuilder( - listenable: settingsController, - builder: (BuildContext context, Widget? child) { - return MaterialApp( - // Providing a restorationScopeId allows the Navigator built by the - // MaterialApp to restore the navigation stack when a user leaves and - // returns to the app after it has been killed while running in the - // background. - restorationScopeId: 'app', - - // Provide the generated AppLocalizations to the MaterialApp. This - // allows descendant Widgets to display the correct translations - // depending on the user's locale. - localizationsDelegates: const [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - ], - supportedLocales: const [ - Locale('en', ''), // English, no country code - ], - - // Use AppLocalizations to configure the correct application title - // depending on the user's locale. - // - // The appTitle is defined in .arb files found in the localization - // directory. - onGenerateTitle: (BuildContext context) => - AppLocalizations.of(context)!.appTitle, - - // Define a light and dark color theme. Then, read the user's - // preferred ThemeMode (light, dark, or system default) from the - // SettingsController to display the correct theme. - theme: ThemeData(), - darkTheme: ThemeData.dark(), - themeMode: settingsController.themeMode, - - // Define a function to handle named routes in order to support - // Flutter web url navigation and deep linking. - onGenerateRoute: (RouteSettings routeSettings) { - return MaterialPageRoute( - settings: routeSettings, - builder: (BuildContext context) { - switch (routeSettings.name) { - case SettingsView.routeName: - return SettingsView(controller: settingsController); - case SampleItemDetailsView.routeName: - return const SampleItemDetailsView(); - case SampleItemListView.routeName: - default: - return const SampleItemListView(); - } - }, - ); - }, - ); - }, - ); - } -} diff --git a/packages/flutter_tools/templates/skeleton/lib/src/localization/app_en.arb.tmpl b/packages/flutter_tools/templates/skeleton/lib/src/localization/app_en.arb.tmpl deleted file mode 100644 index 5c2111583c..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/src/localization/app_en.arb.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -{ - "appTitle": "{{projectName}}", - "@appTitle": { - "description": "The title of the application" - } -} diff --git a/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item.dart.tmpl b/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item.dart.tmpl deleted file mode 100644 index b376e0daac..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item.dart.tmpl +++ /dev/null @@ -1,6 +0,0 @@ -/// A placeholder class that represents an entity or model. -class SampleItem { - const SampleItem(this.id); - - final int id; -} diff --git a/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item_details_view.dart.tmpl b/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item_details_view.dart.tmpl deleted file mode 100644 index 37df4a8a46..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item_details_view.dart.tmpl +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; - -/// Displays detailed information about a SampleItem. -class SampleItemDetailsView extends StatelessWidget { - const SampleItemDetailsView({super.key}); - - static const routeName = '/sample_item'; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Item Details'), - ), - body: const Center( - child: Text('More Information Here'), - ), - ); - } -} diff --git a/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item_list_view.dart.tmpl b/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item_list_view.dart.tmpl deleted file mode 100644 index 78066e934b..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/src/sample_feature/sample_item_list_view.dart.tmpl +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../settings/settings_view.dart'; -import 'sample_item.dart'; -import 'sample_item_details_view.dart'; - -/// Displays a list of SampleItems. -class SampleItemListView extends StatelessWidget { - const SampleItemListView({ - super.key, - this.items = const [SampleItem(1), SampleItem(2), SampleItem(3)], - }); - - static const routeName = '/'; - - final List items; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Sample Items'), - actions: [ - IconButton( - icon: const Icon(Icons.settings), - onPressed: () { - // Navigate to the settings page. If the user leaves and returns - // to the app after it has been killed while running in the - // background, the navigation stack is restored. - Navigator.restorablePushNamed(context, SettingsView.routeName); - }, - ), - ], - ), - - // To work with lists that may contain a large number of items, it’s best - // to use the ListView.builder constructor. - // - // In contrast to the default ListView constructor, which requires - // building all Widgets up front, the ListView.builder constructor lazily - // builds Widgets as they’re scrolled into view. - body: ListView.builder( - // Providing a restorationId allows the ListView to restore the - // scroll position when a user leaves and returns to the app after it - // has been killed while running in the background. - restorationId: 'sampleItemListView', - itemCount: items.length, - itemBuilder: (BuildContext context, int index) { - final item = items[index]; - - return ListTile( - title: Text('SampleItem ${item.id}'), - leading: const CircleAvatar( - // Display the Flutter Logo image asset. - foregroundImage: AssetImage('assets/images/flutter_logo.png'), - ), - onTap: () { - // Navigate to the details page. If the user leaves and returns to - // the app after it has been killed while running in the - // background, the navigation stack is restored. - Navigator.restorablePushNamed( - context, - SampleItemDetailsView.routeName, - ); - } - ); - }, - ), - ); - } -} diff --git a/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_controller.dart.tmpl b/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_controller.dart.tmpl deleted file mode 100644 index e32c0dfb75..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_controller.dart.tmpl +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'settings_service.dart'; - -/// A class that many Widgets can interact with to read user settings, update -/// user settings, or listen to user settings changes. -/// -/// Controllers glue Data Services to Flutter Widgets. The SettingsController -/// uses the SettingsService to store and retrieve user settings. -class SettingsController with ChangeNotifier { - SettingsController(this._settingsService); - - // Make SettingsService a private variable so it is not used directly. - final SettingsService _settingsService; - - // Make ThemeMode a private variable so it is not updated directly without - // also persisting the changes with the SettingsService. - late ThemeMode _themeMode; - - // Allow Widgets to read the user's preferred ThemeMode. - ThemeMode get themeMode => _themeMode; - - /// Load the user's settings from the SettingsService. It may load from a - /// local database or the internet. The controller only knows it can load the - /// settings from the service. - Future loadSettings() async { - _themeMode = await _settingsService.themeMode(); - - // Important! Inform listeners a change has occurred. - notifyListeners(); - } - - /// Update and persist the ThemeMode based on the user's selection. - Future updateThemeMode(ThemeMode? newThemeMode) async { - if (newThemeMode == null) return; - - // Do not perform any work if new and old ThemeMode are identical - if (newThemeMode == _themeMode) return; - - // Otherwise, store the new ThemeMode in memory - _themeMode = newThemeMode; - - // Important! Inform listeners a change has occurred. - notifyListeners(); - - // Persist the changes to a local database or the internet using the - // SettingService. - await _settingsService.updateThemeMode(newThemeMode); - } -} diff --git a/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_service.dart.tmpl b/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_service.dart.tmpl deleted file mode 100644 index 6f94dc33b1..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_service.dart.tmpl +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:flutter/material.dart'; - -/// A service that stores and retrieves user settings. -/// -/// By default, this class does not persist user settings. If you'd like to -/// persist the user settings locally, use the shared_preferences package. If -/// you'd like to store settings on a web server, use the http package. -class SettingsService { - /// Loads the User's preferred ThemeMode from local or remote storage. - Future themeMode() async => ThemeMode.system; - - /// Persists the user's preferred ThemeMode to local or remote storage. - Future updateThemeMode(ThemeMode theme) async { - // Use the shared_preferences package to persist settings locally or the - // http package to persist settings over the network. - } -} diff --git a/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_view.dart.tmpl b/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_view.dart.tmpl deleted file mode 100644 index 7aae64450a..0000000000 --- a/packages/flutter_tools/templates/skeleton/lib/src/settings/settings_view.dart.tmpl +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'settings_controller.dart'; - -/// Displays the various settings that can be customized by the user. -/// -/// When a user changes a setting, the SettingsController is updated and -/// Widgets that listen to the SettingsController are rebuilt. -class SettingsView extends StatelessWidget { - const SettingsView({super.key, required this.controller}); - - static const routeName = '/settings'; - - final SettingsController controller; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Settings'), - ), - body: Padding( - padding: const EdgeInsets.all(16), - // Glue the SettingsController to the theme selection DropdownButton. - // - // When a user selects a theme from the dropdown list, the - // SettingsController is updated, which rebuilds the MaterialApp. - child: DropdownButton( - // Read the selected themeMode from the controller - value: controller.themeMode, - // Call the updateThemeMode method any time the user selects a theme. - onChanged: controller.updateThemeMode, - items: const [ - DropdownMenuItem( - value: ThemeMode.system, - child: Text('System Theme'), - ), - DropdownMenuItem( - value: ThemeMode.light, - child: Text('Light Theme'), - ), - DropdownMenuItem( - value: ThemeMode.dark, - child: Text('Dark Theme'), - ) - ], - ), - ), - ); - } -} diff --git a/packages/flutter_tools/templates/skeleton/pubspec.yaml.tmpl b/packages/flutter_tools/templates/skeleton/pubspec.yaml.tmpl deleted file mode 100644 index f4f092fdc1..0000000000 --- a/packages/flutter_tools/templates/skeleton/pubspec.yaml.tmpl +++ /dev/null @@ -1,32 +0,0 @@ -name: {{projectName}} -description: {{description}} - -# Prevent accidental publishing to pub.dev. -publish_to: 'none' - -version: 1.0.0+1 - -environment: - sdk: {{dartSdkVersionBounds}} - -dependencies: - flutter: - sdk: flutter - flutter_localizations: - sdk: flutter - -dev_dependencies: - flutter_test: - sdk: flutter - - flutter_lints: ^5.0.0 - -flutter: - uses-material-design: true - - # Enable generation of localized Strings from arb files. - generate: true - - assets: - # Add assets from the images directory to the application. - - assets/images/ diff --git a/packages/flutter_tools/templates/skeleton/test/implementation_test.dart.test.tmpl b/packages/flutter_tools/templates/skeleton/test/implementation_test.dart.test.tmpl deleted file mode 100644 index 746ac01ee3..0000000000 --- a/packages/flutter_tools/templates/skeleton/test/implementation_test.dart.test.tmpl +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:{{projectName}}/src/app.dart'; -import 'package:{{projectName}}/src/sample_feature/sample_item_details_view.dart'; -import 'package:{{projectName}}/src/settings/settings_controller.dart'; -import 'package:{{projectName}}/src/settings/settings_service.dart'; -import 'package:{{projectName}}/src/settings/settings_view.dart'; - -void main() { - group('ListDetailApp', () { - testWidgets('displays a list of items', (WidgetTester tester) async { - final service = SettingsService(); - final controller = SettingsController(service); - - await controller.loadSettings(); - await tester.pumpWidget(MyApp(settingsController: controller)); - - expect(find.byType(ListTile), findsNWidgets(3)); - }); - - testWidgets('navigates to an item page', (WidgetTester tester) async { - final service = SettingsService(); - final controller = SettingsController(service); - - await controller.loadSettings(); - await tester.pumpWidget(MyApp(settingsController: controller)); - await tester.tap(find.byType(ListTile).first); - await tester.pumpAndSettle(); - - expect(find.byType(SampleItemDetailsView), findsOneWidget); - }); - - testWidgets('changes the app theme', (WidgetTester tester) async { - final service = SettingsService(); - final controller = SettingsController(service); - - // Navigate to Settings - await controller.loadSettings(); - await tester.pumpWidget(MyApp(settingsController: controller)); - await tester.tap(find.byType(IconButton)); - await tester.pumpAndSettle(); - - // Verify defaults in place - expect(controller.themeMode, ThemeMode.system); - expect(find.byType(SettingsView), findsOneWidget); - expect(findApp(ThemeMode.system), findsOneWidget); - - // Change to Dark Theme - await tester.tap(find.text('System Theme')); - await tester.pumpAndSettle(); - await tester.tap(find.text('Dark Theme').last); - await tester.pumpAndSettle(); - - // Verify Dark Theme rendered - expect(controller.themeMode, ThemeMode.dark); - expect(findApp(ThemeMode.dark), findsOneWidget); - - // Change to Light Theme - await tester.tap(find.text('Dark Theme')); - await tester.pumpAndSettle(); - await tester.tap(find.text('Light Theme').last); - await tester.pumpAndSettle(); - - // Verify light theme enabled - expect(controller.themeMode, ThemeMode.light); - expect(findApp(ThemeMode.light), findsOneWidget); - }); - }); -} - -Finder findApp(ThemeMode themeMode) => find.byWidgetPredicate( - (widget) => widget is MaterialApp && widget.themeMode == themeMode, -); diff --git a/packages/flutter_tools/templates/skeleton/test/unit_test.dart.tmpl b/packages/flutter_tools/templates/skeleton/test/unit_test.dart.tmpl deleted file mode 100644 index 026f329e4a..0000000000 --- a/packages/flutter_tools/templates/skeleton/test/unit_test.dart.tmpl +++ /dev/null @@ -1,15 +0,0 @@ -// This is an example unit test. -// -// A unit test tests a single function, method, or class. To learn more about -// writing unit tests, visit -// https://flutter.dev/to/unit-testing - -import 'package:flutter_test/flutter_test.dart'; - -void main() { - group('Plus Operator', () { - test('should add two numbers together', () { - expect(1 + 1, 2); - }); - }); -} diff --git a/packages/flutter_tools/templates/skeleton/test/widget_test.dart.tmpl b/packages/flutter_tools/templates/skeleton/test/widget_test.dart.tmpl deleted file mode 100644 index 1d8332f76c..0000000000 --- a/packages/flutter_tools/templates/skeleton/test/widget_test.dart.tmpl +++ /dev/null @@ -1,31 +0,0 @@ -// This is an example Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility in the flutter_test package. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. -// -// Visit https://flutter.dev/to/widget-testing for -// more information about Widget testing. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - group('MyWidget', () { - testWidgets('should display a string of text', (WidgetTester tester) async { - // Define a Widget - const myWidget = MaterialApp( - home: Scaffold( - body: Text('Hello'), - ), - ); - - // Build myWidget and trigger a frame. - await tester.pumpWidget(myWidget); - - // Verify myWidget shows some text - expect(find.byType(Text), findsOneWidget); - }); - }); -} diff --git a/packages/flutter_tools/templates/template_manifest.json b/packages/flutter_tools/templates/template_manifest.json index 70b73ae56e..3b8ff3b322 100644 --- a/packages/flutter_tools/templates/template_manifest.json +++ b/packages/flutter_tools/templates/template_manifest.json @@ -1,388 +1,368 @@ { - "version": 1.0, - "_comment": "A listing of all possible template output files. Files ending in .img.tmpl correspond to files checked in to the flutter_template_images package in the flutter/packages repo, located at the same path, excluding the .img.tmpl suffix.", - "files": [ - "templates/app/lib/main.dart.tmpl", - "templates/app/pubspec.yaml.tmpl", - "templates/app/README.md.tmpl", + "version": 1.0, + "_comment": "A listing of all possible template output files. Files ending in .img.tmpl correspond to files checked in to the flutter_template_images package in the flutter/packages repo, located at the same path, excluding the .img.tmpl suffix.", + "files": [ + "templates/app/.gitignore.tmpl", + "templates/app/.idea/libraries/Dart_SDK.xml.tmpl", + "templates/app/.idea/libraries/KotlinJavaRuntime.xml.tmpl", + "templates/app/.idea/modules.xml.tmpl", + "templates/app/.idea/runConfigurations/main_dart.xml.tmpl", + "templates/app/.idea/workspace.xml.tmpl", + "templates/app/.metadata.tmpl", + "templates/app/analysis_options.yaml.tmpl", + "templates/app/android-java.tmpl/app/build.gradle.kts.tmpl", + "templates/app/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl", + "templates/app/android-java.tmpl/build.gradle.kts.tmpl", + "templates/app/android-java.tmpl/projectName_android.iml.tmpl", + "templates/app/android-kotlin.tmpl/app/build.gradle.kts.tmpl", + "templates/app/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl", + "templates/app/android-kotlin.tmpl/build.gradle.kts.tmpl", + "templates/app/android-kotlin.tmpl/projectName_android.iml.tmpl", + "templates/app/android.tmpl/.gitignore", + "templates/app/android.tmpl/app/src/debug/AndroidManifest.xml.tmpl", + "templates/app/android.tmpl/app/src/main/AndroidManifest.xml.tmpl", + "templates/app/android.tmpl/app/src/main/res/drawable-v21/launch_background.xml", + "templates/app/android.tmpl/app/src/main/res/drawable/launch_background.xml", + "templates/app/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png", + "templates/app/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png", + "templates/app/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png", + "templates/app/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png", + "templates/app/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png", + "templates/app/android.tmpl/app/src/main/res/values-night/styles.xml", + "templates/app/android.tmpl/app/src/main/res/values/styles.xml", + "templates/app/android.tmpl/app/src/profile/AndroidManifest.xml.tmpl", + "templates/app/android.tmpl/gradle.properties.tmpl", + "templates/app/android.tmpl/gradle/wrapper/gradle-wrapper.properties.tmpl", + "templates/app/android.tmpl/settings.gradle.kts.tmpl", + "templates/app/android.tmpl/settings.gradle", + "templates/app/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl", + "templates/app/ios-objc.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl", + "templates/app/ios-objc.tmpl/Runner/AppDelegate.h", + "templates/app/ios-objc.tmpl/Runner/AppDelegate.m", + "templates/app/ios-objc.tmpl/Runner/main.m", + "templates/app/ios-objc.tmpl/RunnerTests/RunnerTests.m.tmpl", + "templates/app/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl", + "templates/app/ios-swift.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl", + "templates/app/ios-swift.tmpl/Runner/AppDelegate.swift", + "templates/app/ios-swift.tmpl/Runner/Runner-Bridging-Header.h", + "templates/app/ios-swift.tmpl/RunnerTests/RunnerTests.swift.tmpl", + "templates/app/ios.tmpl/.gitignore", + "templates/app/ios.tmpl/Flutter/AppFrameworkInfo.plist", + "templates/app/ios.tmpl/Flutter/Debug.xcconfig", + "templates/app/ios.tmpl/Flutter/Release.xcconfig", + "templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata", + "templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", + "templates/app/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings", + "templates/app/ios.tmpl/Runner.xcworkspace/contents.xcworkspacedata", + "templates/app/ios.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", + "templates/app/ios.tmpl/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json", + "templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png.img.tmpl", + "templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/README.md", + "templates/app/ios.tmpl/Runner/Base.lproj/LaunchScreen.storyboard", + "templates/app/ios.tmpl/Runner/Base.lproj/Main.storyboard", + "templates/app/ios.tmpl/Runner/Info.plist.tmpl", + "templates/app/lib/main.dart.tmpl", + "templates/app/linux.tmpl/.gitignore", + "templates/app/linux.tmpl/CMakeLists.txt.tmpl", + "templates/app/linux.tmpl/flutter/CMakeLists.txt", + "templates/app/linux.tmpl/runner/CMakeLists.txt", + "templates/app/linux.tmpl/runner/main.cc", + "templates/app/linux.tmpl/runner/my_application.cc.tmpl", + "templates/app/linux.tmpl/runner/my_application.cc", + "templates/app/linux.tmpl/runner/my_application.h", + "templates/app/macos.tmpl/.gitignore", + "templates/app/macos.tmpl/Flutter/Flutter-Debug.xcconfig", + "templates/app/macos.tmpl/Flutter/Flutter-Release.xcconfig", + "templates/app/macos.tmpl/Runner.xcodeproj/project.pbxproj.tmpl", + "templates/app/macos.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", + "templates/app/macos.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl", + "templates/app/macos.tmpl/Runner.xcworkspace/contents.xcworkspacedata", + "templates/app/macos.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", + "templates/app/macos.tmpl/Runner/AppDelegate.swift", + "templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png.img.tmpl", + "templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png.img.tmpl", + "templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png.img.tmpl", + "templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png.img.tmpl", + "templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png.img.tmpl", + "templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png.img.tmpl", + "templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png.img.tmpl", + "templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json", + "templates/app/macos.tmpl/Runner/Base.lproj/MainMenu.xib", + "templates/app/macos.tmpl/Runner/Configs/AppInfo.xcconfig.tmpl", + "templates/app/macos.tmpl/Runner/Configs/Debug.xcconfig", + "templates/app/macos.tmpl/Runner/Configs/Release.xcconfig", + "templates/app/macos.tmpl/Runner/Configs/Warnings.xcconfig", + "templates/app/macos.tmpl/Runner/DebugProfile.entitlements", + "templates/app/macos.tmpl/Runner/Info.plist", + "templates/app/macos.tmpl/Runner/MainFlutterWindow.swift", + "templates/app/macos.tmpl/Runner/Release.entitlements", + "templates/app/macos.tmpl/RunnerTests/RunnerTests.swift.tmpl", + "templates/app/projectName.iml.tmpl", + "templates/app/pubspec.yaml.tmpl", + "templates/app/README.md.tmpl", + "templates/app/web/favicon.png.copy.tmpl", + "templates/app/web/icons/Icon-192.png.copy.tmpl", + "templates/app/web/icons/Icon-512.png.copy.tmpl", + "templates/app/web/icons/Icon-maskable-192.png.img.tmpl", + "templates/app/web/icons/Icon-maskable-512.png.img.tmpl", + "templates/app/web/index.html.tmpl", + "templates/app/web/manifest.json.tmpl", + "templates/app/windows.tmpl/.gitignore", + "templates/app/windows.tmpl/CMakeLists.txt.tmpl", + "templates/app/windows.tmpl/flutter/CMakeLists.txt", + "templates/app/windows.tmpl/runner/CMakeLists.txt", + "templates/app/windows.tmpl/runner/flutter_window.cpp", + "templates/app/windows.tmpl/runner/flutter_window.h", + "templates/app/windows.tmpl/runner/main.cpp.tmpl", + "templates/app/windows.tmpl/runner/resource.h", + "templates/app/windows.tmpl/runner/resources/app_icon.ico.img.tmpl", + "templates/app/windows.tmpl/runner/runner.exe.manifest", + "templates/app/windows.tmpl/runner/Runner.rc.tmpl", + "templates/app/windows.tmpl/runner/utils.cpp", + "templates/app/windows.tmpl/runner/utils.h", + "templates/app/windows.tmpl/runner/win32_window.cpp", + "templates/app/windows.tmpl/runner/win32_window.h", - "templates/app_shared/.gitignore.tmpl", - "templates/app_shared/.idea/libraries/Dart_SDK.xml.tmpl", - "templates/app_shared/.idea/libraries/KotlinJavaRuntime.xml.tmpl", - "templates/app_shared/.idea/modules.xml.tmpl", - "templates/app_shared/.idea/runConfigurations/main_dart.xml.tmpl", - "templates/app_shared/.idea/workspace.xml.tmpl", - "templates/app_shared/.metadata.tmpl", - "templates/app_shared/analysis_options.yaml.tmpl", - "templates/app_shared/android-java.tmpl/app/build.gradle.kts.tmpl", - "templates/app_shared/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl", - "templates/app_shared/android-java.tmpl/build.gradle.kts.tmpl", - "templates/app_shared/android-java.tmpl/projectName_android.iml.tmpl", - "templates/app_shared/android-kotlin.tmpl/app/build.gradle.kts.tmpl", - "templates/app_shared/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl", - "templates/app_shared/android-kotlin.tmpl/build.gradle.kts.tmpl", - "templates/app_shared/android-kotlin.tmpl/projectName_android.iml.tmpl", - "templates/app_shared/android.tmpl/.gitignore", - "templates/app_shared/android.tmpl/app/src/debug/AndroidManifest.xml.tmpl", - "templates/app_shared/android.tmpl/app/src/main/AndroidManifest.xml.tmpl", - "templates/app_shared/android.tmpl/app/src/main/res/drawable-v21/launch_background.xml", - "templates/app_shared/android.tmpl/app/src/main/res/drawable/launch_background.xml", - "templates/app_shared/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png", - "templates/app_shared/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png", - "templates/app_shared/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png", - "templates/app_shared/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png", - "templates/app_shared/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png", - "templates/app_shared/android.tmpl/app/src/main/res/values-night/styles.xml", - "templates/app_shared/android.tmpl/app/src/main/res/values/styles.xml", - "templates/app_shared/android.tmpl/app/src/profile/AndroidManifest.xml.tmpl", - "templates/app_shared/android.tmpl/gradle.properties.tmpl", - "templates/app_shared/android.tmpl/settings.gradle.kts.tmpl", - "templates/app_shared/android.tmpl/gradle/wrapper/gradle-wrapper.properties.tmpl", - "templates/app_shared/android.tmpl/settings.gradle", - "templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl", - "templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl", - "templates/app_shared/ios-objc.tmpl/Runner/AppDelegate.h", - "templates/app_shared/ios-objc.tmpl/Runner/AppDelegate.m", - "templates/app_shared/ios-objc.tmpl/Runner/main.m", - "templates/app_shared/ios-objc.tmpl/RunnerTests/RunnerTests.m.tmpl", - "templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl", - "templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl", - "templates/app_shared/ios-swift.tmpl/Runner/AppDelegate.swift", - "templates/app_shared/ios-swift.tmpl/Runner/Runner-Bridging-Header.h", - "templates/app_shared/ios-swift.tmpl/RunnerTests/RunnerTests.swift.tmpl", - "templates/app_shared/ios.tmpl/.gitignore", - "templates/app_shared/ios.tmpl/Flutter/AppFrameworkInfo.plist", - "templates/app_shared/ios.tmpl/Flutter/Debug.xcconfig", - "templates/app_shared/ios.tmpl/Flutter/Release.xcconfig", - "templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata", - "templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", - "templates/app_shared/ios.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings", - "templates/app_shared/ios.tmpl/Runner.xcworkspace/contents.xcworkspacedata", - "templates/app_shared/ios.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", - "templates/app_shared/ios.tmpl/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png.img.tmpl", - "templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/README.md", - "templates/app_shared/ios.tmpl/Runner/Base.lproj/LaunchScreen.storyboard", - "templates/app_shared/ios.tmpl/Runner/Base.lproj/Main.storyboard", - "templates/app_shared/ios.tmpl/Runner/Info.plist.tmpl", - "templates/app_shared/linux.tmpl/.gitignore", - "templates/app_shared/linux.tmpl/CMakeLists.txt.tmpl", - "templates/app_shared/linux.tmpl/flutter/CMakeLists.txt", - "templates/app_shared/linux.tmpl/runner/CMakeLists.txt", - "templates/app_shared/linux.tmpl/runner/main.cc", - "templates/app_shared/linux.tmpl/runner/my_application.cc", - "templates/app_shared/linux.tmpl/runner/my_application.cc.tmpl", - "templates/app_shared/linux.tmpl/runner/my_application.h", - "templates/app_shared/macos.tmpl/.gitignore", - "templates/app_shared/macos.tmpl/Flutter/Flutter-Debug.xcconfig", - "templates/app_shared/macos.tmpl/Flutter/Flutter-Release.xcconfig", - "templates/app_shared/macos.tmpl/Runner.xcodeproj/project.pbxproj.tmpl", - "templates/app_shared/macos.tmpl/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", - "templates/app_shared/macos.tmpl/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme.tmpl", - "templates/app_shared/macos.tmpl/Runner.xcworkspace/contents.xcworkspacedata", - "templates/app_shared/macos.tmpl/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", - "templates/app_shared/macos.tmpl/Runner/AppDelegate.swift", - "templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png.img.tmpl", - "templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png.img.tmpl", - "templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png.img.tmpl", - "templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png.img.tmpl", - "templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png.img.tmpl", - "templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png.img.tmpl", - "templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png.img.tmpl", - "templates/app_shared/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json", - "templates/app_shared/macos.tmpl/Runner/Base.lproj/MainMenu.xib", - "templates/app_shared/macos.tmpl/Runner/Configs/AppInfo.xcconfig.tmpl", - "templates/app_shared/macos.tmpl/Runner/Configs/Debug.xcconfig", - "templates/app_shared/macos.tmpl/Runner/Configs/Release.xcconfig", - "templates/app_shared/macos.tmpl/Runner/Configs/Warnings.xcconfig", - "templates/app_shared/macos.tmpl/Runner/DebugProfile.entitlements", - "templates/app_shared/macos.tmpl/Runner/Info.plist", - "templates/app_shared/macos.tmpl/Runner/MainFlutterWindow.swift", - "templates/app_shared/macos.tmpl/Runner/Release.entitlements", - "templates/app_shared/macos.tmpl/RunnerTests/RunnerTests.swift.tmpl", - "templates/app_shared/projectName.iml.tmpl", - "templates/app_shared/web/favicon.png.copy.tmpl", - "templates/app_shared/web/icons/Icon-192.png.copy.tmpl", - "templates/app_shared/web/icons/Icon-512.png.copy.tmpl", - "templates/app_shared/web/icons/Icon-maskable-192.png.img.tmpl", - "templates/app_shared/web/icons/Icon-maskable-512.png.img.tmpl", - "templates/app_shared/web/index.html.tmpl", - "templates/app_shared/web/manifest.json.tmpl", - "templates/app_shared/windows.tmpl/.gitignore", - "templates/app_shared/windows.tmpl/CMakeLists.txt.tmpl", - "templates/app_shared/windows.tmpl/flutter/CMakeLists.txt", - "templates/app_shared/windows.tmpl/runner/CMakeLists.txt", - "templates/app_shared/windows.tmpl/runner/flutter_window.cpp", - "templates/app_shared/windows.tmpl/runner/flutter_window.h", - "templates/app_shared/windows.tmpl/runner/main.cpp.tmpl", - "templates/app_shared/windows.tmpl/runner/resource.h", - "templates/app_shared/windows.tmpl/runner/resources/app_icon.ico.img.tmpl", - "templates/app_shared/windows.tmpl/runner/runner.exe.manifest", - "templates/app_shared/windows.tmpl/runner/Runner.rc.tmpl", - "templates/app_shared/windows.tmpl/runner/utils.cpp", - "templates/app_shared/windows.tmpl/runner/utils.h", - "templates/app_shared/windows.tmpl/runner/win32_window.cpp", - "templates/app_shared/windows.tmpl/runner/win32_window.h", + "templates/app_test_widget/test/widget_test.dart.tmpl", - "templates/app_test_widget/test/widget_test.dart.tmpl", + "templates/app_integration_test/integration_test/plugin_integration_test.dart.tmpl", - "templates/app_integration_test/integration_test/plugin_integration_test.dart.tmpl", + "templates/cocoapods/Podfile-ios-objc", + "templates/cocoapods/Podfile-ios-swift", + "templates/cocoapods/Podfile-macos", - "templates/cocoapods/Podfile-ios-objc", - "templates/cocoapods/Podfile-ios-swift", - "templates/cocoapods/Podfile-macos", + "templates/module/android/deferred_component/build.gradle.tmpl", + "templates/module/android/deferred_component/src/main/AndroidManifest.xml.tmpl", + "templates/module/android/gradle/build.gradle.tmpl", + "templates/module/android/gradle/gradle.properties.tmpl", + "templates/module/android/gradle/settings.gradle.tmpl", + "templates/module/android/gradle/src/main/AndroidManifest.xml.tmpl", + "templates/module/android/host_app_common/app.tmpl/build.gradle.tmpl", + "templates/module/android/host_app_common/app.tmpl/src/main/AndroidManifest.xml.tmpl", + "templates/module/android/host_app_common/app.tmpl/src/main/java/androidIdentifier/host/MainActivity.java.tmpl", + "templates/module/android/host_app_common/app.tmpl/src/main/res/drawable/launch_background.xml", + "templates/module/android/host_app_common/app.tmpl/src/main/res/mipmap-hdpi/ic_launcher.png", + "templates/module/android/host_app_common/app.tmpl/src/main/res/values/styles.xml", + "templates/module/android/host_app_editable/settings.gradle.copy.tmpl", + "templates/module/android/host_app_ephemeral/settings.gradle.tmpl", + "templates/module/android/library/Flutter.tmpl/build.gradle.tmpl", + "templates/module/android/library/Flutter.tmpl/flutter.iml.copy.tmpl", + "templates/module/android/library/Flutter.tmpl/src/main/AndroidManifest.xml.tmpl", + "templates/module/android/library/Flutter.tmpl/src/main/java/io/flutter/facade/Flutter.java.tmpl", + "templates/module/android/library/Flutter.tmpl/src/main/java/io/flutter/facade/FlutterFragment.java.tmpl", + "templates/module/android/library/include_flutter.groovy.copy.tmpl", + "templates/module/android/library/settings.gradle.copy.tmpl", + "templates/module/android/library_new_embedding/Flutter.tmpl/build.gradle.tmpl", + "templates/module/android/library_new_embedding/Flutter.tmpl/flutter.iml.copy.tmpl", + "templates/module/android/library_new_embedding/Flutter.tmpl/src/main/AndroidManifest.xml.tmpl", + "templates/module/android/library_new_embedding/include_flutter.groovy.copy.tmpl", + "templates/module/android/library_new_embedding/settings.gradle.copy.tmpl", + "templates/module/common/.gitignore.tmpl", + "templates/module/common/.idea/libraries/Dart_SDK.xml.tmpl", + "templates/module/common/.idea/modules.xml.tmpl", + "templates/module/common/.idea/workspace.xml.tmpl", + "templates/module/common/.metadata.tmpl", + "templates/module/common/analysis_options.yaml.tmpl", + "templates/module/common/lib/main.dart.tmpl", + "templates/module/common/projectName.iml.tmpl", + "templates/module/common/projectName_android.iml.tmpl", + "templates/module/common/pubspec.yaml.tmpl", + "templates/module/common/README.md.tmpl", + "templates/module/common/test/widget_test.dart.tmpl", + "templates/module/ios/host_app_ephemeral/Config.tmpl/Debug.xcconfig", + "templates/module/ios/host_app_ephemeral/Config.tmpl/Flutter.xcconfig", + "templates/module/ios/host_app_ephemeral/Config.tmpl/Release.xcconfig", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/AppDelegate.h", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/AppDelegate.m", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Contents.json", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/Contents.json", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/README.md", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Base.lproj/LaunchScreen.storyboard", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Base.lproj/Main.storyboard", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/Info.plist.tmpl", + "templates/module/ios/host_app_ephemeral/Runner.tmpl/main.m", + "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.pbxproj.tmpl", + "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.xcworkspace/contents.xcworkspacedata", + "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", + "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings", + "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/xcshareddata/xcschemes/Runner.xcscheme", + "templates/module/ios/host_app_ephemeral/Runner.xcworkspace.tmpl/contents.xcworkspacedata", + "templates/module/ios/host_app_ephemeral/Runner.xcworkspace.tmpl/xcshareddata/IDEWorkspaceChecks.plist", + "templates/module/ios/host_app_ephemeral/Runner.xcworkspace.tmpl/xcshareddata/WorkspaceSettings.xcsettings", + "templates/module/ios/host_app_ephemeral_cocoapods/Config.tmpl/Debug.xcconfig", + "templates/module/ios/host_app_ephemeral_cocoapods/Config.tmpl/Release.xcconfig", + "templates/module/ios/host_app_ephemeral_cocoapods/Podfile.copy.tmpl", + "templates/module/ios/host_app_ephemeral_cocoapods/Runner.tmpl/AppDelegate.m", + "templates/module/ios/library/Flutter.tmpl/AppFrameworkInfo.plist", + "templates/module/ios/library/Flutter.tmpl/podhelper.rb.tmpl", + "templates/module/ios/library/Flutter.tmpl/README.md", + "templates/module/README.md", - "templates/module/android/deferred_component/build.gradle.tmpl", - "templates/module/android/deferred_component/src/main/AndroidManifest.xml.tmpl", - "templates/module/android/gradle/build.gradle.tmpl", - "templates/module/android/gradle/gradle.properties.tmpl", - "templates/module/android/gradle/settings.gradle.tmpl", - "templates/module/android/gradle/src/main/AndroidManifest.xml.tmpl", - "templates/module/android/host_app_common/app.tmpl/build.gradle.tmpl", - "templates/module/android/host_app_common/app.tmpl/src/main/AndroidManifest.xml.tmpl", - "templates/module/android/host_app_common/app.tmpl/src/main/java/androidIdentifier/host/MainActivity.java.tmpl", - "templates/module/android/host_app_common/app.tmpl/src/main/res/drawable/launch_background.xml", - "templates/module/android/host_app_common/app.tmpl/src/main/res/mipmap-hdpi/ic_launcher.png", - "templates/module/android/host_app_common/app.tmpl/src/main/res/values/styles.xml", - "templates/module/android/host_app_editable/settings.gradle.copy.tmpl", - "templates/module/android/host_app_ephemeral/settings.gradle.tmpl", - "templates/module/android/library/Flutter.tmpl/build.gradle.tmpl", - "templates/module/android/library/Flutter.tmpl/flutter.iml.copy.tmpl", - "templates/module/android/library/Flutter.tmpl/src/main/AndroidManifest.xml.tmpl", - "templates/module/android/library/Flutter.tmpl/src/main/java/io/flutter/facade/Flutter.java.tmpl", - "templates/module/android/library/Flutter.tmpl/src/main/java/io/flutter/facade/FlutterFragment.java.tmpl", - "templates/module/android/library/include_flutter.groovy.copy.tmpl", - "templates/module/android/library/settings.gradle.copy.tmpl", - "templates/module/android/library_new_embedding/Flutter.tmpl/build.gradle.tmpl", - "templates/module/android/library_new_embedding/Flutter.tmpl/flutter.iml.copy.tmpl", - "templates/module/android/library_new_embedding/Flutter.tmpl/src/main/AndroidManifest.xml.tmpl", - "templates/module/android/library_new_embedding/include_flutter.groovy.copy.tmpl", - "templates/module/android/library_new_embedding/settings.gradle.copy.tmpl", - "templates/module/common/.gitignore.tmpl", - "templates/module/common/.idea/libraries/Dart_SDK.xml.tmpl", - "templates/module/common/.idea/modules.xml.tmpl", - "templates/module/common/.idea/workspace.xml.tmpl", - "templates/module/common/.metadata.tmpl", - "templates/module/common/analysis_options.yaml.tmpl", - "templates/module/common/lib/main.dart.tmpl", - "templates/module/common/projectName.iml.tmpl", - "templates/module/common/projectName_android.iml.tmpl", - "templates/module/common/pubspec.yaml.tmpl", - "templates/module/common/README.md.tmpl", - "templates/module/common/test/widget_test.dart.tmpl", - "templates/module/ios/host_app_ephemeral/Config.tmpl/Debug.xcconfig", - "templates/module/ios/host_app_ephemeral/Config.tmpl/Flutter.xcconfig", - "templates/module/ios/host_app_ephemeral/Config.tmpl/Release.xcconfig", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/AppDelegate.h", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/AppDelegate.m", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Contents.json", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/Contents.json", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/README.md", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Base.lproj/LaunchScreen.storyboard", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Base.lproj/Main.storyboard", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/Info.plist.tmpl", - "templates/module/ios/host_app_ephemeral/Runner.tmpl/main.m", - "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.pbxproj.tmpl", - "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.xcworkspace/contents.xcworkspacedata", - "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", - "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings", - "templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/xcshareddata/xcschemes/Runner.xcscheme", - "templates/module/ios/host_app_ephemeral/Runner.xcworkspace.tmpl/contents.xcworkspacedata", - "templates/module/ios/host_app_ephemeral/Runner.xcworkspace.tmpl/xcshareddata/IDEWorkspaceChecks.plist", - "templates/module/ios/host_app_ephemeral/Runner.xcworkspace.tmpl/xcshareddata/WorkspaceSettings.xcsettings", - "templates/module/ios/host_app_ephemeral_cocoapods/Config.tmpl/Debug.xcconfig", - "templates/module/ios/host_app_ephemeral_cocoapods/Config.tmpl/Release.xcconfig", - "templates/module/ios/host_app_ephemeral_cocoapods/Podfile.copy.tmpl", - "templates/module/ios/host_app_ephemeral_cocoapods/Runner.tmpl/AppDelegate.m", - "templates/module/ios/library/Flutter.tmpl/AppFrameworkInfo.plist", - "templates/module/ios/library/Flutter.tmpl/podhelper.rb.tmpl", - "templates/module/ios/library/Flutter.tmpl/README.md", - "templates/module/README.md", + "templates/package/.gitignore.tmpl", + "templates/package/.idea/libraries/Dart_SDK.xml.tmpl", + "templates/package/.idea/modules.xml.tmpl", + "templates/package/.idea/workspace.xml.tmpl", + "templates/package/.metadata.tmpl", + "templates/package/analysis_options.yaml.tmpl", + "templates/package/CHANGELOG.md.tmpl", + "templates/package/lib/projectName.dart.tmpl", + "templates/package/LICENSE.tmpl", + "templates/package/projectName.iml.tmpl", + "templates/package/pubspec.yaml.tmpl", + "templates/package/README.md.tmpl", + "templates/package/test/projectName_test.dart.tmpl", - "templates/package/.gitignore.tmpl", - "templates/package/.idea/libraries/Dart_SDK.xml.tmpl", - "templates/package/.idea/modules.xml.tmpl", - "templates/package/.idea/workspace.xml.tmpl", - "templates/package/.metadata.tmpl", - "templates/package/analysis_options.yaml.tmpl", - "templates/package/CHANGELOG.md.tmpl", - "templates/package/lib/projectName.dart.tmpl", - "templates/package/LICENSE.tmpl", - "templates/package/projectName.iml.tmpl", - "templates/package/pubspec.yaml.tmpl", - "templates/package/README.md.tmpl", - "templates/package/test/projectName_test.dart.tmpl", + "templates/package_ffi/.gitignore.tmpl", + "templates/package_ffi/.metadata.tmpl", + "templates/package_ffi/analysis_options.yaml.tmpl", + "templates/package_ffi/CHANGELOG.md.tmpl", + "templates/package_ffi/ffigen.yaml.tmpl", + "templates/package_ffi/hook/build.dart.tmpl", + "templates/package_ffi/lib/projectName_bindings_generated.dart.tmpl", + "templates/package_ffi/lib/projectName.dart.tmpl", + "templates/package_ffi/LICENSE.tmpl", + "templates/package_ffi/pubspec.yaml.tmpl", + "templates/package_ffi/README.md.tmpl", + "templates/package_ffi/src.tmpl/projectName.c.tmpl", + "templates/package_ffi/src.tmpl/projectName.h.tmpl", + "templates/package_ffi/test/projectName_test.dart.tmpl", - "templates/package_ffi/.gitignore.tmpl", - "templates/package_ffi/.metadata.tmpl", - "templates/package_ffi/analysis_options.yaml.tmpl", - "templates/package_ffi/CHANGELOG.md.tmpl", - "templates/package_ffi/ffigen.yaml.tmpl", - "templates/package_ffi/hook/build.dart.tmpl", - "templates/package_ffi/lib/projectName_bindings_generated.dart.tmpl", - "templates/package_ffi/lib/projectName.dart.tmpl", - "templates/package_ffi/LICENSE.tmpl", - "templates/package_ffi/pubspec.yaml.tmpl", - "templates/package_ffi/README.md.tmpl", - "templates/package_ffi/src.tmpl/projectName.c.tmpl", - "templates/package_ffi/src.tmpl/projectName.h.tmpl", - "templates/package_ffi/test/projectName_test.dart.tmpl", + "templates/plugin/android-java.tmpl/build.gradle.tmpl", + "templates/plugin/android-java.tmpl/projectName_android.iml.tmpl", + "templates/plugin/android-java.tmpl/src/main/java/androidIdentifier/pluginClass.java.tmpl", + "templates/plugin/android-java.tmpl/src/test/java/androidIdentifier/pluginClassTest.java.tmpl", + "templates/plugin/android-kotlin.tmpl/build.gradle.tmpl", + "templates/plugin/android-kotlin.tmpl/projectName_android.iml.tmpl", + "templates/plugin/android-kotlin.tmpl/src/main/kotlin/androidIdentifier/pluginClass.kt.tmpl", + "templates/plugin/android-kotlin.tmpl/src/test/kotlin/androidIdentifier/pluginClassTest.kt.tmpl", + "templates/plugin/android.tmpl/.gitignore", + "templates/plugin/android.tmpl/gradle/wrapper/gradle-wrapper.properties", + "templates/plugin/android.tmpl/gradle.properties.tmpl", + "templates/plugin/android.tmpl/settings.gradle.tmpl", + "templates/plugin/android.tmpl/src/main/AndroidManifest.xml.tmpl", + "templates/plugin/ios-objc.tmpl/projectName.podspec.tmpl", + "templates/plugin/ios-swift.tmpl/projectName.podspec.tmpl", + "templates/plugin/ios.tmpl/.gitignore", + "templates/plugin/lib/projectName.dart.tmpl", + "templates/plugin/lib/projectName_platform_interface.dart.tmpl", + "templates/plugin/lib/projectName_method_channel.dart.tmpl", + "templates/plugin/linux.tmpl/CMakeLists.txt.tmpl", + "templates/plugin/linux.tmpl/include/projectName.tmpl/pluginClassSnakeCase.h.tmpl", + "templates/plugin/linux.tmpl/pluginClassSnakeCase.cc.tmpl", + "templates/plugin/linux.tmpl/pluginClassSnakeCase_private.h.tmpl", + "templates/plugin/linux.tmpl/test/pluginClassSnakeCase_test.cc.tmpl", + "templates/plugin/README.md.tmpl", + "templates/plugin/test/projectName_test.dart.tmpl", + "templates/plugin/test/projectName_method_channel_test.dart.tmpl", + "templates/plugin/windows.tmpl/CMakeLists.txt.tmpl", + "templates/plugin/windows.tmpl/include/projectName.tmpl/pluginClassSnakeCase_c_api.h.tmpl", + "templates/plugin/windows.tmpl/test/pluginClassSnakeCase_test.cpp.tmpl", + "templates/plugin/windows.tmpl/pluginClassSnakeCase.cpp.tmpl", + "templates/plugin/windows.tmpl/pluginClassSnakeCase.h.tmpl", + "templates/plugin/windows.tmpl/pluginClassSnakeCase_c_api.cpp.tmpl", + "templates/plugin/lib/projectName_web.dart.tmpl", - "templates/plugin/android-java.tmpl/build.gradle.tmpl", - "templates/plugin/android-java.tmpl/projectName_android.iml.tmpl", - "templates/plugin/android-java.tmpl/src/main/java/androidIdentifier/pluginClass.java.tmpl", - "templates/plugin/android-java.tmpl/src/test/java/androidIdentifier/pluginClassTest.java.tmpl", - "templates/plugin/android-kotlin.tmpl/build.gradle.tmpl", - "templates/plugin/android-kotlin.tmpl/projectName_android.iml.tmpl", - "templates/plugin/android-kotlin.tmpl/src/main/kotlin/androidIdentifier/pluginClass.kt.tmpl", - "templates/plugin/android-kotlin.tmpl/src/test/kotlin/androidIdentifier/pluginClassTest.kt.tmpl", - "templates/plugin/android.tmpl/.gitignore", - "templates/plugin/android.tmpl/gradle/wrapper/gradle-wrapper.properties", - "templates/plugin/android.tmpl/gradle.properties.tmpl", - "templates/plugin/android.tmpl/settings.gradle.tmpl", - "templates/plugin/android.tmpl/src/main/AndroidManifest.xml.tmpl", - "templates/plugin/ios-objc.tmpl/projectName.podspec.tmpl", - "templates/plugin/ios-swift.tmpl/projectName.podspec.tmpl", - "templates/plugin/ios.tmpl/.gitignore", - "templates/plugin/lib/projectName.dart.tmpl", - "templates/plugin/lib/projectName_platform_interface.dart.tmpl", - "templates/plugin/lib/projectName_method_channel.dart.tmpl", - "templates/plugin/linux.tmpl/CMakeLists.txt.tmpl", - "templates/plugin/linux.tmpl/include/projectName.tmpl/pluginClassSnakeCase.h.tmpl", - "templates/plugin/linux.tmpl/pluginClassSnakeCase.cc.tmpl", - "templates/plugin/linux.tmpl/pluginClassSnakeCase_private.h.tmpl", - "templates/plugin/linux.tmpl/test/pluginClassSnakeCase_test.cc.tmpl", - "templates/plugin/README.md.tmpl", - "templates/plugin/test/projectName_test.dart.tmpl", - "templates/plugin/test/projectName_method_channel_test.dart.tmpl", - "templates/plugin/windows.tmpl/CMakeLists.txt.tmpl", - "templates/plugin/windows.tmpl/include/projectName.tmpl/pluginClassSnakeCase_c_api.h.tmpl", - "templates/plugin/windows.tmpl/test/pluginClassSnakeCase_test.cpp.tmpl", - "templates/plugin/windows.tmpl/pluginClassSnakeCase.cpp.tmpl", - "templates/plugin/windows.tmpl/pluginClassSnakeCase.h.tmpl", - "templates/plugin/windows.tmpl/pluginClassSnakeCase_c_api.cpp.tmpl", - "templates/plugin/lib/projectName_web.dart.tmpl", + "templates/plugin_ffi/android.tmpl/build.gradle.tmpl", + "templates/plugin_ffi/android.tmpl/projectName_android.iml.tmpl", + "templates/plugin_ffi/ffigen.yaml.tmpl", + "templates/plugin_ffi/ios.tmpl/.gitignore", + "templates/plugin_ffi/ios.tmpl/Classes/projectName.c.tmpl", + "templates/plugin_ffi/ios.tmpl/projectName.podspec.tmpl", + "templates/plugin_ffi/lib/projectName_bindings_generated.dart.tmpl", + "templates/plugin_ffi/lib/projectName.dart.tmpl", + "templates/plugin_ffi/linux.tmpl/CMakeLists.txt.tmpl", + "templates/plugin_ffi/linux.tmpl/include/projectName.tmpl/plugin_ffiClassSnakeCase.h.tmpl", + "templates/plugin_ffi/macos.tmpl/Classes/projectName.c.tmpl", + "templates/plugin_ffi/README.md.tmpl", + "templates/plugin_ffi/src.tmpl/CMakeLists.txt.tmpl", + "templates/plugin_ffi/src.tmpl/projectName.c.tmpl", + "templates/plugin_ffi/src.tmpl/projectName.h.tmpl", + "templates/plugin_ffi/windows.tmpl/CMakeLists.txt.tmpl", - "templates/plugin_ffi/android.tmpl/build.gradle.tmpl", - "templates/plugin_ffi/android.tmpl/projectName_android.iml.tmpl", - "templates/plugin_ffi/ffigen.yaml.tmpl", - "templates/plugin_ffi/ios.tmpl/.gitignore", - "templates/plugin_ffi/ios.tmpl/Classes/projectName.c.tmpl", - "templates/plugin_ffi/ios.tmpl/projectName.podspec.tmpl", - "templates/plugin_ffi/lib/projectName_bindings_generated.dart.tmpl", - "templates/plugin_ffi/lib/projectName.dart.tmpl", - "templates/plugin_ffi/linux.tmpl/CMakeLists.txt.tmpl", - "templates/plugin_ffi/linux.tmpl/include/projectName.tmpl/plugin_ffiClassSnakeCase.h.tmpl", - "templates/plugin_ffi/macos.tmpl/Classes/projectName.c.tmpl", - "templates/plugin_ffi/README.md.tmpl", - "templates/plugin_ffi/src.tmpl/CMakeLists.txt.tmpl", - "templates/plugin_ffi/src.tmpl/projectName.c.tmpl", - "templates/plugin_ffi/src.tmpl/projectName.h.tmpl", - "templates/plugin_ffi/windows.tmpl/CMakeLists.txt.tmpl", + "templates/plugin_shared/.gitignore.tmpl", + "templates/plugin_shared/.idea/libraries/Dart_SDK.xml.tmpl", + "templates/plugin_shared/.idea/modules.xml.tmpl", + "templates/plugin_shared/.idea/runConfigurations/example_lib_main_dart.xml.tmpl", + "templates/plugin_shared/.idea/workspace.xml.tmpl", + "templates/plugin_shared/.metadata.tmpl", + "templates/plugin_shared/analysis_options.yaml.tmpl", + "templates/plugin_shared/android.tmpl/.gitignore", + "templates/plugin_shared/android.tmpl/settings.gradle.tmpl", + "templates/plugin_shared/android.tmpl/src/main/AndroidManifest.xml.tmpl", + "templates/plugin_shared/CHANGELOG.md.tmpl", + "templates/plugin_shared/LICENSE.tmpl", + "templates/plugin_shared/macos.tmpl/projectName.podspec.tmpl", + "templates/plugin_shared/projectName.iml.tmpl", + "templates/plugin_shared/pubspec.yaml.tmpl", + "templates/plugin_shared/windows.tmpl/.gitignore", - "templates/plugin_shared/.gitignore.tmpl", - "templates/plugin_shared/.idea/libraries/Dart_SDK.xml.tmpl", - "templates/plugin_shared/.idea/modules.xml.tmpl", - "templates/plugin_shared/.idea/runConfigurations/example_lib_main_dart.xml.tmpl", - "templates/plugin_shared/.idea/workspace.xml.tmpl", - "templates/plugin_shared/.metadata.tmpl", - "templates/plugin_shared/analysis_options.yaml.tmpl", - "templates/plugin_shared/android.tmpl/.gitignore", - "templates/plugin_shared/android.tmpl/settings.gradle.tmpl", - "templates/plugin_shared/android.tmpl/src/main/AndroidManifest.xml.tmpl", - "templates/plugin_shared/CHANGELOG.md.tmpl", - "templates/plugin_shared/LICENSE.tmpl", - "templates/plugin_shared/macos.tmpl/projectName.podspec.tmpl", - "templates/plugin_shared/projectName.iml.tmpl", - "templates/plugin_shared/pubspec.yaml.tmpl", - "templates/plugin_shared/windows.tmpl/.gitignore", + "templates/plugin_cocoapods/ios-objc.tmpl/Classes/pluginClass.h.tmpl", + "templates/plugin_cocoapods/ios-objc.tmpl/Classes/pluginClass.m.tmpl", + "templates/plugin_cocoapods/ios-swift.tmpl/Classes/pluginClass.swift.tmpl", + "templates/plugin_cocoapods/ios.tmpl/Assets/.gitkeep", + "templates/plugin_cocoapods/ios.tmpl/Resources/PrivacyInfo.xcprivacy", + "templates/plugin_cocoapods/macos.tmpl/Classes/pluginClass.swift.tmpl", + "templates/plugin_cocoapods/macos.tmpl/Resources/PrivacyInfo.xcprivacy", - "templates/plugin_cocoapods/ios-objc.tmpl/Classes/pluginClass.h.tmpl", - "templates/plugin_cocoapods/ios-objc.tmpl/Classes/pluginClass.m.tmpl", - "templates/plugin_cocoapods/ios-swift.tmpl/Classes/pluginClass.swift.tmpl", - "templates/plugin_cocoapods/ios.tmpl/Assets/.gitkeep", - "templates/plugin_cocoapods/ios.tmpl/Resources/PrivacyInfo.xcprivacy", - "templates/plugin_cocoapods/macos.tmpl/Classes/pluginClass.swift.tmpl", - "templates/plugin_cocoapods/macos.tmpl/Resources/PrivacyInfo.xcprivacy", + "templates/plugin_swift_package_manager/ios-objc.tmpl/projectName.tmpl/Sources/projectName.tmpl/include/projectName.tmpl/pluginClass.h.tmpl", + "templates/plugin_swift_package_manager/ios-objc.tmpl/projectName.tmpl/Sources/projectName.tmpl/pluginClass.m.tmpl", + "templates/plugin_swift_package_manager/ios-objc.tmpl/projectName.tmpl/Package.swift.tmpl", + "templates/plugin_swift_package_manager/ios-swift.tmpl/projectName.tmpl/Sources/projectName.tmpl/pluginClass.swift.tmpl", + "templates/plugin_swift_package_manager/ios-swift.tmpl/projectName.tmpl/Package.swift.tmpl", + "templates/plugin_swift_package_manager/ios.tmpl/projectName.tmpl/Sources/projectName.tmpl/PrivacyInfo.xcprivacy", + "templates/plugin_swift_package_manager/macos.tmpl/projectName.tmpl/Sources/projectName.tmpl/Resources/.gitkeep", + "templates/plugin_swift_package_manager/macos.tmpl/projectName.tmpl/Sources/projectName.tmpl/pluginClass.swift.tmpl", + "templates/plugin_swift_package_manager/macos.tmpl/projectName.tmpl/Package.swift.tmpl", + "templates/plugin_swift_package_manager/macos.tmpl/projectName.tmpl/Sources/projectName.tmpl/PrivacyInfo.xcprivacy", - "templates/plugin_swift_package_manager/ios-objc.tmpl/projectName.tmpl/Sources/projectName.tmpl/include/projectName.tmpl/pluginClass.h.tmpl", - "templates/plugin_swift_package_manager/ios-objc.tmpl/projectName.tmpl/Sources/projectName.tmpl/pluginClass.m.tmpl", - "templates/plugin_swift_package_manager/ios-objc.tmpl/projectName.tmpl/Package.swift.tmpl", - "templates/plugin_swift_package_manager/ios-swift.tmpl/projectName.tmpl/Sources/projectName.tmpl/pluginClass.swift.tmpl", - "templates/plugin_swift_package_manager/ios-swift.tmpl/projectName.tmpl/Package.swift.tmpl", - "templates/plugin_swift_package_manager/ios.tmpl/projectName.tmpl/Sources/projectName.tmpl/PrivacyInfo.xcprivacy", - "templates/plugin_swift_package_manager/macos.tmpl/projectName.tmpl/Sources/projectName.tmpl/Resources/.gitkeep", - "templates/plugin_swift_package_manager/macos.tmpl/projectName.tmpl/Sources/projectName.tmpl/pluginClass.swift.tmpl", - "templates/plugin_swift_package_manager/macos.tmpl/projectName.tmpl/Package.swift.tmpl", - "templates/plugin_swift_package_manager/macos.tmpl/projectName.tmpl/Sources/projectName.tmpl/PrivacyInfo.xcprivacy", + "templates/widget_preview_scaffold/lib/main.dart.tmpl", + "templates/widget_preview_scaffold/pubspec.yaml.tmpl", + "templates/widget_preview_scaffold/README.md.tmpl", - "templates/skeleton/assets/images/2.0x/flutter_logo.png.img.tmpl", - "templates/skeleton/assets/images/3.0x/flutter_logo.png.img.tmpl", - "templates/skeleton/assets/images/flutter_logo.png.img.tmpl", - "templates/skeleton/l10n.yaml.tmpl", - "templates/skeleton/lib/main.dart.tmpl", - "templates/skeleton/lib/src/app.dart.tmpl", - "templates/skeleton/lib/src/sample_feature/sample_item.dart.tmpl", - "templates/skeleton/lib/src/sample_feature/sample_item_details_view.dart.tmpl", - "templates/skeleton/lib/src/sample_feature/sample_item_list_view.dart.tmpl", - "templates/skeleton/lib/src/localization/app_en.arb.tmpl", - "templates/skeleton/lib/src/settings/settings_controller.dart.tmpl", - "templates/skeleton/lib/src/settings/settings_service.dart.tmpl", - "templates/skeleton/lib/src/settings/settings_view.dart.tmpl", - "templates/skeleton/pubspec.yaml.tmpl", - "templates/skeleton/README.md.tmpl", - "templates/skeleton/test/implementation_test.dart.test.tmpl", - "templates/skeleton/test/unit_test.dart.tmpl", - "templates/skeleton/test/widget_test.dart.tmpl", - - "templates/widget_preview_scaffold/lib/main.dart.tmpl", - "templates/widget_preview_scaffold/pubspec.yaml.tmpl", - "templates/widget_preview_scaffold/README.md.tmpl", - - "templates/xcode/ios/custom_application_bundle/Runner.xcworkspace.tmpl/contents.xcworkspacedata", - "templates/xcode/ios/custom_application_bundle/Runner.xcworkspace.tmpl/xcshareddata/IDEWorkspaceChecks.plist", - "templates/xcode/ios/custom_application_bundle/Runner.xcworkspace.tmpl/xcshareddata/WorkspaceSettings.xcsettings", - "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.pbxproj", - "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.xcworkspace/contents.xcworkspacedata", - "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", - "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings", - "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/xcshareddata/xcschemes/Runner.xcscheme.tmpl" - ] + "templates/xcode/ios/custom_application_bundle/Runner.xcworkspace.tmpl/contents.xcworkspacedata", + "templates/xcode/ios/custom_application_bundle/Runner.xcworkspace.tmpl/xcshareddata/IDEWorkspaceChecks.plist", + "templates/xcode/ios/custom_application_bundle/Runner.xcworkspace.tmpl/xcshareddata/WorkspaceSettings.xcsettings", + "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.pbxproj", + "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.xcworkspace/contents.xcworkspacedata", + "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist", + "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings", + "templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/xcshareddata/xcschemes/Runner.xcscheme.tmpl" + ] } diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart index df4b856b97..9377f45920 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart @@ -1868,9 +1868,9 @@ void main() { const String projectIconImagePath = 'ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png'; final String templateIconContentsJsonPath = - '${Cache.flutterRoot!}/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json'; + '${Cache.flutterRoot!}/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json'; const String templateIconImagePath = - '/flutter_template_images/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png'; + '/flutter_template_images/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png'; fakeProcessManager.addCommands([ xattrCommand, @@ -1962,9 +1962,9 @@ void main() { const String projectIconImagePath = 'ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png'; final String templateIconContentsJsonPath = - '${Cache.flutterRoot!}/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json'; + '${Cache.flutterRoot!}/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json'; const String templateIconImagePath = - '/flutter_template_images/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png'; + '/flutter_template_images/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png'; fakeProcessManager.addCommands([ xattrCommand, @@ -2484,9 +2484,9 @@ void main() { const String projectLaunchImagePath = 'ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png'; final String templateLaunchImageContentsJsonPath = - '${Cache.flutterRoot!}/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json'; + '${Cache.flutterRoot!}/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json'; const String templateLaunchImagePath = - '/flutter_template_images/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png'; + '/flutter_template_images/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png'; fakeProcessManager.addCommands([ xattrCommand, @@ -2576,9 +2576,9 @@ void main() { const String projectLaunchImagePath = 'ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png'; final String templateLaunchImageContentsJsonPath = - '${Cache.flutterRoot!}/packages/flutter_tools/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json'; + '${Cache.flutterRoot!}/packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json'; const String templateLaunchImagePath = - '/flutter_template_images/templates/app_shared/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png'; + '/flutter_template_images/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png'; fakeProcessManager.addCommands([ xattrCommand, diff --git a/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart index d13276e5bc..2b575e1ea1 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart @@ -93,7 +93,6 @@ void main() { 'templates', 'app_integration_test', ), - globals.fs.path.join('flutter', 'packages', 'flutter_tools', 'templates', 'app_shared'), globals.fs.path.join( 'flutter', 'packages', @@ -102,7 +101,6 @@ void main() { 'app_test_widget', ), globals.fs.path.join('flutter', 'packages', 'flutter_tools', 'templates', 'cocoapods'), - globals.fs.path.join('flutter', 'packages', 'flutter_tools', 'templates', 'skeleton'), globals.fs.path.join( 'flutter', 'packages', @@ -195,9 +193,6 @@ void main() { await runner.run(['create', '--no-pub', '--template=app', 'testy1']); expect((await command.usageValues).commandCreateProjectType, 'app'); - await runner.run(['create', '--no-pub', '--template=skeleton', 'testy2']); - expect((await command.usageValues).commandCreateProjectType, 'skeleton'); - await runner.run(['create', '--no-pub', '--template=package', 'testy3']); expect((await command.usageValues).commandCreateProjectType, 'package'); diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart index 130788ec44..a01a6743e9 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart @@ -29,7 +29,7 @@ import 'package:flutter_tools/src/commands/create.dart'; import 'package:flutter_tools/src/commands/create_base.dart'; import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/features.dart'; -import 'package:flutter_tools/src/flutter_project_metadata.dart' show FlutterProjectType; +import 'package:flutter_tools/src/flutter_project_metadata.dart' show FlutterTemplateType; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/version.dart'; @@ -236,60 +236,6 @@ void main() { }, ); - testUsingContext( - 'can create a skeleton (list/detail) app', - () async { - await _createAndAnalyzeProject( - projectDir, - ['-t', 'skeleton', '-i', 'objc', '-a', 'java', '--implementation-tests'], - [ - '.dart_tool/flutter_gen/pubspec.yaml', - '.dart_tool/flutter_gen/gen_l10n/app_localizations.dart', - 'analysis_options.yaml', - 'android/app/src/main/java/com/example/flutter_project/MainActivity.java', - 'android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java', - 'flutter_project.iml', - 'ios/Flutter/AppFrameworkInfo.plist', - 'ios/Runner/AppDelegate.m', - 'ios/Runner/GeneratedPluginRegistrant.h', - 'lib/main.dart', - 'l10n.yaml', - 'assets/images/2.0x/flutter_logo.png', - 'assets/images/flutter_logo.png', - 'assets/images/3.0x/flutter_logo.png', - 'test/unit_test.dart', - 'test/widget_test.dart', - 'test/implementation_test.dart', - 'lib/src/localization/app_en.arb', - 'lib/src/app.dart', - 'lib/src/sample_feature/sample_item_details_view.dart', - 'lib/src/sample_feature/sample_item_list_view.dart', - 'lib/src/sample_feature/sample_item.dart', - 'lib/src/settings/settings_controller.dart', - 'lib/src/settings/settings_view.dart', - 'lib/src/settings/settings_service.dart', - 'lib/main.dart', - 'pubspec.yaml', - 'README.md', - ], - expectedGitignoreLines: flutterPluginsIgnores, - ); - return _runFlutterTest(projectDir); - }, - overrides: { - Pub: - () => Pub.test( - fileSystem: globals.fs, - logger: globals.logger, - processManager: globals.processManager, - usage: globals.flutterUsage, - botDetector: globals.botDetector, - platform: globals.platform, - stdio: mockStdio, - ), - }, - ); - testUsingContext( 'can create a default project if empty directory exists', () async { @@ -1559,7 +1505,7 @@ void main() { ]); void expectExists(String relPath) { - expect(globals.fs.isFileSync('${projectDir.path}/$relPath'), true); + expect(globals.fs.file('${projectDir.path}/$relPath'), exists); } expectExists('lib/main.dart'); @@ -4343,6 +4289,30 @@ void main() { ); }); + testUsingContext( + 'show an error message for removed --template=skeleton', + () async { + final CreateCommand command = CreateCommand(); + final CommandRunner runner = createTestCommandRunner(command); + await expectLater( + runner.run(['create', '--no-pub', '--template=skeleton', projectDir.path]), + throwsToolExit(message: 'The template skeleton is no longer available'), + ); + }, + overrides: { + Pub: + () => Pub.test( + fileSystem: globals.fs, + logger: globals.logger, + processManager: globals.processManager, + usage: globals.flutterUsage, + botDetector: globals.botDetector, + platform: globals.platform, + stdio: mockStdio, + ), + }, + ); + testUsingContext( 'create an FFI plugin with ios, then add macos', () async { @@ -4629,15 +4599,14 @@ void main() { () async { final CreateCommand command = CreateCommand(); final CommandRunner runner = createTestCommandRunner(command); - final List relevantProjectTypes = [ - FlutterProjectType.app, - FlutterProjectType.skeleton, - FlutterProjectType.module, + final List relevantProjectTypes = [ + FlutterTemplateType.app, + FlutterTemplateType.module, ]; - for (final FlutterProjectType projectType in relevantProjectTypes) { + for (final FlutterTemplateType projectType in relevantProjectTypes) { final String relevantAgpVersion = - projectType == FlutterProjectType.module + projectType == FlutterTemplateType.module ? _kIncompatibleAgpVersionForModule : templateAndroidGradlePluginVersion; final String expectedMessage = getIncompatibleJavaGradleAgpMessageHeader( @@ -4657,7 +4626,7 @@ void main() { 'create', '--no-pub', '--template=${projectType.cliName}', - if (projectType != FlutterProjectType.module) '--platforms=android', + if (projectType != FlutterTemplateType.module) '--platforms=android', projectDir.path, ]); @@ -4674,7 +4643,7 @@ void main() { ); // Check expected file for updating Gradle version is present. - if (projectType == FlutterProjectType.app || projectType == FlutterProjectType.skeleton) { + if (projectType == FlutterTemplateType.app) { expect( logger.warningText, contains( @@ -4716,17 +4685,16 @@ void main() { () async { final CreateCommand command = CreateCommand(); final CommandRunner runner = createTestCommandRunner(command); - final List relevantProjectTypes = [ - FlutterProjectType.app, - FlutterProjectType.skeleton, - FlutterProjectType.pluginFfi, - FlutterProjectType.module, - FlutterProjectType.plugin, + final List relevantProjectTypes = [ + FlutterTemplateType.app, + FlutterTemplateType.pluginFfi, + FlutterTemplateType.module, + FlutterTemplateType.plugin, ]; - for (final FlutterProjectType projectType in relevantProjectTypes) { + for (final FlutterTemplateType projectType in relevantProjectTypes) { final String relevantAgpVersion = - projectType == FlutterProjectType.module + projectType == FlutterTemplateType.module ? _kIncompatibleAgpVersionForModule : templateAndroidGradlePluginVersion; final String expectedMessage = getIncompatibleJavaGradleAgpMessageHeader( @@ -4746,7 +4714,7 @@ void main() { 'create', '--no-pub', '--template=${projectType.cliName}', - if (projectType != FlutterProjectType.module) '--platforms=android', + if (projectType != FlutterTemplateType.module) '--platforms=android', projectDir.path, ]); @@ -4759,14 +4727,13 @@ void main() { ); // Check expected file(s) for updating AGP version is/are present. - if (projectType == FlutterProjectType.app || - projectType == FlutterProjectType.skeleton || - projectType == FlutterProjectType.pluginFfi) { + if (projectType == FlutterTemplateType.app || + projectType == FlutterTemplateType.pluginFfi) { expect( logger.warningText, contains(globals.fs.path.join(projectDir.path, 'android/build.gradle')), ); - } else if (projectType == FlutterProjectType.plugin) { + } else if (projectType == FlutterTemplateType.plugin) { expect( logger.warningText, contains(globals.fs.path.join(projectDir.path, 'android/app/build.gradle')), @@ -4808,17 +4775,16 @@ void main() { () async { final CreateCommand command = CreateCommand(); final CommandRunner runner = createTestCommandRunner(command); - final List relevantProjectTypes = [ - FlutterProjectType.app, - FlutterProjectType.skeleton, - FlutterProjectType.pluginFfi, - FlutterProjectType.module, - FlutterProjectType.plugin, + final List relevantProjectTypes = [ + FlutterTemplateType.app, + FlutterTemplateType.pluginFfi, + FlutterTemplateType.module, + FlutterTemplateType.plugin, ]; - for (final FlutterProjectType projectType in relevantProjectTypes) { + for (final FlutterTemplateType projectType in relevantProjectTypes) { final String relevantAgpVersion = - projectType == FlutterProjectType.module + projectType == FlutterTemplateType.module ? _kIncompatibleAgpVersionForModule : templateAndroidGradlePluginVersion; final String unexpectedIncompatibleAgpMessage = getIncompatibleJavaGradleAgpMessageHeader( @@ -4839,7 +4805,7 @@ void main() { 'create', '--no-pub', '--template=${projectType.cliName}', - if (projectType != FlutterProjectType.module) '--platforms=android', + if (projectType != FlutterTemplateType.module) '--platforms=android', projectDir.path, ]); @@ -4866,17 +4832,16 @@ void main() { () async { final CreateCommand command = CreateCommand(); final CommandRunner runner = createTestCommandRunner(command); - final List relevantProjectTypes = [ - FlutterProjectType.app, - FlutterProjectType.skeleton, - FlutterProjectType.pluginFfi, - FlutterProjectType.module, - FlutterProjectType.plugin, + final List relevantProjectTypes = [ + FlutterTemplateType.app, + FlutterTemplateType.pluginFfi, + FlutterTemplateType.module, + FlutterTemplateType.plugin, ]; - for (final FlutterProjectType projectType in relevantProjectTypes) { + for (final FlutterTemplateType projectType in relevantProjectTypes) { final String relevantAgpVersion = - projectType == FlutterProjectType.module + projectType == FlutterTemplateType.module ? _kIncompatibleAgpVersionForModule : templateAndroidGradlePluginVersion; final String unexpectedIncompatibleAgpMessage = getIncompatibleJavaGradleAgpMessageHeader( @@ -4897,7 +4862,7 @@ void main() { 'create', '--no-pub', '--template=${projectType.cliName}', - if (projectType != FlutterProjectType.module) '--platforms=android', + if (projectType != FlutterTemplateType.module) '--platforms=android', projectDir.path, ]); @@ -4924,17 +4889,16 @@ void main() { () async { final CreateCommand command = CreateCommand(); final CommandRunner runner = createTestCommandRunner(command); - final List relevantProjectTypes = [ - FlutterProjectType.app, - FlutterProjectType.skeleton, - FlutterProjectType.pluginFfi, - FlutterProjectType.module, - FlutterProjectType.plugin, + final List relevantProjectTypes = [ + FlutterTemplateType.app, + FlutterTemplateType.pluginFfi, + FlutterTemplateType.module, + FlutterTemplateType.plugin, ]; - for (final FlutterProjectType projectType in relevantProjectTypes) { + for (final FlutterTemplateType projectType in relevantProjectTypes) { final String relevantAgpVersion = - projectType == FlutterProjectType.module + projectType == FlutterTemplateType.module ? _kIncompatibleAgpVersionForModule : templateAndroidGradlePluginVersion; final String unexpectedIncompatibleAgpMessage = getIncompatibleJavaGradleAgpMessageHeader( @@ -4955,7 +4919,7 @@ void main() { 'create', '--no-pub', '--template=${projectType.cliName}', - if (projectType != FlutterProjectType.module) '--platforms=android', + if (projectType != FlutterTemplateType.module) '--platforms=android', projectDir.path, ]); diff --git a/packages/flutter_tools/test/general.shard/application_package_test.dart b/packages/flutter_tools/test/general.shard/application_package_test.dart index 5642396681..f8d845914c 100644 --- a/packages/flutter_tools/test/general.shard/application_package_test.dart +++ b/packages/flutter_tools/test/general.shard/application_package_test.dart @@ -560,7 +560,7 @@ void main() { 'packages', 'flutter_tools', 'templates', - 'app_shared', + 'app', 'ios.tmpl', iconDirSuffix, ), @@ -604,7 +604,7 @@ void main() { globals.fs.path.absolute( 'flutter_template_images', 'templates', - 'app_shared', + 'app', 'ios.tmpl', iconDirSuffix, ), @@ -643,7 +643,7 @@ void main() { 'packages', 'flutter_tools', 'templates', - 'app_shared', + 'app', 'ios.tmpl', launchImageDirSuffix, ), @@ -687,7 +687,7 @@ void main() { globals.fs.path.absolute( 'flutter_template_images', 'templates', - 'app_shared', + 'app', 'ios.tmpl', launchImageDirSuffix, ), diff --git a/packages/flutter_tools/test/general.shard/flutter_project_metadata_test.dart b/packages/flutter_tools/test/general.shard/flutter_project_metadata_test.dart index e8e469911e..5c50f797d7 100644 --- a/packages/flutter_tools/test/general.shard/flutter_project_metadata_test.dart +++ b/packages/flutter_tools/test/general.shard/flutter_project_metadata_test.dart @@ -61,7 +61,7 @@ version: project_type: plugin '''); final FlutterProjectMetadata projectMetadata = FlutterProjectMetadata(metadataFile, logger); - expect(projectMetadata.projectType, FlutterProjectType.plugin); + expect(projectMetadata.projectType, FlutterTemplateType.plugin); expect(projectMetadata.versionChannel, isNull); expect(projectMetadata.versionRevision, isNull); @@ -79,7 +79,7 @@ version: STRING INSTEAD OF MAP project_type: plugin '''); final FlutterProjectMetadata projectMetadata = FlutterProjectMetadata(metadataFile, logger); - expect(projectMetadata.projectType, FlutterProjectType.plugin); + expect(projectMetadata.projectType, FlutterTemplateType.plugin); expect(projectMetadata.versionChannel, isNull); expect(projectMetadata.versionRevision, isNull); @@ -169,7 +169,7 @@ migration: unmanaged_files: {} '''); final FlutterProjectMetadata projectMetadata = FlutterProjectMetadata(metadataFile, logger); - expect(projectMetadata.projectType, FlutterProjectType.app); + expect(projectMetadata.projectType, FlutterTemplateType.app); expect( projectMetadata.migrateConfig.platformConfigs[SupportedPlatform.root]?.createRevision, 'abcdefg', @@ -213,7 +213,7 @@ migration: - 'file1' '''); final FlutterProjectMetadata projectMetadata = FlutterProjectMetadata(metadataFile, logger); - expect(projectMetadata.projectType, FlutterProjectType.app); + expect(projectMetadata.projectType, FlutterTemplateType.app); expect( projectMetadata.migrateConfig.platformConfigs[SupportedPlatform.root]?.createRevision, 'abcdefg', @@ -240,15 +240,27 @@ migration: }); testUsingContext('enabledValues does not contain packageFfi if native-assets not enabled', () { - expect(FlutterProjectType.enabledValues, isNot(contains(FlutterProjectType.packageFfi))); - expect(FlutterProjectType.enabledValues, contains(FlutterProjectType.plugin)); + expect( + ParsedFlutterTemplateType.enabledValues(featureFlags), + isNot(contains(FlutterTemplateType.packageFfi)), + ); + expect( + ParsedFlutterTemplateType.enabledValues(featureFlags), + contains(FlutterTemplateType.plugin), + ); }); testUsingContext( 'enabledValues contains packageFfi if natives-assets enabled', () { - expect(FlutterProjectType.enabledValues, contains(FlutterProjectType.packageFfi)); - expect(FlutterProjectType.enabledValues, contains(FlutterProjectType.plugin)); + expect( + ParsedFlutterTemplateType.enabledValues(featureFlags), + contains(FlutterTemplateType.packageFfi), + ); + expect( + ParsedFlutterTemplateType.enabledValues(featureFlags), + contains(FlutterTemplateType.plugin), + ); }, overrides: {FeatureFlags: () => TestFeatureFlags(isNativeAssetsEnabled: true)}, ); diff --git a/packages/flutter_tools/test/general.shard/template_test.dart b/packages/flutter_tools/test/general.shard/template_test.dart index ec211667e7..2f25e7ec4c 100644 --- a/packages/flutter_tools/test/general.shard/template_test.dart +++ b/packages/flutter_tools/test/general.shard/template_test.dart @@ -115,12 +115,8 @@ void main() { } '''); expect( - (await templatePathProvider.imageDirectory( - 'app_shared', - globals.fs, - globals.logger, - )).path, - globals.fs.path.absolute('flutter_template_images', 'templates', 'app_shared'), + (await templatePathProvider.imageDirectory('app', globals.fs, globals.logger)).path, + globals.fs.path.absolute('flutter_template_images', 'templates', 'app'), ); }, overrides: overrides, diff --git a/packages/flutter_tools/test/integration.shard/analyze_all_templates_test.dart b/packages/flutter_tools/test/integration.shard/analyze_all_templates_test.dart index ee3e9b2068..fc53190b0f 100644 --- a/packages/flutter_tools/test/integration.shard/analyze_all_templates_test.dart +++ b/packages/flutter_tools/test/integration.shard/analyze_all_templates_test.dart @@ -13,14 +13,7 @@ import 'test_utils.dart'; void main() { group('pass analyze template:', () { - final List templates = [ - 'app', - 'module', - 'package', - 'plugin', - 'plugin_ffi', - 'skeleton', - ]; + final List templates = ['app', 'module', 'package', 'plugin', 'plugin_ffi']; late Directory tempDir; setUp(() {